Servidores de alta disponibilidad: Heartbeat

Hoy explicaremos como configurar heartbeat para dos nodos, y ofrecer un servicio de alta disponibilidad con un servidor principal y un mirror.

En este tutorial tenemos:

  • Servidor principal: asteriskPBX ip 192.168.1.8
  • Servidor espejo: asteriskPBX2 ip 192.168.1.7
  • Ip virtual (linux-ha): 192.168.1.10 (en esta ip se ofrece el servicio de alta disponibilidad)

El primer paso es instalar heartbeat en las 2 maquinas:

apt-get install heartbeat

Ponemos las ips y hostnames en el /etc/hosts de los 2 nodos:

127.0.0.1       localhost.localdomain   localhost
192.168.1.8     asteriskPBX.proyectofinalcarrera.edu    asteriskPBX
192.168.1.7     asteriskPBX2.proyectofinalcarrera.edu   asteriskPBX2

Debemos modificar 3 ficheros en cada una de las maquinas, estos se encuentran en /etc/ha.d:

En authkeys especificaremos las claves, para nuestro caso usaremos el metodo inseguro CRC (que tiene menos carga de CPU) asumiendo que tenemos un buen firewall configurado, podemos usar md5, o sha1 para mayor seguridad:

auth 1
1 crc

En el fichero ha.cf especificaremos las opciones de configuración de heartbeat, indicamos donde queremos guardar los logs, en keepalive le indicamos que los latidos se enviarán cada 2 segundos, en deadtime especificamos que si un nodo no responde en 30 segundos está muerto, en warntime le decimos que si no responde en 10 segundos nos lanzará una alerta, en el inicio antes de considerar un nodo muerto esperaremos 120 segundos para evitar problemas con el arranque del servicio, usaremos el puerto UDP 649 para la comunicación entre las máquinas, en ucast indicaremos nuestro dispositivo ethernet e indicamos que mandamos latidos por unicast a la ip del otro nodo (peer), ponemos el parámetro failback en on para indicar el comportamiento en caso de recuperación de un nodo caído, estando en on este recuperará todos los servicios al volver a estar activo si lo dejamos en off, los servicios residirán en el nodo espejo hasta que este caiga, finalmente indicamos que nodos forman el servicio y un dispositivo ethernet para broadcast:

#       File to write debug messages to
debugfile /var/log/ha-debug
#
#
#       File to write other messages to
#
logfile /var/log/ha-log
#
#
#       Facility to use for syslog()/logger
#
logfacility     local0
#
#
#       A note on specifying "how long" times below...
#
#       The default time unit is seconds
#               10 means ten seconds
#
#       You can also specify them in milliseconds
#               1500ms means 1.5 seconds
#
#
#       keepalive: how long between heartbeats?
#
keepalive       2
#
#       deadtime: how long-to-declare-host-dead?
#
#               If you set this too low you will get the problematic
#               split-brain (or cluster partition) problem.
#               See the FAQ for how to use warntime to tune deadtime.
#
deadtime        30
#
#       warntime: how long before issuing "late heartbeat" warning?
#       See the FAQ for how to use warntime to tune deadtime.
#
warntime 10
#
#
#       Very first dead time (initdead)
#
#       On some machines/OSes, etc. the network takes a while to come up
#       and start working right after you've been rebooted.  As a result
#       we have a separate dead time for when things first come up.
#       It should be at least twice the normal dead time.
#
initdead        120
#
#
#       What UDP port to use for bcast/ucast communication?
#
udpport 694
#       Set up a unicast / udp heartbeat medium
#       ucast [dev] [peer-ip-addr]
#
#       [dev]           device to send/rcv heartbeats on
#       [peer-ip-addr]  IP address of peer to send packets to
#
ucast eth0 (ip_del_otro_servidor)
#
auto_failback   on
#       Tell what machines are in the cluster
#       node    nodename ...    -- must match uname -n
node    asteriskPBX
node    asteriskPBX2
 
bcast   eth0

En el fichero haresources, especificaremos los servicios que debe manejar heartbeat (en este caso apache y mysql), este fichero es el mismo en los dos nodos:

asteriskPBX IPaddr2::192.168.1.10/24/eth0 apache2 mysql

