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.

URL para hacer trackback a este post:

http://bytecoders.net/trackback/196
 

Comentarios

heartbeat unplug

Hola,

Tengo un problema, me funciona heartbeat y drbd correctamente solo mediante service heartbeat stop (node 1), en cambio si lo hago desconectando el cable ethernet del node 1, no se levanta el node 2.

Muchas gracias

Probelmas con bindaddr

Después de montar todo el tinglado y comprobar que funciona corretamente el paso de asterisk y el redfone al hacer un switchover o un failover, me encuentro con un problema de asterisk que desluce todo el trabajo que llevo hecho.
Resulta que si hago un bindaddr en el iax.conf a la IP virtual, no funciona!.
No se pueden conectar las extensiones (no sale ningún error en el CLI, así que no llega absolutamente nada).
Y si pongo que escuche en la 0.0.0.0 (osea en todos los interfaces), tampoco funciona.
La única manera es poniendo en el bindaddr la ip real de asterisk1.
Es como si no pudiese hacer un bindaddr de la IP virtual y tengo que definir la del asterisk1...y esto por supuesto no mola, porque si hay un failover, las extensiones iax (y sip) no se pueden loguear en asterisk2.

La ip virtual la tengo definida tan solo en mi /etc/ha.d/haresources:
asterisk1 drbddisk::r0 Filesystem::/dev/drbd0::/mnt/local/replica::ext4 IPaddr::192.168.3.100/24/eth0 fonulator asterisk

- ¿Será que la tengo que definir también en el /etc/network/intercaes así?
iface eth0:1inet static
address ip virtual
netmask mascara
auto eth0:1

- ¿Será que tiene que intenta arrancar antes Asterisk que heartbeat y cuando arranca asterisk no existe esta ip?...(aunque si fuese esto reiniciando asterisk ya tendría que ir...)

- ¿Tiene que ver algo de eso de multihomed??

Te agradecería si me pudieses dar algo de luz sobre este asunto y si tu también te has encontrado este problema, porque después de montar toda el asunto, desluce un poco la instalación.

Muchas gracias.

Asterisk no soporta multihoming

Cierto, Asterisk no soporta multihoming. Es posible hacer una "ñapa" con siproxd. Risa

Te aconsejo que leas (si no lo has hecho ya) este hilo ya que aporta bastante luz sobre dicho asunto.

Saludos.

Dudas

Hola, pues soy nuevo en este tema y tengo unas preguntas, si me las puedes responder porfavor:

cada servidor solo debe poseer una interfaz de red?, es decir tiene q haber una para los latidos y otra para los servicios , o se utiliza la misma interfaz?

Se pudiera montar el servidor espejo en otra localidad , es decir dentro de otra red?

cuando el servidor se cae , y se accede a ese servidor, el mismo servidor con la ayuda de heartbeat es que redirecciona al servidor de respaldo.

De ante mano gracias

Alla voy

No sé si es demasiado tarde pero de cualquier modo allá voy por si le resulta útil a alguien más.

cada servidor solo debe poseer una interfaz de red?, es decir tiene q haber una para los latidos y otra para los servicios , o se utiliza la misma interfaz?

Solo necesitas una interfaz de red. Se usa otra ip virtual (adicional) para el servicio de alta disponibilidad, no es necesario más hardware ni conexiones físicas.

Se pudiera montar el servidor espejo en otra localidad , es decir dentro de otra red?

Si estás conectado directamente no hay problema, te aconsejaría que usaras una VPN si tienes que salir a Internet para hacer esto.

cuando el servidor se cae , y se accede a ese servidor, el mismo servidor con la ayuda de heartbeat es que redirecciona al servidor de respaldo.

Heartbeat no redirecciona, simplemente activa la ip virtual cuando un servidor o uno de los servicios que monitoriza se cae. Tu accedes a esa ip virtual sin necesidad de saber cual de los dos servidores es el que está activo y responde a dicha ip.

en que circunstancias puedo usar esta herramienta???

Hola a todos, espero que me puedan ayudar, estoy intentando virtualizar servidores con software libre de momento elegi KVM, pero el punto es que necesito saber como complementar esta herramienta de tal forma que me permita tener alta disponibilidad o continuidad de servicios. El hecho es que para mi investigacion necesito software libre. Algo importante no cuento con SAN nada mas con 2 servidores, como puedo simular clusterización o algo asi, esta herramienta me parece muy interesante, ademas me gustaria saber si puedo utilizarla despues de haber virtualizado con KVM... no tengo mucho conocimiento del tema aun, me serviria mucho su ayuda.... Gracias.