• No se han encontrado resultados

Asterisk con alta disponibilidad

In document Manual Asterisk Avanzado (página 58-64)

 Este tipo de configuración se implementa en centrales IP donde queremos brindar una alta disponibilidad.

Inicialmente necesitamos dos servidores que tengan asterisk instalado.

La herramienta a utilizar es heartbeat en su versión 2.1.3, utilizaremos el heartbeat para sensar el servicio del asterisk en ambos servidores, y si se cae alguno de ellos el otro tomara su lugar, como maestro y esclavo, si cae el maestro, el esclavo toma su lugar, y si se levanta el maestro nuevamente lleva el mando.

Estamos usando Centos 4.7, instalamos en ambos servidores el heartbeat.

yum –y install heartbeat

Para este ejemplo el asterisk principal tiene el hostname lcla.com y el backup lclabk.com

Para todas las configuraciones necesitamos este parámetro así que asegúrense de poner el nombre de hostname la respuesta al comando

uname –n

[root@lcla /]# uname –n

lcla.com

[root@lclabk /]# uname –n

Ahora debemos de modificar el archivo /etc/hosts de la siguiente forma, En lcla.com :

[root@lclabk /]# cat /etc/hosts

127.0.0.1 lclabk.com lclabk localhost.localdomain localhost 192.168.254.204 lcla.com lcla

192.168.254.202 lclabk.com lclabk

En lcla backup .com

[root@lclabk /]# cat /etc/hosts

127.0.0.1 lclabk.com lclabk localhost.localdomain localhost 192.168.254.204 lcla.com lcla

192.168.254.202 lclabk.com lclabk

Notemos que el servidor maestro tiene la ip 192.168.254.204 y el esclavo la ip 192.168.254.202.

Ahora empezamos a configurar en el maestro, copiemos los siguientes archivos

cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/ cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/ cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/

luego editamos el archivo vi /etc/ha.d/authkeys

auth 2

2 sha1 mipass

Cambiamos los permisos en el archivo authkeys :

chmod 600 /etc/ha.d/authkeys

Editemos el archivo ha.cf el cual es muy importante

vi /etc/ha.d/ha.cf

Agreguemos las siguientes lineas: logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 30 initdead 120 bcast eth0 udpport 694 auto_failback on node lcla.com node lclabk.com

La parte final de la configuración del hearbeat es seleccionando los demonios que queremos que esten en alta disponibilidad, para nosotros asterisk

vi /etc/ha.d/haresources

Agreguemos la siguiente línea

lcla.com IPaddr::192.168.254.200/24/eth0 asterisk

Notemos que estamos poniendo la IP 192.168.254.200, esta nos servira como una ip virtual, que sera utilizada para la comunicación de asterisk, ya sea con los anexos sip iax, u otra comunicación voip que realice con asterisk.

Finalmente debemos de copiar los archivos de configuración del heartbeat del maestro al esclavo

scp -r /etc/ha.d/ [email protected]:/etc/

y con ello ya tenemos listo.

Para que siempre se inicie el heartbeat al prender el servidor agregamos en ambos

chkconfig heartbeat on

Reiniciamos el servicio en ambos servidores.

service heartbeat restart

Si no te tomaron bien los hostname, revisa todos los archivos donde se declara el hostname, que son básicamente tres

/etc/hosts

/etc/sysconfig/network

/etc/sysconfig/network-scripts/ifcfg-eth0

Si tienes algún problema prueba reiniciando tus servidores, para que te tome bien el hostname.

Si todo esta bien, entonces desde otra maquina prueba haciendo ping a la ip virtual 192.168.254.200, y en el maestro deberás tener ambas ip.

[root@lcla /]# ifconfig

eth0 Link encap:Ethernet HWaddr 00:0C:29:7D:E2:3E

inet addr:192.168.254.204 Bcast:192.168.254.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe7d:e23e/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:16653 errors:0 dropped:0 overruns:0 frame:0 TX packets:14789 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000

RX bytes:2564095 (2.4 MiB) TX bytes:3349104 (3.1 MiB) Interrupt:177 Base address:0x1400

eth0:0 Link encap:Ethernet HWaddr 00:0C:29:7D:E2:3E

inet addr:192.168.254.200 Bcast:192.168.254.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:177 Base address:0x1400

lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:1283 errors:0 dropped:0 overruns:0 frame:0 TX packets:1283 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0

Luego de lograr la alta disponibilidad del demonio del Asterisk, necesitamos sincronizar los archivos de configuración, de esta manera al realizar algún cambio en la configuración del Asterisk principal, este replique en la configuración del Asterisk backup.

Podríamos hacerlo simplemente con un script que ejecute un scp periódicamente y copie los archivos del /etc/asterisk, pero esto no es muy eficiente. Puesto que podemos utilizar el rsync que es un programa que ofrece transmisión eficiente de datos incrementales comprimidos y cifrados, el algoritmo compara los checksum de manera eficiente, y cuando no encuentra coincidencias, envía los cambios e información de cómo reensamblarlos, de esta forma solo se copian los nuevos cambios.

El script que ejecuta el rsync, es necesario ponerle el password, luego colocar el script en el crontab para que se ejecute periódicamente.

[root@lcla ~]# cat /sbin/syncdata.bash

#!/usr/bin/expect -f

spawn rsync -raz --progress --size-only /etc/asterisk/ 192.168.254.202:/etc/asterisk/

match_max 100000

# Look for passwod prompt expect "*?assword:*" send -- "123456"

# send blank line (\r) to make sure we get back to gui send -- "\r"

expect eof

[root@lcla ~]# crontab –e

*/1 * * * * /sbin/syncdata.bash

Bueno todo esto se hace posible con el rsync

[root@lcla ~]# rpm -q rsync

rsync-2.6.3-1

Ahora que tenemos alta disponibilidad del demonio del Asterisk, la sincronización de los archivos de configuración entre la central principal y la de backup. Ello nos sirve para un escenario donde solo necesitamos un Asterisk con configuración a mano. Sin embargo Freepbx entre otros software de administración, manejan algunas parámetros con base de datos, en el caso de realtime por ejemplo. Además el cdr podemos estar guardándolo en una base de datos también. Por tanto

necesitamos tener un backup de la base de datos en cuestión de la central principal en la de backup. Para esta labor vamos a utilizar replicación de base de datos en mysql. De esta manera, se replicaran los nuevos registros hechos en la base de datos de la central principal, en la central de backup.

Por ello para no generar incoherencias, debemos hacer un backup de la base de datos de la central principal y restaurarlo en la base de datos de la central de backup, antes de configurar la replicación.

Paso 1:

Master: 192.168.254.204 Slave: 192.168.254.202

Paso 2:

En el Master, realizar los cambios en el archivo my.cnf:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock old_passwords=1

log-bin

binlog-do-db= # input the database which should be replicated

binlog-ignore-db=mysql # input the database that should be ignored for replication binlog-ignore-db=test server-id=1 [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid Paso 3:

En el master, crear una cuenta de replicación para el esclavo en mysql.

mysql> grant replication slave on *.* to 'replication'@192.168.254.202 identified by 'slave';

luego reiniciar el servicio de mysql en el master.

Paso 4:

Ahora editar el archivo my.cnf en el Slave:

[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock old_passwords=1 server-id=2 master-host = 192.168.254.204 master-user = replication master-password = slave master-port = 3306 [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

Paso 5:

Reiniciar el servicio de mysql en el slave y luego

mysql> start slave;

mysql> show slave status\G;

*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.254.204 Master_User: replica Master_Port: 3306 Connect_Retry: 60 Master_Log_File: MASTERMYSQL01-bin.000009 Read_Master_Log_Pos: 4 Relay_Log_File: MASTERMYSQL02-relay-bin.000015 Relay_Log_Pos: 3630 Relay_Master_Log_File: MASTERMYSQL01-bin.000009 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 4 Relay_Log_Space: 3630 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 1519187 1 row in set (0.00 sec)

Slave_IO_Running y Slave_SQL_Running: deben estar en YES.

Paso 6:

En el master:

mysql> show master status;

+---+---+---+---+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---+---+---+---+ |MysqlMYSQL01-bin.000008 | 410 | asterisk | |

+---+---+---+---+ 1 row in set (0.00 sec)

Y ahora esta listo, debemos hacer pruebas ingresando datos, en la base de datos principal y observar como estos se reflejan en la central de backup.

In document Manual Asterisk Avanzado (página 58-64)

Documento similar