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

Funciona con a2billing???

he leido tu aporte y la verdad estoy pensando en implementarlo...

Me quedan algunas dudas...

1- Funciona con elastix que funciona con a2billing???
2- Podrias explicar un poco mejor el como se dividen las direcciones IP??
Me pregunto como el sistema sabe cual de las ip es la primaria.??

Lo puedes obtener desde

Imagen de RazaMetaL

Lo puedes obtener desde [url]http://www.thiscoolsite.com/scripts/flip1405.sh[/url]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

Agregué algunas rutas para

Imagen de RazaMetaL

Agregué algunas rutas para que se respalden también por ejemplo: la base detados mysql, los buzones de voz, etc. Ahora el server que hospeda mis archivos esta desconectado, en unos días mas lo tendre en linea.

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

ufff... y no lo tienes por

ufff...

y no lo tienes por ahi para que me lo envies por correo???

Por otro lado si nececitas Hosting, con gusto te paso alguno de mis servers para que albergues tu sitio.

Estamos en contacto..

Nos vemos

Ya esta en

Imagen de RazaMetaL

Ya esta en línea:

[url]http://www.razametal.org/asterisk/flip1405.sh[/url]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

Error de conexion entre Master y Slave

Estimados estoy implementando este metodo entre 2 elastix, los script se ejecutan bien pero tengo algun problema de conexion/autenticacion ssh entre ambos o de permisos a etc/asterisk , he buscado , googleado , generado las claves ssh nuevamente y no he podido resolverlo, pongo copia del log a ver si pueden echarme una mano.

Flip1405 LOG del Master:
+ MASTER=1
+ MASTERIP=192.168.13.230
+ SLAVEIP=192.168.13.231
+ FLOAT=192.168.13.232
+ DEVICE=eth0
+ IFACE=eth0:1
+ '[' 1 == 1 ']'
++ nmap --system-dns -p 4569 -sU 127.0.0.1
++ awk '{print $2}'
++ grep open
+ STATUS='open|filtered'
++ /sbin/ifconfig eth0:1
++ grep 192.168.13.232
++ awk '{print $2}'
++ sed s/addr://g
+ PRIMARYIP=192.168.13.232
++ nmap --system-dns -sP 192.168.13.232
++ grep down
++ awk '{print $4}'
+ VIRTUALIP=down.
+ rsync -avzr --rsh=ssh /etc/asterisk/ root@192.168.13.231:/etc/asterisk/
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]
+ rsync -avzr --rsh=ssh /var/spool/asterisk/voicemail root@192.168.13.231:/var/spool/asterisk
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]
+ rsync -avzr --rsh=ssh /var/lib/asterisk/moh root@192.168.13.231:/var/lib/asterisk
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]
+ rsync -avzr --rsh=ssh /var/lib/asterisk/sounds root@192.168.13.231:/var/lib/asterisk
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]
+ rsync -avzr --rsh=ssh /var/www/html root@192.168.13.231:/var/www
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]
+ rsync -avzr --rsh=ssh /var/www/db root@192.168.13.231:/var/www
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]
+ rsync -avzr --rsh=ssh /tftpboot root@192.168.13.231:/
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]
+ '[' 'open|filtered' == 'open|filtered' ']'
+ '[' 192.168.13.232 '!=' 192.168.13.232 ']'

Flip1405 LOG del Slave:

+ MASTER=NO
+ MASTERIP=192.168.13.230
+ SLAVEIP=192.168.13.231
+ FLOAT=192.168.13.232
+ DEVICE=eth0
+ IFACE=eth0:1
+ '[' NO == 1 ']'
++ nmap --system-dns -p 4569 -sU 192.168.13.230
++ awk '{print $2}'
++ grep open
+ PRISTATUS='open|filtered'
++ nmap --system-dns -p 4569 -sU 127.0.0.1
++ awk '{print $2}'
++ grep open
+ SECSTATUS=
++ /sbin/ifconfig eth0:1
++ grep 192.168.13.232
++ awk '{print $2}'
++ sed s/addr://g
+ PRIMARYIP=
++ nmap --system-dns -sP 192.168.13.232
++ grep down
++ awk '{print $4}'
+ VIRTUALIP=
+ '[' 'open|filtered' '!=' 'open|filtered' ']'
+ '[' '' == 'open|filtered' ']'
+ echo

+ '[' '' == 192.168.13.232 ']'

Desde ya muchas gracias.

Anibal.

Necesitas usar ssh con claves

Imagen de RazaMetaL

Necesitas usar ssh con claves públicas y privadas, para que no sea necesario que rsync conozca la contraseña del root.

Sigue este sencillo y completo manual en [url]http://rafael.bonifaz.ec/blog/2011/01/ssh-con-claves-publicas-y-privadas/[/url]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

Páginas