You are here

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.

GNU/Linux: 
Qué te parece: 

Comments

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, 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

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

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

 

Saludos y gracias

Muy buenas, es la primera vez que visito tu blog, y sinceramente este programa Heartbeat parece ser un progama muy eficiente, pero hay unas pequeñas cosas que no entiendo demasiado bien.

Yo estoy usando Ubuntu 8.10

- Dónde aparecen los documentos de configuración authkeys, haresources y ha.cf ? dentro de /etc/ha.d/ como pusiste en este documento no hay ninguno de estos 3 archivos que se tienen que modificar...

Hice un find del documento authkeys y me sale en el directorio: "/usr/share/doc/heartbeat/", con el segundo archivo me sale en el mismo lugar pero con extensión .gz.

Mis preguntas son...

Tengo que modificar esos archivos? (en la ruta que te puse), o en el lugar que me dijiste los tengo que crear de nuevo y poner lo que pones en tu blog?

Espero que me puedas contestar lo antes posible.

Muchisimas gracias por tu atención.

Bob.

Hola Bob,

Si lo instalaste desde los paquetes de Ubuntu, en Intrepid hay la versión 2.x (2.1.3 en concreto).

Lo puedes comprobar haciendo:

dpkg -l | grep heartbeat

Si estas usando Heartbeat v2, ese es el motivo por el cual no encuentras los ficheros. La v2 es un mundo aparte, aunque es mucho más robusto (el post se está anticuando ya).

Saludos

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.

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.

Hola, presento el siguiente problema: ya tengo todo configurado perfectamente cuando tengo cualkier problema el server esclavo toma el control de la situacion pero cuando tengo el primario funcionando y le kito el cable de red el esclavo toma el control, lo ke pasa es ke el primario no se da cuenta de ke esta sin cable y se sigue comportando como primario a pesar ke esta sin red por eso cuando le pongo el cable again entran en conflicto puesto ke ambos estan trabajando como primarios. Necesito saber como configurar para ke el server (cualkiera de los dos) se de cuenta cuando esta aislado sin cable puesto ke en caso de cualkier otra falla me funciona bien menos en este caso. Gracias

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

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

Buenas, estoy intentando montar un cluster para controlar tomcat y nose si lo que he puesto en la directiva siguiente es lo correcto.

"nodo IPaddr2::192.168.1.10/24/eth0 tomcat"

 

Si alguien mu pudiera echar una mano le estaría muy agradecido.

Gracias de antemano.

 

p.d. Gracias por el manual.

En nodo debes poner el hostname del servidor de alta disponibilidad que quieres crear. Aparte de eso la sintaxis es correcta.

Si estás usando Debian, comprueba el correcto funcionamiento del script /etc/init.d/tomcat, que exista y puedas iniciar y parar el servidor Tomcat que quieres monitorizar.

En otras distribuciones puede ser que el script se ubique en el directorio /etc/rc.d/

Saludos

Disculpa e seguido los pasos para configurar dos server de alta disponivilidad con hearbeat... con sus dos nodos y cada nodo con 2 tarjetas de red... mas sin encambio cuando desconecto el cable peer que las conecta para provar las funcionalidad y ver si asigna la ip virtual... simplemente no sucede nada.... ya estube probando y no puedo solucionar nada... necesito ayuda porfavor... si pudieses manda un correo a mi direccion para q pueda mandarte diagramas e incluso una copia de los archivos de configuracion si es que gustas y que pudieses encontrar mi error... puesto que yo ya me cicle

Hola Anónimo,

La ip virtual debe estar accesible (asignada a un nodo) cuando tengas Hearbeat arrancado en ambas máquinas no es necesario que caiga ningún nodo, debería responder a un "ping". Lo que sucede es que esta IP la tomara el nodo principal, o el secundario (cuando el principal haya caído).

Si tienes alguna configuración que no puedas publicar aquí, puedes usar para ello la sección de contacto para mandármela.

No te prometo nada pero haré lo que pueda.

Saludos

En un escenario como el que se propone, lo que aseguro con heartbeat es que si apago el sevicio httpd (service httpd stop) heartbeat respondera haciendo que el servicio se dirija al servidor de reserva o solo sirve si el servidor principal cae (se apaga) ???

