Clusters HA con LVS

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:

  1. los servidores reales: son las máquinas que realmente prestan el servicio a los clientes, en las que corre Apache. Para asegurar un servicio 24×7 tendremos varios servidores reales.
  2. 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.
  3. los datos: los servidores reales deben servir los mismos datos.

Para que todo funcione necesitamos software que cumpla las siguientes funciones:

  1. 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í).
  2. 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).
  3. 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).
  4. 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).
  5. 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).
  6. 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.

Recursos

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:

  1. UltraMonkey: proyecto que simplifica la instalación y configuración de un cluster HA integrando las herramientas LVS, HeartBeat y Ldirectord.
  2. LVS + Keepalived: proyecto que permite instalar un cluster HA integrando las herramientas LVS y Keepalived (que reemplaza a HeartBeat y Ldirectord).

Artículos en la categoría "Virtualización"

  1. Centralitas telefónicas IP PBX
  2. Clusters Beowulf/PVM
  3. Clusters Beowulf/MPI
  4. Clusters OpenMosix
  5. Clusters Kerrighed
  6. Clusters HA con LVS
  7. Clusters UltraMonkey
  8. Clusters LVS + Keepalived
  9. Emulador Qemu
  10. Máquina virtual VirtualBox
  11. Máquina virtual Xen
  12. API de Windows para Linux: WINE
  13. La jaula en Linux: chroot
  14. Cómo ejecutar aplicaciones Android en Linux
  15. RAID (discos redundantes)
  16. LVM (volúmenes lógicos)
  17. AoE (ATA over Ethernet)
  18. Mirror remoto con DRBD

3 Comments:

  1. Me gusto mucho, creo q el documento va al grano de una manera clara y precisa. Cuando me entere de lvs quise implementarlo y de muchos tutoriales q he leido este a sido uno de los mejores. Para implentar HA utilizare ultramonkey, asi que despues comento que tan buena es la explicacion de este.

    Muchas Gracias.. y sigue asi

  2. Que tal a sido ultramonkey, cual de los dos es mas eficiente? Alguien los a testeado..

    Gracias.

  3. Muy buena informacion y muy detallada, pero soy nuevo en esto y no logro comprender el funcionamiento del Cluster, ademas de HA, que aseguraria que el servicio no se interrumpa, puede el cluster compartir entre las servidores reales, sus “capacidades”, como servir HTTP, PHP y demas pero de forma compartida, al igual que su espacio fisico como dice aca: “que los servidores reales sirvan los mismos datos”, serian datos identicos para todos los equipos reales, o podria hacerse que si tengo por ejemplo 5 servidores, compartan sus “capacidades” es que decir, que si fuera para servicios web, podria aljar sitios, entre los 5, y se balancearia hacia el servidor correcto cuando sea necesario (cuando le persona busque determinado sitio se dijira al servidor que lo contiene).

    Espero me entiendan, Muchas Gracias!

    PD: puse “capacidades”, no encontre una palabra para clasificarlo mejor