Alta Disponibilidad con Apache2 y Heartbeat en Debian Squeeze

A raíz de las últimas entradas en rm-rf.es y systemadmin.es quería probar el demonio de alta disponibilidad (heartbeat) sobre Debian, la entrada sobre Apache que publicó el primero me inspiró a hacer lo que contaba sobre la “distro” de la espiral.

Partimos de la misma configuración, tenemos dos servidores, cluster01 y cluster02 con las IPs 192.168.2.98 y 192.168.2.99 y una IP flotante 192.168.2.100

Configuradas ambas máquinas, instalamos los paquetes necesarios:

# apt-get install apache2

En nuestro caso, para la configuración de Apache editamos /etc/apache2/ports.conf y añadimos la IP flotante a la línea de NameVirtualHost así:

NameVirtualHost 192.168.2.100:80

Para que Apache no se levante al inicio ya que queremos que el que se encargue de esto es Heartbeat escribimos:

# update-rc.d apache2 remove

Y detenemos el servicio:

# /etc/init.d/apache2 stop

A continuación instalamos Heartbeat.

# apt-get install heartbeat

Y configuramos, estos ficheros de configuración se encuentran todos en /etc/ha.d/ y disponemos de plantillas para configurarlos en /usr/share/doc/heartbeat/. Podemos tomar ejemplo para configuraciones más específica.

Para el archivo ha.cf usamos la misma:

logfile /var/log/cluster.log
logfacility local0
warntime 5
deadtime 30
initdead 120
keepalive 2
bcast eth0
udpport 694
auto_failback on
node cluster01
node cluster02

La explicación

  • logfile y logfacility: Fichero de log y nivel.
  • warntime: Heartbeat avisará cuando un nodo falle tras 5 segundos.
  • deadtime: Hearbeat confirmará que un nodo ha caído, 30 segundos.
  • initdead: Tiempo máximo que Heartbeat esperará a que un nodo arranque, 60 segundos.
  • keepalive: Especifica cada cuanto tiempo Heartbeat enviará paquetes para comprobar la disponibilidad de los nodos, 2 segundos.
  • Las dos últimas líneas son las listas de nodos que conforman el cluster.

Para el fichero authkeys que es donde configuramos la comunicación entre los nodos del clúster, también para Debian podemos usar la original:

auth 2
2 sha1 clu$ter-4uth

Le asignamos los permisos para que sólo root tenga acceso.

# chmod 600 /etc/ha.d/authkeys

El último fichero cambia en Debian y es el haresources que queda con este aspecto:

cluster01 IPaddr2::192.168.2.100/24/eth0 apache2

Cambia la forma de escribir la IP flotante que está de una forma más completa y el script de inicio de Apache que en Debian es apache2.

Seguimos la entrada y la propagación se hace ejecutando el siguiente comando:

# /usr/share/heartbeat/ha_propagate

Levantamos el servicio.

/etc/init.d/heartbeat start

Ya está todo configurado, podemos probar a desactivar la interface de cluster01 y ver como al poco tiempo (el que hemos configurado) se levanta cluster02 para seguir sirviendo páginas.

La configuración entre CentOS y Debian es prácticamente la misma, pero tiene los suficientes detalles como para que los escriba aquí para no olvidar como se hace.

8 Comments.

  1. Muy buen artículo Nordri… ¿no tendrás uno de balanceo de carga por ahí guardado, verdad? 😉

  2. @Informático de Guardia
    Pues no, es un tema pendiente, pero el balanceo de carga es difícil de probar.

    Prueba en How To Forge, ahí hay de todo! 🙂

    Saludos.

  3. bro esta linea

    NameVirtualHost 192.168.2.100:80

    en que nodo va??
    nodo 1?? nodo 2?? en los dos??

    esperando request…

  4. @geeker4 va en los dos, las configuraciones de Apache de ambos nodos o de los que sean, tiene que ser idéntica.

  5. Bro otra pregunta toda la configuracion debe ser identica en los 2 nodos??

    Otra pregunta el archivo:

    logfile /var/log/cluster.log

    No me aparece!

    Aparte ya hice todo referente a tu manual, nada mas cambiando cluster01 por nodo1 y cluster02 por nodo2, pero cuando ejecuto:

    /usr/share/heartbeat/ha_propagate

    Me aparece lo siguiente:


    Propagating HA configuration files to node nodo1.
    ssh: Could not resolve hostname nodo1: Name or service not known
    lost connection
    Setting HA startup configuration on node nodo1.
    sh: chkconfig: not found
    ssh: Could not resolve hostname nodo1: Name or service not known

    ESPERO ME PUEDAS AYUDAR BRO!

  6. toda la configuracion debe ser identica
    Claro compi, piensa que la idea es que si uno cae, el otro siga, por eso tienen que ser iguales.
    Otra pregunta el archivo: logfile /var/log/cluster.log No me aparece!
    Porque no te está funcionando heartbeat, cuando lo configures y lo arranques aparecerá.

    Lo último es porque no está resolviendo los nombres de los nodos, dalos de alta en el DNS o en /etc/resolv.conf. En todos los nodos!

  7. Hola NORDRI, una pregunta, esto sirve para balancear las bases de datos mysql en caso de tenerlos??

  8. @earmoa el demonio de Heartbeat también hace balanceo con MySQL pero por separado al balanceo de Apache, puedes echar una vistazo a la documentación aquí: http://dev.mysql.com/doc/refman/5.0/en/ha-heartbeat-drbd.html

    Saludos.