mil gracias.

Hola Oriol,

Heartbeat monitoriza el servicio constantemente, cuando este servicio no responde (cae) bien por un problema de apache, porque se ha apagado el servidor o porque no hay comunicación (se estropeó el cable)... el servidor secundario toma el control y atiende las peticiones en la IP virtual.

Saludos.

Hola, estas seguro de esto. YO he probado la configuración propuesta y todo funciona ok si se me cae el primario, pero si paro el servicio (ej. apache), el primario no suelta la ip virtual y cuando accedo a ella vía http me da que el servicio está caido.

Muchas gracias y un saludo.

Puedes hacer alguna de las pruebas que hay un poco más abajo. Wink

Saludos

Buena guia ayuda bastante,  una pregunta existe algun comando o forma de saber que servidor (principal o espejo) esta activo y brindando los servicios?

Desconozco si existe algún comando específico para lo que comentas Undecided, pero puedes usar la interfaz gráfica que también te mostrará los nodos que tienes activos o caídos y en función de tu configuración sabes también cuál está brindando los servicios.

Hola, tengo instalado heartbeat en una red local y me funciona perfectament. Ahora quiero ir un poco más alla y probar-lo con VPN, lo mismo pero que los dos Pcs esten en redes diferentes y unidas por Vpn. Alguién lo ha probado esto? solo me falta abrir el puerto que utiliza heartbeat del router y en teoria creo q tendría q ir tmb.

Gracias.

Desde mi punto de vista aquí el problema principal es configurar la VPN, una vez tienes establecida la conexión VPN y correctamente configurada los dos PCs deberían estar como en una misma red local. Una vez tengas los dos PCs conectados por el túnel VPN, el resto debería ser transparente para Heartbeat.

PD: Siento la respuesta tardía, hemos tenido problemas con el sistema de notificación de comentarios.

Gracias por la respuesta, aunque sea al cabo de un año!!!

Saludos,

Que otros servicios controla heartbeat? he probado con apache, samba, slapd. Hay alguna lista de servicios soportado, o el toma todo lo que este en /etc/init.d/

Gracias,

Uso debian 4 ETCH.

 

 

 

 

Todo lo que tengas en el /etc/init.d o /etc/rc.d (dependiendo de la distribución), en el caso de Debian Etch /etc/init.d

Saludos

Hola, gracias por la orientación, lo que he entendido es que el monitoreo, se redireccionan las peticiones al momento de caer el servidor principal.

Mi inquietud es, tambien realiza balanceo de cargas, para evitar tiempos de respuesta muy altos?.

Gracias de antemano

Hola Mauricio,

Heartbeat no realiza ningún balanceo de carga, solo se encarga de preocuparse de que los servicios estén siempre disponibles.

Para balanceo de carga necesitarías añadirle Linux Virtual Server que se encarga de dicho cometido. No obstante, si estás buscando algo que englobe ambas funcionalidades Ultramonkey te puede venir bien.

Saludos

Antes de nada, una guía cojonuda. Siguiendo los pasos he realizado diversas pruebas y he observado que si paramos el servicio (ej. apache) en la primaria, haciendo un ip add sh eth0 en la secundaria no llega a coger la ip virtual, de tal manera que si accedemos al servidor web vía ip virtual, el servicio nos da como caído.
En resumen que si se cae el servidor principal pues funciona perfectamente, pero si se cae los servicios asociados no nos hace la alta disponibilidad. ¿no debería de actual igual que una caida completa del servidor?

Muchas gracias.

Si, de hecho Heartbeat está monitorizando servicios, no el servidor. No tiene porque caerse todo el servidor tan solo el servicio. Si tiras abajo el servicio en el servidor primario debería responder el secundario.

Es un comportamiento raro, yo probaría de tirar abajo el apache con un "/etc/init.d/apache stop" o si quieres algo más radical un "kill -9" lo que tiene que pasar es que el Heartbeat del servidor primario se da cuenta que el servicio está caído y no responderá a los latidos que llegan del servidor secundario que es lo que pasa también cuando cae el servidor entero. Tal vez con el "ip add sh eth0" estás bloqueando el acceso al servicio, pero el servicio no se ha venido abajo, el Heartbeat se queda tan contento y la comunicación entre ambos continúa como si nada hubiera pasado.

