Para implementar en Linux clusters HA (High Availability,
alta disponibilidad)
utilizados principalmente en
granjas de servidores,
tendremos que hacer trabajar conjuntamente varias piezas (al estilo UNIX).
Este tipo de clusters consta de tres componentes:
- los servidores reales: son las máquinas que realmente prestan el servicio a los
clientes, en las que corre Apache. Para asegurar un servicio 24x7 tendremos varios servidores reales.
- el balanceador de carga virtual: el balanceador de carga (director) reparte
las peticiones de los clientes entre los servidores reales. Para que el balanceador de carga no sea
un SPOF (Single Point Of Failure, Punto único de fallo) utilizaremos un balanceador
master junto con un balanceador backup, conformando un balanceador virtual.
- los datos: los servidores reales deben servir los mismos datos.
Para que todo funcione necesitamos software que cumpla las siguientes funciones:
- balancear la carga: el software que se encarga de balancear la carga
entre los servidores reales es
LVS
(Linux Virtual Server, linuxvirtualserver.org),
instalado en ambos balanceadores (también se encarga de mantener los balanceadores sincronizados
entre sí).
- monitorizar los balanceadores (failover): para monitorizar los balanceadores y activar
el balanceador backup si el balanceador master falla podemos utilizar HeartBeat
(desarrollado por Linux-HA,
linux-ha.org/Heartbeat/) o KeepAlived
(keepalived.org).
- monitorizar los servidores reales (health checks): para monitorizar los servidores
reales y excluirlos si fallan (y reinsertarlos cuando vuelven a estar en línea) podemos utilizar
Ldirectord (vergenet.net/linux/ldirectord/)
o KeepAlived (monitoriza tanto los balanceadores como los servidores reales).
- que los servidores reales sirvan los mismos datos: para que los servidores
reales sirvan los mismos datos tenemos varias opciones, siendo lo más recomendable
algún sistema de almacenamiento compartido como
NFS
(junto con el sistema de mirror en red
DRBD) o
AoE
(junto con un filesystem diseñado para clusters como
Coda).
En algunos casos puede ser suficiente aplicar
mirroring,
en cuyo caso cada servidor real tendrá sus propios datos que serán sincronizados
periódicamente (por ejemplo con
rsync).
- monitorizar el sistema: es habitual instalar algún software que
monitorize el sistema (carga, rendimiento...) como por ejemplo MON
(Service Monitoring Daemon, escrito en Perl, monitoriza el sistema y ejecuta acciones
cuando un servicio deja de funcionar,
mon.wiki.kernel.org) o
HAPM
(High Availability Port Monitor, hapm.sourceforge.net).
- hora NTP: para asegurarnos de que todos los nodos tienen la misma hora del
sistema (System Time) se suelen configurar para que se conecten al mismo servidor de hora
NTP
(Network Time Protocol), que puede ser local.
Hacer funcionar este tipo de cluster no es tarea sencilla ya que hay muchas posibles topologías
y muchas posibilidades de configuración. Dos opciones muy utilizadas son:
- UltraMonkey: proyecto que simplifica la instalación y configuración de
un cluster HA integrando las herramientas LVS, HeartBeat y Ldirectord.
Leer más: Clusters
UltraMonkey
- LVS + Keepalived: proyecto que permite instalar un cluster HA integrando las herramientas
LVS y Keepalived (que reemplaza a HeartBeat y Ldirectord).
Leer más: Clusters
LVS + Keepalived