Elastix redundante, método fácil

Imagen de RazaMetaL

Tema: 

Este manual describe como armar un cluster con dos elastix para tener redundancia en caso de que el principal falle. La operación nos dará mas disponibilidad del servicio, en condiciones normales si nuestra centralita falla el tiempo que estaremos sin comunicación será el que nos tome copiar las configuraciones en otro servidor, ó si ya lo tenemos listo, el tiempo que sea necesario para encenderlo y conectarlo.

La ventaja del sistema que se plantea en este manual es que las configuraciones se respaldan por red cada minuto, así en caso de fallas tendremos en un par de minutos un sistema casi idéntico al que estaba en producción antes del fallo.

[b]Modo de operación:[/b]
El servidor Maestro copiará cada minuto sus archivos de configuración hacia el Esclavo.
El servidor Esclavo verificará cada minuto si el Maestro esta en línea;
Cuando el servidor Maestro falle o este fuera de línea, el servidor Esclavo asumirá su rol;
Cuando el servidor Maestro regrese, el servidor Esclavo copiará los archivos de configuración hacia el Maestro.
Los teléfonos y dispositivos deberán utilizar la IP flotante para registrarse.

[b]Requerimientos:[/b]
- instalar nmap, arping y rsync
- 2 servidores con dos elastix con la configuración básica;
- 3 direcciones IP del mismo segmento de red (una para cada servidor y una virtual flotante);
- configurar una "llave compartida" para que el acceso ssh entre servidores no requiera contraseña;
- el script flisp1405.sh ( http://www.thiscoolsite.com/?p=6 );

[b]Instrucciones:[/b]
Instalamos las dependencias:

yum install nmap rsync

Asignamos una dirección IP a cada servidor, por ejemplo:

Maestro 192.168.0.1
Esclavo 192.168.0.2

Descargarmos el script flip1405.sh (ligeramente modificado para trabajar con elastix) en cada servidor:

cd /usr/bin
wget http://www.razametal.org/asterisk/flip1405.sh

La versión original de este script se puede encontrar en:
[url]http://www.thiscoolsite.com/scripts/flip1405.sh[/url]

Damos permisos de ejecución:

chmod a+x /usr/bin/flip1405.sh

Editamos el script flip1405.sh en Maestro para que contenga nuestra configuración IP:

# If set to "1" this is the Master server.
# If commented out, or set to anything else, this will act as if it is a slave
MASTER="1"

# The Master and Slave IP Addresses for Replication / Testing
MASTERIP="192.168.0.2"
SLAVEIP="192.168.0.3"

# The IP address that will float between Master and Slave
FLOAT="192.168.0.1"

# The device on which the floating interface exists
DEVICE="eth0"

# The specific interface alias on the device
IFACE="$DEVICE:1"

Editamos el script flip1405.sh en Esclavo :

# If set to "1" this is the Master server.
# If commented out, or set to anything else, this will act as if it is a slave
MASTER="NO"

# The Master and Slave IP Addresses for Replication / Testing
MASTERIP="192.168.0.2"
SLAVEIP="192.168.0.3"

# The IP address that will float between Master and Slave
FLOAT="192.168.0.1"

# The device on which the floating interface exists
DEVICE="eth0"

# The specific interface alias on the device
IFACE="$DEVICE:1"

Configuramos las llaves ssh para que el acceso entre servidores no requiera de contraseña.

En el Maestro ejecutamos como root:

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub|ssh 192.168.0.3 tee -a ~/.ssh/authorized_keys

ssh 192.168.0.3 ssh-keygen -t rsa
ssh 192.168.0.3 cat ~/.ssh/id_rsa.pub |tee -a ~/.ssh/authorized_keys

Después de generadas y copiadas las llaves será posible ingresar via ssh y sin que se solicite contraseña desde Maestro a Esclavo y viceversa.

Programamos la ejecución del script a cada minuto en ambos servidores, este copiará los archivos modificados desde el Maestro hacia el Esclavo, verificará la disponibilidad del Maestro, y se encargará de hacer que el servidor de backup asuma el rol de Maestro cuando sea necesario:


crontab -e
*/1 * * * * /usr/bin/flip1405.sh > /var/log/flip1405.log 2>&1

Creamos el archivo de log para mirar lo que el script esta haciendo:

touch /var/log/flip1505.log

Finalmente, modificamos asterisk para que el canal SIP escuche en la IP flotante, editamos en el Maestro /etc/asteris/sip_general_custom.conf:

bindaddr=192.168.0.1
bindport=5060

Si todo anda bien, cada minuto Maestro copiará su configuración a Esclavo. Cuando Maestro este fuera de línea, Esclavo asumirá su rol y dejará de hacerlo cuando el Maestro este en línea nuevamente.

Esta es una manera rápida y sencilla de lograr redundancia, existen otras recetas que en algún momento intente pero me parecieron muy complicadas de implementar.

Comentarios

RE: Error de conexion entre Master y Slave

Gracias !! Con la info proporcionada pude generar bien las claves publicas y privadas , ahi estaba el problema.

Funciona muy bien.

Una consulta mas para respaldar tambien entre el master y slave toda la configuracion de Openfire alguien tiene presente cuales son todas las carpetas a agregar al script?

Muchas Gracias , Anibal.

Dudas

Buenas noches,
Soy nuevo en esto de Asterisk/Elastix y estoy leyendo el archivo flip1505.log. Hay una IP #if primary owns virtual = '207.166.192.51', esta ip es la IP publica de mi router? gracias.
De antemano gracias por la ayuda.
Mario

MarioCervantes

Páginas