Si aún así no observas un comportamiento correcto sería interesante repasar las configuraciones e indicar que versión de Heartbeat estás usando.

Muchas gracias por pronta respuesta.
Eso entendía que monitorizaba servicios y por tanto server.
Esta es la versión del heartbeat 1.2.5-3 sobre dos servidores debian 2.6.18-6-amd64.
Como dices, hemos tirado el servicio tanto con /etc/init.d/apache stop y directamente con kill. y con ps confirmamos que apache esta KO.
Lo que hemos observado es que el primario no suelta la ip virtual, con lo que el secundario no coje nunca esa ip. Al tirar completamente el primario nos coje la ip directamente.
Los archivos configurados son copiados del blog, cambiando ip's y nombres de hosts :), habíamos probado con md5 en las encriptaciones pero al ver ese comportamiento hemos empezado por lo más básico.

Gracias de nuevo y un saludo.

Por lo que comentas parece que Heartbeat no se entera de que Apache se ha caído, creo que incluso este post se tendría que ampliar por lo que me comentas.

Hay una manera muy bonita de hacer lo que tu quieres con heartbeat de la misma manera usando mon (un sistema de monitorización) que carga una página cada 30 segundos (que no sé si cargaría mucho la máquina) para comprobar que apache está funcionando e incluso hace pings al router para comprobar que el nodo tiene conectividad.

Otra solución que creo te puede valer es Heartbeat v2, aunque las configuraciones han cambiado un poco. Frown

Si eso parece que el Heartbeat no se entera de la caída de apache, ya que si tiramos heartbeat en el primario, salta al secundario y funciona perfectamente.
Cuando tiramos apache solamente, lo comprobamos con ps y accediendo por http directamente a la ip del primario no a la virtual y en ambos casos confirmamos que está KO.
Si tiramos heartbeat, el apache en el secundario inicia sin problemas.
Probaremos dando alta disponibilidad a otro servicio no vaya a ser un problema solo con apache2 (aunque me estraña) y de seguir igual probaremos como dices, con la versión 2 de heartbeat

Ya os contaremos......

Gracias

hola,, alguien sabe como heartbeat puede monitoriar otros servicios, que no esten en init.d , me refiero a apache o tomcat cuando no vienen por defecto en linux y para inicializarlos hay q correr un scritp

Hola Anónimo

Heartbeat se apaña con scripts en /etc/init.d aunque la experiencia me dice que al menos en la v1 esto no funciona siempre bien y lo mejor es usar heartbeat junto con algun sistema externo de monitorización como mon, hay una interesante solución para un virtual server balanceado usando mon, el sistema de ficheros distribuido coda y heartbeat.

Saludos

Hola, mi situación es la siguiente: yo en lugar de estar explotando al 100% una maquina y cuando casque tirar de la otra, quiero ir tirando de ambas maquinas a la vez, para ello he creado 3 particiones en cada maquina:
- una de 1 Gb para sistema (Ubuntu server 9.04)
- y dos de 20 Gb para los servicios.
Mi idea era usar una de esas dos particiones para recuperar si cae su homologa en la otra maquina y repartir los servicios entre una partición de una maquina y la otra partición de la otra maquina.
¿Cómo puedo hacer eso con el HeartBeat?
Muchisimas Gracias!

Hola Javier,

El tema de las particiones lo puedes solucionar con DRBD, para el tema de repartir los servicios i balancear puedes usar LVS.

Saludos

Hola!!!!
Igual y es una pregunta un poco tonta, pero la ip virtual solo se configura en el servidor principal? por ejemplo, tengo que configurar la interfaz virtual con digamos 192.168.1.10 para Eth0:10 virtual solo en el servidor principal?
Saludos y gracias por compartir la info!!!

Que tal Amigo, yo tengo un cluster de conmutación por error con software de Microsoft Server 2008, tengo un problema cuando quito de la alimentación eléctrica (le quito el cable bruscamente) al nodo activo, si me hace la conmutación por error y me switchea al otro nodo y lo convierte en activo, pero la Red Hearbeat se desconecta y después no puedo encontrar la aplicación cluster AWARE, desde ningún cliente fuera del cluster (por supuesto), pero mientras no desconecte este nodo de la corriente eléctrica si veo la aplicación corriendo correctamente y no tengo ningún problema, La red del Heartbeat es un cabel invertido conectado entre los 2 nodos que lo conforman.
Que me hace falta para configurar?

