Asterisk Alta disponibilidad - Heartbeat en Linode

Terminamos el ciclo de artículos dedicados a Asterisk y alta disponibilidad con la instalación y configuración de Heartbeat. Heartbeat se necesita para que los dos servidores sepan el estado del otro. Cuando el master se cae, el slave toma el control cargando la partición de DRBD donde hemos guardado los datos de configuración de Asterisk, poniendo activo el IP compartido y arrancando dahdi y asterisk (en mi caso).

Usaremos la misma configuración que hemos ya visto en el precedente articulo sobre DRBD.

Para resumir:

Servidor A

IP publico: 69.164.204.41
IP Lan: 192.168.130.234

 

Servidor B

IP publico: 69.164.204.42
IP Lan: 192.168.130.58

 

Primero compramos en Linode un segundo IP publico para el servidor A (costo: un dólar al mes) que será el IP “virtual” que compartirán los dos servidores. Una vez comprado, en la pagina de administración de Linode del servidor B configuramos el failover. Esto permite que al caerse el servidor A, el servidor B tomará la gestión de ese IP.

Vamos al menú Network y ahí, casi al fondo de la pagina aparece esta ventana:

heartbeat1 

Damos click en “IP Failover linkage” y en la pagina que aparece escogemos la IP que acabamos de comprar:

heartbeat2

 

Presionamos el botón Submit y listo. Ya tenemos nuestro IP publico virtual.

Este es el IP donde ponemos Asterisk a la escucha:

nano /etc/asterisk/sip.conf

cambiamos esta línea:

bindaddr=0.0.0.0

para que quede:

bindaddr=72.14.190.93

Ahora tenemos que instalar Heartbeat. Este programa es presente en los repositorios "extras” de CentOS. Para activarlos:

nano /etc/yum.repos.d/CentOS-Base.repo

modificamos este bloque:

[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

para que quede:

[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

Guardamos los cambios y instalamos heartbeat:

yum install heartbeat

No se porque pero en mi caso he tenido que repetir el comando dos veces; en la primera me instalaba todas las dependencias menos el programa heartbeat.

Ahora tenemos que crear tres archivos de configuración:

  • ha.cf
  • authkeys
  • haresources

Empecemos con el que se encarga de controlar el estado de los servidores.

En el servidor A:

nano /etc/ha.d/ha.cf

pegamos las siguientes líneas:

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 120
initdead 120
ucast eth0 192.168.130.58
udpport 694
auto_failback on
node test1.voztovoice.org
node test2.voztovoice.org

En servidor B:

nano /etc/ha.d/ha.cf

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 120
initdead 120
udpport 694
ucast eth0 192.168.130.234
auto_failback on
node test1.voztovoice.org
node test2.voztovoice.org

Ahora en ambos servidores creamos el archivo que utilizará Heartbeat para el intercambios de llaves de autenticación y el archivo donde indicaremos la IP virtual compartida y los servicios que heartbeat deberá gestionar.

Estos archivos tienen que ser iguales en ambos servidores:

nano /etc/ha.d/authkeys

auth 3
3 md5 password

Usamos como método de encriptación MD5 y cambiamos la palabra password con la contraseña que queremos utilizar (igual en ambos servidores).

Ahora tenemos que cambiar los permisos de este archivo para que sea accesible (en lectura y escritura) solamente para el usuario root:

chmod  600 /etc/ha.d/authkeys

para terminar el archivo de los recursos:

nano /etc/ha.d/haresources

Ponemos:

test1.voztovoice.org IPaddr2::72.14.190.93/24 drbddisk::data Filesystem::/dev/drbd1::/data::ext3 dahdi asterisk

(tiene que estar todo el la misma línea)

Definimos como servidor Master test1.voztovoice.org y indicamos la IP virtual que acabamos de comprar. drbddisk es el script que se encarga de montar la partición donde hemos guardado los archivos de configuración de Asterisk, en mi caso /dev/drbd1. Por ultimo indicamos los servicios que Heartbeat tiene que arrancar, en mi caso dahdi y asterisk.

Estos servicios tienes que ser indicados en la carpeta:

/etc/ha.d/resource.d/

Para hacerlo creamos un enlace simbólico:

cd /etc/ha.d/resource.d

ln –s /etc/init.d/asterisk asterisk

ln –s /etc/init.d/dahdi dahdi

Ahora el problema. Todo parecía funcionar bien pero heartbeat no me montaba la partición /dev/drbd1 y asterisk no podía funcionar.

Revisando las cosas me di cuenta que el script drbddisk (que viene con la instalación de Heartbeat) estaba mal configurado.

Lo he resuelto de esta forma:

nano /etc/ha.d/resource.d/drbddisk

y he cambiado esta línea:

DEFAULTFILE="/etc/default/drbd"

con esta:

DEFAULTFILE="/etc/drbd.conf"

indicando donde efectivamente se encuentra el archivo de configuración de drbd.

para terminar la configuración tenemos que hacer los últimos cambios en ambos servidores:

chkconfig asterisk off

chkconfig dahdi off

Esto porque es Heartbeat que se encarga de iniciar los dos programas.

chkconfig drbd on

chkconfig --add heartbeat

chkconfig heartbeat on

Volvemos a reiniciar ambos servidores:

reboot

Ahora miramos que pasa en el log de Heartbeat del servidor B cuando se cae el servidor A:

tail –f /var/log/ha-debug

heartbeat[2405]: 2010/05/16_16:25:30 info: Received shutdown notice from 'test1.voztovoice.org'.
heartbeat[2405]: 2010/05/16_16:25:30 info: Resources being acquired from test1.voztovoice.org.
heartbeat[2405]: 2010/05/16_16:25:30 debug: StartNextRemoteRscReq(): child count 1
heartbeat[2532]: 2010/05/16_16:25:30 info: acquire local HA resources (standby).
heartbeat[2532]: 2010/05/16_16:25:30 info: local HA resource acquisition completed (standby).
heartbeat[2533]: 2010/05/16_16:25:30 info: No local resources [/usr/share/heartbeat/ResourceManager listkeys test2.voztovoice.org] to acquire.
heartbeat[2405]: 2010/05/16_16:25:30 info: Standby resource acquisition done [all].
heartbeat[2405]: 2010/05/16_16:25:30 debug: StartNextRemoteRscReq(): child count 1
heartbeat[2559]: 2010/05/16_16:25:30 debug: notify_world: setting SIGCHLD Handler to SIG_DFL
harc[2559]:     2010/05/16_16:25:30 info: Running /etc/ha.d/rc.d/status status
mach_down[2575]:        2010/05/16_16:25:30 info: Taking over resource group IPaddr2::72.14.190.93/24
ResourceManager[2601]:  2010/05/16_16:25:30 info: Acquiring resource group: test1.voztovoice.org IPaddr2::72.14.190.93/24 drbddisk::data Filesystem::/dev/drbd1::/data::ext3 dahdi asterisk
IPaddr2[2628]:  2010/05/16_16:25:30 INFO:  Resource is stopped
ResourceManager[2601]:  2010/05/16_16:25:30 info: Running /etc/ha.d/resource.d/IPaddr2 72.14.190.93/24 start
ResourceManager[2601]:  2010/05/16_16:25:30 debug: Starting /etc/ha.d/resource.d/IPaddr2 72.14.190.93/24 start
IPaddr2[2734]:  2010/05/16_16:25:30 INFO: ip -f inet addr add 72.14.190.93/24 brd 72.14.190.255 dev eth0
IPaddr2[2734]:  2010/05/16_16:25:30 INFO: ip link set eth0 up
IPaddr2[2734]:  2010/05/16_16:25:30 INFO: /usr/lib/heartbeat/send_arp -i 200 -r 5 -p /var/run/heartbeat/rsctmp/send_arp/send_arp-72.14.190.93 eth0 72.14.190.93 auto not_used not_used
IPaddr2[2708]:  2010/05/16_16:25:30 INFO:  Success
INFO:  Success
ResourceManager[2601]:  2010/05/16_16:25:30 debug: /etc/ha.d/resource.d/IPaddr2 72.14.190.93/24 start done. RC=0
ResourceManager[2601]:  2010/05/16_16:25:30 info: Running /etc/ha.d/resource.d/Filesystem /dev/drbd1 /data ext3 start
ResourceManager[2601]:  2010/05/16_16:25:30 debug: Starting /etc/ha.d/resource.d/Filesystem /dev/drbd1 /data ext3 start
Filesystem[2906]:       2010/05/16_16:25:31 INFO: Running start for /dev/drbd1 on /data
Filesystem[2895]:       2010/05/16_16:25:31 INFO:  Success
INFO:  Success
ResourceManager[2601]:  2010/05/16_16:25:31 debug: /etc/ha.d/resource.d/Filesystem /dev/drbd1 /data ext3 start done. RC=0
ResourceManager[2601]:  2010/05/16_16:25:31 info: Running /etc/ha.d/resource.d/dahdi  start
ResourceManager[2601]:  2010/05/16_16:25:31 debug: Starting /etc/ha.d/resource.d/dahdi  start
No hardware timing source found in /proc/dahdi, loading dahdi_dummy
Running dahdi_cfg:  [  OK  ]
ResourceManager[2601]:  2010/05/16_16:25:31 debug: /etc/ha.d/resource.d/dahdi  start done. RC=0
ResourceManager[2601]:  2010/05/16_16:25:31 info: Running /etc/ha.d/resource.d/asterisk  start
ResourceManager[2601]:  2010/05/16_16:25:31 debug: Starting /etc/ha.d/resource.d/asterisk  start
Starting asterisk: [  OK  ]
ResourceManager[2601]:  2010/05/16_16:25:32 debug: /etc/ha.d/resource.d/asterisk  start done. RC=0
mach_down[2575]:        2010/05/16_16:25:32 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired
mach_down[2575]:        2010/05/16_16:25:32 info: mach_down takeover complete for node test1.voztovoice.org.
heartbeat[2405]: 2010/05/16_16:25:32 info: mach_down takeover complete.

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

1 comentario

Enviar correo cuando el Master se cae

Para complementar el articulo, si quieren que Heartbeat les envie un correo cuando el servidor master se caiga, en el archivo haresources hay que añadir esta linea:

MailTo::fulano@gmail.com::ProblemasServidorMaster

en Orden:

  • MailTo el script
  • fulano@gmail.com la direccion de correo electronico que recibirá el alerta
  • ProblemasServidorMaster el objeto del mensaje

Para enviar el correo a dos o más direcciones:

MailTo::fulano@gmail.com,sutano@gmail.com::ProblemasServidorMaster

Saludos

Suscribirse a Comentarios de "Asterisk Alta disponibilidad - Heartbeat en Linode" Suscribirse a VozToVoice - Todos los comentarios