Reiniciamos el servicio heartbeat en las 2 maquinas:

/etc/init.d/heartbeat restart

Y ya tenemos el servicio listo en 192.168.1.10, más adelante veremos como manejar los datos con DRBD.

Comentarios

Que hago si quiero crear 3 nodos?

Que tal, soy nuevo en esto y quisiera saber si me pueden ayudar? quiero saber como realizar esta misma configuracion pero para tres maquinas osea 3 nodos. Porque si me funciona para 2 nodos pero cuando agrego un tercero ya no me funciona.

Gracias

El sistema es el mismo

Si quieres poner 3 nodos no deberías tener problema usando el mismo mecanismo.

Para la comunicación usa broadcast. Entiendo que en tu configuración hay un nodo principal y dos nodos espejos por si falla el principal, no?

Saludos

Y si heartbeat falla??

Hola,

creo que en el fondo soy un pesimista, pero el otro día estaba comentando las virtudes de HeartBeat como clusterización a nivel de servicios y me comenta un informático lo siguiente:

"Chaval, tú sabías que si el proceso de HeartBeat se cuelga en alguna de las 2 máquinas resulta que el servicio en cuestión que tenías clusterizado se te cae??"

A lo que yo dije que sería tan extraño que se colgara HeartBeat como el Apache de turno que tenías clusterizado y ya es cuestión de suma de probabilidades...

"sí claro, y sabes que si el cable de red del interfaz donde el HeartBeat está mirando si existe la otra máquina (el eth1, cuando eth0 es la red normal)se suelta también te deja sin ninguna de las 2 máquinas en la IP virtual??"

Ahí ya me dejó doblao....

Existe alguna opción de hacer que si pierden conectividad se quede funcionando el equipo master??

Se quedó conmigo?? (que también puede ser)

Saludos,

Josema.

Creo que se confundió

Heartbeat, montado de esta manera no supone problemas. Solo hay un PC funcionando a la vez, si uno cae el otro toma el control.

Es decir si el servidor principal cae: se muere el servicio que estas monitorizando, cae el Heartbeat, apagas la máquina, le quitas el cable de red, los servicios pasan a la otra máquina. Otra cosa es que si la apagas bruscamente (por ejemplo un corte de corriente) a DRBD no le dé tiempo de sincronizar los datos del disco en el servidor espejo.

Saludos.

Ufff

Hola amigo , siempre visitando tu blog , donde habia estado ese Hearbeat , pues yo he querido montar algo asi , pero solo habia escuchado de rsync , yo tengo 2 servidorcitos en mi humilde casa , 2 celeron de 2.93 Mhz con 768 y 256 Mb de ram , ademas de una maquinita que quiero hechar andar P III de 933 Mhz , con 256mb y disco de 20 GB , pero tengo mala la motherboard , espero que pronto me la consiga un amigo , para ver si le hecho manos a hearbeat , se puede poner cuanto servicio quieras ?

los dos servidores o mas, tienen que ser me imagino misma distro? , bueno leere un poco este fin de semana , no dejes de comentar tu experiencia con el y Drbd..

por cierto , ya tengo redactado el manual como te lo envio?

asterisk+openfire , lo prometido es deuda

saludosss desde nicaragua

 

 

 

Hola ricky

Hola ricky, saludos de nuevo. El tema del DRBD, ya anda pero falta ajustar un poco la cosa para que vaya fino el mysql.

Al heartbeat le puedes meter tantos servicios como tengas en el /etc/init.d/, a ver si tienes suerte con el amigo (yo el otro servidor también lo conseguí así de un colega, y el colega lo había recogido de la basura). Con el tema del heartbeat, podrías usar distribuciones distintas en las dos maquinas mientras el kernel sea 2.6.x en ambas máquinas, lo que si te aconsejo es que uses la misma versión del heartbeat en ambas máquinas.

El manual de asterisk+openfire me lo puedes mandar si quieres usando el formulario de contacto.

Saludos desde España

Dame tu correo

ok , siempre interesante esta herramienta , por cierto por el formulario no te lo puedo enviar , el doc lleva imagenes , seria mejor que me facilitaras una cuenta de correo ...

 

saludosss

De acuerdo

Te he mandado un correo con la dirección. Mejor así. Wink

 

Saludos y gracias