Por tu atención muchas gracias

Buenos días ahora mismo estoy necesitando montar un cluster linux con heartbeat pero quiero añadirle stonith para que remate al nodo que este dando fallas en la red, pero no consiguo hacerlo funcionar, sabes decirme si se puede configurar por red o tiene que ser por modem entre los dos nodos....

Buenas tardes, disculpen mi ignorancia pero hice todo el tutorial, pero no entiendo como insertar la Ip virtual en el esquema, sinceramente no entiendo..
disculpen mi ignorancia nuevamente..
gracias

lo de la IP virtual es algo sencillo, en /etc/network/interfaces tienes que añadir la ip virtual tal que así:
iface eth0:1inet static
address ip virtual
netmask mascara
auto eth0:1

en los dos nodos tienen que tener la misma ip

Hola amigos , la verdad no comprendo este paso, me lo podrian desglosar paso a paso, perdon la ignorancia

/etc/network/interfaces es el fichero que tienes que editar y copiar en el este contenido:


iface eth0:1inet static
address ip virtual
netmask mascara
auto eth0:1

Espero que haya aclarado tus dudas. Indeciso

Hola, estoy usando HeartBeat junto con DRBD, DRBD está configurado y funcionando correctamente, y mis nodos están de la siguiente manera:

nodo1: IP -> 10.108.25.4
/dev/drbd0 (principal), montada en /data --> su particion espejo es la secundaria del nodo2
/dev/drbd1 (secundario), montado en /data2

nodo2: IP -> 10.108.25.10
/dev/drbd0 (secundaria), montada en /data2
/dev/drbd1 (primaria), montada en /data --> la particion espejo de esta es la secundaria del nodo1

en haresources añado lo siguiente:

nodo1 drbddisk::data Filesystem::/dev/drbd0::/data::ext3 IPaddr2::10.108.25.10/24/eth0 apache2 mysql
nodo2 drbddisk::data Filesystem::/dev/drbd1::/data::ext3 IPaddr2::10.108.25.10/24/eth0 apache2 mysql

cuando reinicio heartbeat me da el siguiente error:

'data' not defined in your config
HeartBeat failura [rc=6]. Failed

ERROR: Authenticacion configuracion error.
ERROR: Configuration error, heartbeat not started

Espero que alguien me pueda ayudar. Muchisimas Gracias por adelantado

Hola Anónimo,

supongo que he llegao un poco tarde ya pero tal vez le pueda servir a alguien más.

Volviendo a tu duda, creo que te falta definir correctamente la sección data en /etc/drbd.conf, parece más una cuestión de DRBD que de Heartbeat. Te recomiendo que eches un vistazo aquí.

Hola amigos, he configurado mis nodos de Asterisk y en un principio parece que todo funciona correctamente pero tengo un problema. Si el nodo masestro se me cae salta al esclavo perfectamente, pero he comprobado que cuando se cae el nodo esclavo el maestro tambien se cae, es decir que se me cae el nodo esclavo funcionando el maestro y pierdo conectividad con la ip virtual. Esto es normal?

No, normal no es

la verdad es que deberías mirar los logs. Si estos logs no aclaran tus dudas, tal vez podrías "postearlos" aquí y alguien te podría echar un cable.

Saludos.

Buen Dia mis Estimados

La verdad soy novato en esto de PBX y Heartbeat ,lo que me urge es saber como hacer para que cada vez que haga el failover me mande una alerta de correo electronico a mi bandeja e entrada .

Porfavor si alguien tiene la solucion a este problema que tengo agradeceria que me escriban a mi correo elias.rivadeneyra@hotmail.com

Saludos

Elias Rivadeneyra

Hola Elias,

que yo sepa no se pueden definir acciones dentro de heartbeat en caso de failover. Externamente puedes servirte de un script para monitorizar los logs de forma periódica (usando cron).

Saludos.

PD: Lo siento, pero no se suelen responder dudas por correo ya que lo que interesa es que todo quede al final en el blog. Guiño

Pages