Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
1
LVM
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
IntroducciónA lo largo de este tópico avanzado estaremos desarrollando el tema de instalación, configuración y despliegue de una
solución de Cluster Redundante Failover de dos Nodos, Primario y Secundario, para una Suite Asterisk IP PBX. El objetivo es
que tengamos las herramientas para desplegar una solución de Asterisk de Alta Disponibilidad. Lo que vamos a hacer es
instalar Dos (02) Nodos con exactamente con el mismo Sistema Operativo y la misma Arquitectura de Hardware. Uno de ellos
va a ser configurado como Nodo Principal o Primario y el otro como Nodo de Respaldo o Secundario.
La idea es sencilla: si ambos Nodos se encuentran Activos, solo el Nodo Primario estará configurado con la IP del
Sistema y es el que tendrá arriba los servicios, en este caso Asterisk, y el Nodo Secundario funcionara como Backup. Si el
Nodo Primario falla, entonces el Nodo Secundario entrara en operación y se levantan los servicios y la IP del Sistema. Es
claro, que en ambos nodos debemos instalar y configurar la Suite Asterisk y los demás servicios que vamos a utilizar.
Como soporte de la Plataforma, haremos uso de dos aplicaciones fundamentales: DRBD y Heartbeat. DRBD es la
herramienta encargada de hacer la replicación del sistema de archivos y las particiones entre los nodos. Heartbeat es la
aplicación encargada de hacer la conmutación de los servicios y la IP de un nodo al otro cuando ocurre una falla y/o una
restauración. Como soporte para las particiones, haremos uso de Particiones basadas en Volúmenes Lógicos LVM y
utilizaremos formato ‘ext3’ para dichos volúmenes.
Para el despliegue de los Dos Nodos del Cluster Redundante, haremos uso de una Plataforma de Virtualizacion basada
en VMWARE bajo Windows XP. Con VMWARE vamos a crear las Maquinas Virtuales con Debian GNU/Linux. A cada
Maquina Virtual le vamos a configurar dos unidades de disco SCSI de 100GB c/u, uno para el Sistema Operativo y otro para la
Data y los Servicios.
2
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Distributed Replicated Block Device (DRBD)
1.- Introducción y Aspectos Generales de DRBDDRBD es una herramienta de software que se usa para almacenamiento distribuido y replicado (mirroning replicated storage)
de particiones, unidades de discos y/o unidades lógicas de almacenamiento, entre servidores. Las características de DRBD son:
'Real Time': la replicación es continua, mientras las aplicaciones escriben, borran, modifican o actualizan datos.
'Transparently': las aplicaciones gestionan los datos como si estuvieran directamente en una unidad logica, particion o
directorio del disco.
'Synchronously or Asynchronously Mirroning': con 'synchronous mirroning' un proceso de escritura termina solo cuando
en ambos servidores se ha completado la escritura y con 'asynchronous mirroning' el proceso de escritura termina cuando en el
servidor local se ha terminado la escritura y antes de que la escritura se progague al 'peer system'.
DRBD es la solución ideal para sistemas de 'High Availability' con esquemas de Redundancia HSB o de tipo 'Fail Over 1+1'.
DRBD es un sistema de Clustering en modo 'Active/Active' para particiones, con soporte para File System de tipo 'ext3' o
XFS. DRBD es una aplicación basada en 'Linux Kernel Module'. Es decir, requiere de un condicionamiento especial del Kernel
de Linux. DRBD se convierte fundamentalmente en el driver de la unidad virtual de almacenamiento. Por ello es que DRBD es
muy flexible y versátil.
3
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Herramientas de Administración de DRBDDRBD dispone de una serie de herramientas de administración del sistema para controlar y accesar directamente a las
configuraciones del modulo del kernel DRBD a fin de gestionar la administración de los recursos. A continuación, se describen
esas herramientas:
La Herramienta 'drbdadm'. Es la herramienta 'high-level' de la suite DRBD. Esta herramienta obtiene los parámetros de
configuración de DRBD del archivo '/etc/drbd.conf' y actúa como un 'front-end' para las demás herramientas y para la
ejecución directas de comandos de administración del sistema. La herramienta drbdadm, si se ejecuta con la opción '-d'
muestra las diferentes opciones de comando para la administración del sistema.
La Herramienta 'drbdsetup'. Es la herramienta que permite al administrador de Linux configurar el modulo DRBD que se
va a cargar en el Kernel. Es una herramienta 'low-level' que permite manipular manualmente los parámetros de configuración
del modulo DRBD.
La Herramienta 'drbdmeta'. Esta, es la herramienta que permite al administrador create, dump, restore and modify DRBD
meta Data Structures.
4
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
RecursosEn DRBD cuando mencionamos el término 'resource' hacemos referencia a todos los aspectos de un dispositivo de
almacenamiento replicado. Esto incluye:
Resource Name:
Arbitrario, lo importante es que no contenga espacios.
DRBD Device:
'Virtual Block Device' gestionado por DRBD. Se referencia con '/dev/drbdm', donde m es el numero del dispositivo.
Disk Configuration:
Es la copia local de la Data, y el uso interno de la Meta Data.
Network Configuration:
Aspectos de comunicación del DRBD.
5
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Resource RolesEn DRBD, cada 'resource' tiene un 'role'. El 'role' del recurso puede ser Primary or Secondary. En DRBD no utilizamos la
terminología Active/Passive, el cual es mas bien un termino referido a la disponibilidad (Availability) del storage. En un
sistema Active/Passive solo uno de los dos sistemas esta Activo, y este no es el caso de DRBD. En DRBD entonces utilizamos
la terminología Primary and Secundary para referirnos a los dispositivos distribuidos de almacenamiento, y con ello significar
que ambos dispositivos están en Modo Mirroning y siempre ambos Activos.
El Dispositivo DRBD en 'Primary Role' es el dispositivo principal para Operaciones de Read y Write, es el que se usa para
Montar el File System.
El Dispositivo DRBD en 'Secondary Role' recive todos los Updates del 'Peer Device'. Este dispositivo tiene by default
deshabilitado el Acceso y no puede ser utilizado por las aplicaciones, ni para Read ni para Write. Es decir, el DRBD en
'secondary Role' solo actúa como 'Read Only Access' a find e mantener la 'Cache Coherency.
El Role de los recursos de DRBD puede ser cambiado Manualmente o por un 'Cluster Management Application'. Nos
referimos al cambio del Role de un recurso como una 'promotion' y la operacion reversa se denomina 'demotion'.
6
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.- Instalación de DRBD en Debian GNU/Linux
2.1.- Instalación de los 'Pre-Builds' de DRBD
2.1.1.- Instalación de 'Pre-Builds' de DRBD descargados de LINBITLINBIT es la compañía Sponsor del Proyecto DRBD. En el Web Link "http://www.linbit.com/support" se pueden descargar
los paquetes necesarios para DRBD. Allí, podemos descargar los Builds para RHEL, SLES, Debian y Ubuntu Server. En
nuestro caso, estamos interesados en los Builds para Debian. Necesitamos entonces descargar los paquetes:
drbd8-utils
drbd8-module
Luego de descargar los Builds (*.deb) los instalamos con los comandos 'dpkg -i' o 'gdebi'. Un aspecto importante del acceso al
Web Link de LinBit es que tenemos que registrarnos para poder descargar archivos (Username: jgcotua, Password: 123xyz).
Luego hacer el Login, podemos tener acceso a los Archivos *.deb, para Debian Squeeze, en el siguiente Link:
http://www.linbit.com/support/drbd-8.4.1/debian-squeeze/
2.1.2.- Instalación de 'Pre-Builds' de DRBD usando 'apt-get'Lo que hacemos es utilizar la herramienta 'apt-get' para instalar los paquetes de Debian necesarios para DRBD, utilizando los
repositorios oficiales de Debian. A continuación, los comandos:
apt-get updateapt-get install drbd-utils drbd8-utils drbdlinksapt-get install build-essential module-assistant
7
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.2.- Instalación de DRBD vía Compilación
2.2.1.- Descarga del Código Fuente de DRBDA la fecha de escribir este documento, la versión más reciente de DRBD es la v8.4.1. Podemos descargar el Código Fuente
directamente del Link 'http://oss.linbit.com/drbd/' seleccionando el archivo *.tar.gz correspondiente a la versión que deseamos
utilizar. Es recomendable hacer la descarga y la descompresión en el directorio '/usr/src/' o en '/usr/local/src/'. A continuación,
los comandos para la descarga y la descompresión:
cd /usr/src/drbdVersion="8.4.1"rm -rf drbd-${drbdVersion}.tar.gz > /dev/null 2>&2rm -rf drb -${drbdVersion} > /dev/null 2>&2wget http://oss.linbit.com/drbd/8.4/drbd-${drbdVersion}.tar.gztar xvzf drbd-${drbdVersion}.tar.gzln -s /usr/src/drbd-${drbdVersion} /usr/src/drbdls -la
Luego de descomprimir, se va a crear el directorio ‘/usr/src/drbd-8.4.1/’.
8
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.2.2.- Compilación de DRBD
2.2.2.1.- Pre-RequisitosPara poder compilar exitosamente a DRBD necesitamos tener instalado en nuestro Linux los siguientes paquetes: make, gcc,
glibc (development) y flex. Es importante incluso chequear que el gcc utilizado para compilar nuestro DRBD sea el mismo que
se utilizo para la compilación del Kernel. También, requerimos el paquete autoconf. Por otro lado también necesitamos las
librerías del Kernel: kernel-headers y linux-headers. A continuación, los comandos para la instalación de estos paquetes en
Debian:
apt-get install make makedev autoconf cmake cmake-dbg cmake-data glibc-2.11-1 flex apt-get install kernel-package linux-kernel-headers
2.2.2.2.- Preparando el KernelLo que debemos hacer es crear un enlace simbólico '/usr/src/linux' al directorio 'kernel sources', el cual típicamente es el
directorio '/usr/src/linux-version'. A continuación, los comandos:
cd /usr/srckernelVersion="2.6.32-5-686"ln -s /usr/src/linux-headers-2.6.32-5-686 /usr/src/linuxcd /usr/src/linuxmake mrproperzcat /proc/config.gz > .configmake cloneconfigcp /boot/config-$(uname -r) .configcp .config /root/.config-backup
9
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.2.2.3.- Compilando DRBDA continuación, los comandos:
cd /usr/src/drbd./configure --help./configure
Cuando ejecutamos el script 'configure', este crea un archivo de registro llamado 'config.log' en el mismo directorio donde la
ejecución del script es invocada.
Ahora, lo que hacemos es Compilar e Instalar a DRBD:
makemake installls -la /sbin/drbd*
Con el último comando, se crean las siguientes herramientas en el directorio ‘/sbin/’:
• drbdadm
• drbdsetup
• drbdmeta
10
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.2.2.4.- Compilando DRBD como un Modulo del KernelPara compilar a DRBD como un Modulo del Kernel, debimos haber ejecutado el script de configuración
'/usr/src/drbd/configure' con la opción '--with-km', la cual esta deshabilitada por defecto.
Para compilar a DRBD para la Versión Actual del Kernel que se está utilizando, hacemos:
cd /usr/src/drbdmake clean all
Con esta opción, la compilación de DRBD se hará haciendo Match con la Versión Actual del Kernel que esta corriendo en
nuestro Linux. Recordemos que los módulos del Kernel actual están accesibles en el directorio '/lib/modules/`uname -r`/build'.
Si queremos compilar a DRBD contra otra versión de Kernel, lo que hacemos es utilizar la opcion KDIR, de la siguiente
forma:
cd /usr/src/drbdmake cleanmake KDIR=/path/to/kernel/source
11
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Por otro lado, también es posible explicitar el compilador que queremos utilizar, haciendo uso de la Variable CC, de la
siguiente forma:
cd /usr/src/drbdmake cleanmake CC=gcc32
Finalmente, para chequear que la compilación de hizo satisfactoriamente lo que hacemos es verificar que el archivo de modulo
'drbd.ko' se encuentra ubicado en el directorio /usr/src/drbd. Podemos correr el siguiente comando:
/sbin/modinfo drbd.ko
12
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.3.- Instalando DRBD como un Paquete DebianPara ello, necesitamos tener instalado en nuestro Debian Linux los siguientes paquetes: dpkg-dev, fakeroot. El paquete
fakeroot, lo necesitamos si vamos a compilar a DRBD como un non-root user, lo cual se recomienda ampliamente.
(Continuar...)
13
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3.- Configuración de DRBD (Post-Instalación)
3.1.- Secciones Lógicas de AlmacenamientoUna vez que hemos culminado exitosamente la compilación e instalación de DRBD debemos establecer dos secciones lógicas
de almacenamiento del mismo tamaño, una en cada nodo del Cluster DRBD (Primary and Secondary). A estas secciones
lógicas de almacenamiento es a lo que le llamaremos 'lower-level device' en nuestro DRBD Resource.
Podemos utilizar cualquier tipo de unidad de almacenamiento, como:
Un Disco Duro en su totalidad
Una Partición de un Disco Duro
Un Dispositivo RAID
Un Volumen Lógico LVM
Un Volumen EVMS
Cualquier tipo de Dispositivo de Almacenamiento
Un aspecto importante es que NO ES NECESARIO que las secciones lógicas de almacenamiento estén vacías entes de crear el
DRBD Resource. De hecho, podemos perfectamente pasar de un sistema 'non-redundant single-server' a un sistema DRBD.
Para fines de esta guia, asumiremos que ambos nodos disponen de una Partición Vacía llamada /dev/sda7.
14
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3.2.- Preparación de la Conexión de Red para la Replicación DRBD
Es altamente recomendado que la Replicación DRBD se haga sobre una Conexión Gigabit Ethernet Dedicada y en
Modo Back-to-Back, es decir; con un Cable Ethernet Cross-Over entre ambos nodos. No se recomienda la Replicación DRBD
vía enrutamiento, ni vía wireless, incluso ni siquiera vía Switching. Si se va a hacer la Replicación DRBD vía Switching, se
recomienda el uso de elementos redundantes de enlace, como Linux Bonding en Modo Active-Backup.
La Replicación DRBD se hace usando Conexiones TCP con el rango de Puertos del 7788 al 7799. La Replicación
DRBD de cada Resurso usa Dos (02) Conexiones, una en cada sentido entre los nodos del Cluster Redundante. Porsupuesto,
debemos asegurarnos que el Puerto TCP que usa la Replicación DRBD no esté siendo utilizado por cualquier otra aplicación
en nuestro Linux. No es posible que la Replicación DRBD de un Recurso utilice más de una Conexión TCP, por tanto si
queremos redundancia de Red a nivel de la Replicación DRBD debemos hacerla a nivel de Capa 2.
Como buena práctica para servidores GNU/Linux con interfaces Wan y Lan, se recomienda entonces una Tercera
Interface, la cual será dedicada exclusivamente para el Trafico TCP/IP correspondiente a la Replicación DRBD. Si en servidor
trabaja en un ambiente de Red Lan solamente bastaría solo con una segunda Interface de Red adicional para la Replicación
DRBD. Podemos incluso, hacer uso de Tarjetas PCI/PCIe las cuales vienen en un Bundle de 4 Puertos Gigabit Ethernet en un
solo Slot PCI o PCI Express. También, se recomienda que la asignación IPv4 de las Interfaces de Red para la Replicación
DRBD sea de forma Estática y hacer uso de una Familia IPv4 con Mascara de Red 255.255.255.252 (/30). Es decir, una
configuración de Red Punto a Punto IPv4 entre ambos nodos del Cluster Redundante.
15
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3.3.- Configuración de los Recursos de DRBDEl funcionamiento de DRBD está controlado por un Archivo de Configuración Único, el archivo /etc/drbd.conf. El
archivo código fuente TAR.GZ de DRBD contiene una copia de ejemplo del drbd.conf en el subdirectorio scripts. Luego de la
instalación de DRBD, podemos encontrar también ejemplos de drbd.conf en el directorio /etc o en el directorio de
documentación /usr/share/doc/packages/drbd. El archivo de configuración drbd.conf DEBE ser exactamente idéntico en todos
los nodos que participan en el cluster.
Archivo de Configuración de DRBD (/etc/drbd.conf)
/etc/drbd.conf (with include statements) /etc/drbd.conf (flat configuration file)include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
global {
usage-count no;
}
common {
protocol C;
}
resource kPBX {
device /dev/drbd1;
disk /dev/sda7;
meta-disk internal;
on primary {
address 10.0.1.1:7789;
}
on secondary {
address 10.0.1.2:7789;
}
}
16
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
La sección 'global' es permitida solo una vez en el archivo de configuración. Normalmente, colocamos esta sección el
archivo '/etc/drbd.d/global_common.conf', al igual que la sección 'common'. Por ahora, el único parámetro que hemos
colocado en esta sección es el 'usage-count', el cual se ha colocado en 'no' para deshabilitar el envió de información de
estadísticas a los servidores del Proyecto DRBD. El parámetro 'usage-count' puede tener los siguientes valores: yes, no y ask
(valor por defecto).
La sección 'common' contiene parámetros de configuración aplicables a todos los Recursos. Se pueden definir
parámetros de configuración particulares para cada Recurso o bien definirlos en la sección 'common' y son aplicables a todos
los recursos por igual. Por ahora, en esta sección solo hemos definido el parámetro de configuración 'protocol C', el cual
especifica que la Replicación DRBD es Síncrona.
Finalmente, hemos definido un recurso, al cual le hemos llamado 'kPBX', el cual usa a /dev/sda7' como low-level
device y está configurado como 'internal meta data' y usa Conexiones TCP con el Puerto 7789 en las direcciones IP 10.0.1.1 y
10.0.1.2 para los Nodos del Cluster.
17
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Elaboración de las Prácticas
Creación de Cluster Redundante con DRBD y
Heartbeat
Uso del Cluster para Servidor
Asterisk IP PBX
18
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
1.- Preparación del Entorno de Particiones LVMPara el entorno vamos a usar Particiones LVM como unidades de almacenamiento para DRBD. Vamos a montar un
sistema de cluster redundante de dos nodos basado en DRBD y Heartbeat. Vamos a asumir que en cada nodo disponemos de un
Disco Duro SCSI de 100GB, adicional a Disco Duro para el Sistema Operativo y las Particiones del Sistema, para que pueda
ser usado como Volumen Físico para las Particiones LVM. Asumamos entonces que /dev/sda es el dispositivo correspondiente
al Disco Duro del SO y que /dev/sdb es la Unidad de Disco dispuesto para LVM.
A continuación el procedimiento paso a paso para la creación de las Particiones LVM. El Volumen Físico es /dev/sdb,
el Volumen Virtual lo llamaremos kkpbx. Con respecto a los Volúmenes Lógicos, vamos a crear dos: uno para el Bloque de
Replicación DRBD de 80GB, al cual llamaremos kkpbx, y otro para ser usado como Meta-Disk Externo de 8GB, al cual
llamaremos kkpbx-meta. Las Particiones LVM serán formateadas con ‘ext3’.
Las Especificaciones del Entorno LVM son las siguientes:
• Volumen Físico (Phy de PV): /dev/sdb (con una Capacidad de 100GB)
• Volumen Virtual (VG): kkpbx
• Volúmenes Lógicos: kkpbx (80GB) y kkpbx-meta (8GB)
• Formato de los Volúmenes Lógicos: ext3
• Nombre del Dispositivo DRBD: /devdrbd1
• Punto de Montaje de la Partición DRBD: /mnt/vfs
19
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
1.1.- Creación del Volumen FísicoUnidad de Disco: /dev/sdb
Comandos:
pvcreate /dev/sdbpvdisplay
1.2.- Creación del Volumen VirtualNombre del Volumen Físico: /dev/sdb
Nombre del Volumen Virtual: kkpbx
Comandos:
vgcreate kkpbx /dev/sdbvgdisplay
1.3.- Creación del Volumen LógicoNombre del Volumen Virtual: kkpbx
Nombre de los Volúmenes Lógicos: kkpbx y kkpbx-meta
Tamaño de los Volúmenes Lógicos: 80GB y 8GB
Comandos:
lvcreate -L 80G -n kkpbx kkpbxlvcreate -L 8G -n kkpbx-meta kkpbxlvdisplay
Los Volúmenes Lógicos quedan referenciados como /dev/kkpbx/kkpbx y /dev/kkpbx/kkpbx-meta, respectivamente.
20
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Nótese que la notación es de la forma /dev/vgname/lvname, donde vgname es el Nombre del Volumen Virtual y
lvname es el Nombre del Volumen Lógico LVM.
1.4.- Formatear la Partición LVMAhora, debemos formatear las Particiones LVM que ya hemos creado. Vamos a formatearla con el formato ‘ext3’.
Nombre de las Particiones LVM: /dev/kkpbx/kkpbx y /dev/kkpbx/kkpbx-meta
Formato: ext3
Comandos:
mkfs -t ext3 -m 1 -v /dev/kkpbx/kkpbxmkfs -t ext3 -m 1 -v /dev/kkpbx/kkpbx-meta
1.5.- Montar la Partición LVMLa idea aquí es ver los comandos para un eventual montaje de las Particiones LVM que se han creado y formateado.
Nombre de la Particiones LVM: /dev/kkpbx/kkpbx y /dev/kkpbx/kkpbx-meta
Directorio de Montaje: /mnt/vfs
Comandos:
mkdir /mnt/vfsmount -t ext3 /dev/kkpbx/kkpbx /mnt/vfs
Sin embargo, realmente estas Particiones LVM no las vamos a montar, ya que van a ser usadas por DRBD. Montaremos
posteriormente, es el dispositivo DRBD creado.
21
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
1.6.- Edición del Archivo ‘/etc/fstab’A carácter de información solamente, si quisiéramos que una Partición LVM se monte automáticamente, lo que
hacemos es editar el archivo ‘/etc/fstab’ y a colocarle una línea para que de forma automática se monte la Partición
LVM en el directorio ‘/mnt/vfs’.
La línea que se va a insertar, seria:
/dev/kkpbx/kkpbx /mnt/vfs ext3 rw 0 0
Finalmente, podemos ejecutar el siguiente comando para ver la información lógica y de tamaño de las particiones del
sistema:
df -h
22
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.- Montaje de DRBD sobre la Partición LVMToda vez que hemos creado y configurado las Particiones LVM en los Nodos Primario y Secundario de nuestro Cluster
Redundante, debemos proceder a configurar DRBD para que dichas particiones comiencen a sincronizarse. En ambos nodos, la
Partición LVM del Bloque DRBD se llama ‘/dev/kkpbx/kkpbx’, y la Partición para el Meta-Disk es /dev/kkpbx/kkpbx-meta.
Es importante notar que en ambos nodos, la Partición LVM para el Bloque DRBD DEBEN ser exactamente del mismo
Tamaño. Debemos tener la IPv4 del Nodo Primario y del Nodo Secundario. Asumamos que el Nodo Primario es 10.0.1.21 y
que el Nodo Secundario es 10.0.1.22.
Procedemos entonces a configurar el archivo ‘/etc/drbd.conf’ de la siguiente forma:
global { usage-count no;}common { protocol C;
syncer { rate 10M; }}resource kPBX { device /dev/drbd1;
disk /dev/kkpbx/kkpbx; meta-disk /dev/kkpbx/kkpbx-meta [11]; on kPBXPRI { address 10.0.1.21:7789; }
on kPBXSEC { address 10.0.1.22:7789; }}
23
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Es importante que en ambos nodos el archivo ‘/etc/drbd.conf’ sea configurado exactamente igual. Lo que hay que estar
pendiente es de las direcciones IP y los puertos TCP asignados al Nodo Primario y al Nodo Secundario. El Nombre del
Recurso DRBD es ‘kPBX’ y el Nombre del Bloque DRBD es ‘/dev/drbd1’. En ambos Nodos la Sección Lógica de
Almacenamiento DRBD es ‘/dev/kkpbx/kkpbx’ y el Meta-Disk es ‘/dev/kkpbx/kkpbx-meta. Igualmente, en ambos Nodos el
Puerto TCP para la Replicación DRBD es 7789.
Otro aspecto muy importante es el Nombre de los Nodos configurado en ‘/etc/drbd.conf’: kPBXPRI y kPBXSEC. Es
muy importante que en cada Nodo el Hostname (/etc/hostname) y /etc/hosts) sean respectivamente kPBXPRI y kPBXSEC.
Podemos editar el ‘/etc/hosts’ en cada nodo y hacer las configuraciones respectivas.
24
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.1.- Creación de la Partición Virtual DRBDToda vez instalado y configurado nuestro DRBD, lo que sigue es la creación de las Particiones Virtuales DRBD, una
para cada Recurso que hayamos definido. En nuestro caso, solo hemos definido un Recurso DRBD al cual hemos denominado
kPBX. La Partición Virtual queda referenciada como /dev/drbd1, tal y como se definió en el archivo de configuración
‘/etc/drbd.conf’. Para la creación de la Partición Virtual DRBD usamos el comando ‘drbdadm’, de la siguiente manera:
drbdadm create-md kPBX
Al ejecutar este comando se crean automáticamente los Bloques DRBD y el Bloque DRBD de la Mata Data. El Bloque DRBD
‘/dev/drbd1’ queda creado y listo para comenzar a trabajar con él. En cada Nodo del Cluster DRBD debemos crear los
Bloques DRBD.
Luego de crear los Bloques DRBD, procedemos a iniciar el Servicio DRBD en ambos servidores, de la siguiente forma:
/etc/init.d/drbd Start
Podemos correr el comando ‘cat /proc/drbd’ para ver que aun no se están sincronizando los Bloques DRBD. Esto, lo sabemos
al ver ‘ds: Inconsistent/Inconsistent …’ al ejecutar ‘cat /proc/drbd’.
25
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.2.- Inicio de la Sincronización/Replicación DRBDLuego de Crear las Particiones Virtuales DRBD (Bloques DRBD), debemos decirle a DRBD que comience con la
sincronización de los bloques. Primero, debemos marcar a uno de los Nodos como Primario, el Nodo kPBXPRI, de la siguiente
forma:
drbdadm -- --overwrite-data-of-peer primary all
Por otro lado, debemos marcar a kPBXSEC como Secundario, de la siguiente forma:
drbdadm secondary all
En este mismo momento, el Nodo Secundario comenzara a sincronizar los datos. Lo podemos observar corriendo el
comando ‘cat /proc/drbd’ y ver ‘cs:SyncTarget ro:Secondary/Primary …’. Una vez que aparezca
‘ds:UpToDate/UpToDate’ indica que los Bloques DRBD están Sincronizados.
En todo momento, en cualquiera de los Nodos podemos determinar el ‘rol’ de un Nodo ejecutando el siguiente
comando:
drbdadm role kPBX
En cada uno de los Nodos veremos ‘Primary/Secondary’ si es Primario y ‘Secondary/Primary’ si es Secundario.
26
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.2.- Configuracion Adicional DRBD solo en el Nodo PrimarioFinalmente, solo en el Nodo Primario, nos falta Formatear la Nueva Partición Virtual DRBD (/dev/drbd1). Usaremos
‘ext3’ como formato para esta partición. Luego de formatearla, tenemos que Montarla para que sea accesible en el Nodo
Primario. A continuación, los comandos:
mkfs.ext3 /dev/drbd1mkdir /mnt/vfsmount -t ext4 /dev/drbd1 /mnt/vfsmount
Es muy importante destacar que por defecto, DRBD NO PERMITE montar las Particiones DRBD simultáneamente en el Nodo
Primario y en el Nodo Secundario. El montaje se hace solamente en el Nodo Primario. De hecho, eso es exactamente lo que
queremos, ya que el sistema que estamos montando es un Cluster de tipo Failover, en el cual desde el punto de vista de los
servicios y los datos, solo queremos leer a uno de los nodos a la vez.
27
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3.- Pruebas de Funcionamiento de DRBD
3.1.- Prueba de Funcionamiento de la Replicación DRBD
Una vez que en el Nodo Primario hayamos montado la Partición DRBD /dev/drbd1 en /mnt/vfs, lo que podemos hacer
es copiar o crear algunos directorios o archivos en /mnt/vfs y vemos si realmente se está haciendo la Replicación DRBD.
En el Nodo Primario:
• Creamos unos Archivos y Directorios de Prueba en la Partición DRBD
cd /mnt/vfsmkdir dir1cc dir1touch archivo.textecho “Hola” > archivo.text
• Desmontamos la Partición DRBD y hacemos que el Primario pase a ser Secundario
umount /mnt/vfsdrbdadm secondary kPBXdrbdadm role kPBX
Deberíamos ver ‘Secondary/Secondary’ en el Nodo Primario.
28
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
En el Nodo Secundario:
• Hacemos que el Nodo Secundario pase a ser Primario y Montamos la Partición DRBD. Luego de montarla, vemos que
los archivos y directorios están presentes:
drbdadm primary kPBXmkdir /mnt/vfsmount -t ext3 /dev/drbd1 /mnt/vfsls -la /mnt/vfs
En este momento lo que hemos hecho, a manera de comprobación de funcionamiento de la Replicación DRBD, es que
hemos Promovido el Nodo Primario como Secundario y el Secundario como Primario. Esto, a fin de chequear que la
Replicación DRBD funciona perfectamente.
29
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3.2.- Prueba de Replicación DRBD Inversa y Restauración
Ahora, vamos a evaluar lo que sucede al dejar apagado el Nodo Primario, que hemos de momento puesto como
Secundario, y al copiar y crear nuevos archivos y directorios en el Nodo que ahora tenemos como Primario. Esto, sería lo que
sucede si tenemos un Failover en el Cluster Redundante, al caerse el Nodo Primario, y se levantan los servicios en el Nodo
Secundario.
Lo que hacemos entonces es dejar el Nodo Primario apagado y copiamos y/o creamos algunos archivos y directorios en
el Nodo Secundario (que de momento esta como Primario). Viendo la salida del comando ‘cat /proc/drbd’ observamos que el
Cluster deja de estar sincronizado. Procedemos a encender el Nodo Primario kPBXPRI y observamos que comienza de nuevo
la Replicación DRBD de kPBXSEC a kPBXPRI, hasta que se sincronicen completamente.
Seguidamente, procedemos a apagar el Nodo kPBXSEC, que hasta los momentos producto del Failover hemos
colocado como primario. Lo apagamos a fuerza bruta, sin desmontar siquiera la Partición DRBD. Vamos al kPBXPRI y
observamos que se pierde la sincronización en el kPBXPRI. Lo que hacemos es volver a colocar a kPBXPRI como Primario,
con el comando ‘drbdadm primary kPBX’ y montamos nuevamente la Partición DRBD con el comando ‘mount -t ext3
/dev/drbd1 /mnt/vfs’. A este punto, hemos restaurado el Cluster. Es decir, kPBXPRI ha vuelto a ser Primario y kPBXSEC ha
vuelto a ser el Secundario. Al volver a encender el kPBXSEC, arrancara en ‘rol’ de Secundario y procederá a sincronizarse.
30
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Parte II
Instalación, Configuracion y Pruebas de Heartbeat1.- Instalación de Heartbeat
En los repositorios de Debian disponemos del paquete ‘heartbeat’. Por tanto, en este caso no usaremos la instalación
vía compilación, sino que utilizaremos aptitude o apt-get para instalar el paquete en forma automatizada. A
continuación, los comandos:
apt-get install heartbeat
Cuando apt-get culmina la instalación de heartbeat, probablemente nos indique que no ha conseguido el archivo
/etc/ha.d/ha.cf y de una falla en el arranque de heartbeat. Esto es normal, ya que todavía no hemos configurado a
heartbeat y es lo que en lo inmediato vamos a hacer.
2.- Configuracion de Heartbeat
Heartbeat tiene tres (03) archivos de configuración, los cuales están ubicados en el directorio /etc/ha.d/. En este
directorio, también vamos a encontrar el README de heartbeat, el cual por supuesto se recomienda leerlo. Los tres
archivos de configuración de heartbeat son los siguientes:
ha.cf Archivo de Configuracion Principal de Heartbeatharesources Archivo de Configuracion de Recursos de Heartbeatauthkeys Información de Autenticación para Heartbeat
31
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
Muestras de estos archivos de configuración de heartbeat se encuentran en el directorio /usr/share/doc/heartbeat. Lo
que hacemos entonces es copiarlos y descomprimirlos en /etc/ha.d/, a continuación los comandos:
cp /usr/share/doc/heartbeat/ha.cf.gz /etc/ha.d/cp /usr/share/doc/heartbeat/authkeys /etc/ha.d/cp /usr/share/doc/heartbeat/haresources.gz /etc/ha.d/gzip -d ha.cf.gzgzip -d haresources.gz
2.1.- Configuración del Archivo ‘/etc/ha.d/ha.cf’.
Ahora, lo que vamos a hacer es a empezar a configurar los archivos de heartbeat, de acuerdo a nuestro escenario de
trabajo. El primer archivo que vamos a editar es el /etc/ha.d/ha.cf, allí colocamos la siguiente configuración:
Archivo /etc/ha.d/ha.cf:
debugfile /var/log/ha-debuglogfile /var/log/ha-loglogfacility local0keepalive 2deadtime 20warntime 10initdead 40udpport 694bcast eth0auto_failback offnode kPBXPRInode kPBXSEC
32
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
La opción ‘auto_failback off’ es muy importante. Esta opción especifica cómo va a actuar heartbeat cuando se restaure
el nodo calificado como primario. Comúnmente, lo que se hace es colocar esta opción en ‘auto_failback on’, lo cual le
dice a heartbeat que si el nodo kPBXPRI falla el control pasa a kPBXSEC y que si kPBXPRI se restaura entonces el
control vuelve a kPBXPRI. Sin embargo, esta forma de trabajar podría generar inconvenientes en la operación de los
servicios, puesto que si kPBXPRI se vuelve inestable y empieza a parpadear el sistema podría comenzar a oscilar, lo
cual no sería de ninguna manera conveniente.
Más bien entonces, lo que convendría es que cuando el sistema falle y conmute y luego se restaure dejar el nodo
secundario como activo hasta verificar que el nodo primario este restaurado y estable. Por esta razón, es que sugerimos
que coloquemos la opción ‘auto_failback off’, y dejar el sistema heartbeat en ‘Modo No Revertible’.
Es importante de que en ambos nodos del heartbeat, lo la configuración de los archivos sea exactamente la misma. En
los archivos de configuración que vienen como muestra, podemos encontrar la explicación detallada de cada uno de las
opciones de configuración de heartbeat.
33
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.2.- Configuracion del Archivo ‘/etc/ha.d/haresources’.
En el archivo ‘/etc/ha.d/haresources’ se define la información de montaje de los recursos DRBD, la Dirección IP Virtual
de los servicios y los Archivos de Scripts en el ‘/etc/init.d/’ de Failover y Switchover. Editamos entonces el
‘/etc/ha.d/haresources’ y colocamos lo siguiente:
kPBXPRI drbddisk::kPBX Filesystem::/dev/drbd1::/mnt/vfs::ext3 IPaddr::10.0.1.99/24/eth1 asterisk fonulator heartbeat-info
kPBXPRI Especifica que el Nodo kPBXPRI es el Primariodrbddisk::kPBX Nombre del Recurso DRBDFilesystem::/dev/drbd1::/mnt/vfs::ext3 Información para el Montaje de DRBDIPaddr::10.0.1.99/24/eth1 Dirección IP Virtual (VIP: Virtual IP Address)asterisk fonulator heartbeat-info Scripts en ‘/etc/init.d/’ a Ejecutar en Failover/Switchover
Script ‘/etc/init.d/asterisk’
Arranca y detiene Asterisk. No es necesario arrancar y/o detener el DAHDI, que perfectamente podemos tenerlo
habilitado.
Script ‘/etc/init.d/fonulator’
Ejecuta ‘fonulator’ cada vez que haya un Failover.
Script ‘/etc/init.d/heartbeat-info’
La idea de este script es que se envíen mensajes E-mail, SMS, GTalk, Skype o Twitter cada vez que haya Failover o
Switchover.
34
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2.3.- Configuracion del Archivo ‘/etc/ha.d/authkeys’.
En este archivo se configuran los keys para la autenticación de heartbeat entre los nodos del cluster. De esta forma, se
provee un mínimo nivel de seguridad.
En el archivo ‘/etc/ha.d/authkeys’, colocamos entonces:
auth 22 sha1 elpasswordquequeramos
Es importante que el archivo ‘/etc/ha.d/authkeys’ tenga permiso de lectura solo para ‘root’, para ello ejecutamos el
siguiente comando:
chmod 600 /etc/ha.d/authkeys
35
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3.- Pruebas de Funcionamiento de DRBD y Heartbeat
3.1.- Prueba 1, Levantar los Nodos.
Para comenzar a probar apagamos ambos nodos del cluster y encendemos solamente el Nodo kPBXPRI. Debemos
chequear que se monta la partición de DRBD y que la VIP está disponible y que los servicios están arriba. Podemos
además, comprobar que el nodo kPBXPRI esta como Primario, para observar esto ejecutamos el siguiente comando:
drbdadm role kPBXPrimary/Unknow
A continuación arrancamos el kPBXSEC y comprobamos que es efectivamente el Nodo Secundario.
drbdadm role kPBXSecondary/Primary
Además, deberíamos observar que el Nodo Secundario se sincroniza con el DRBD. Esto, lo hacemos viendo el
‘/proc/drbd’ y detallar ‘ds:UpToDate/UpTodate’.
36
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y HeartbeatTópico 1
CONATEL / CEDITEL - VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3.2.- Prueba 2, Failover (Prueba de Fuego).
Esta es la prueba más importante del Sistema DRBD+Heartbeat. Lo que hacemos es apagar el Nodo Primario.
Inmediatamente, el Nodo Secundario pasa a ser Primario, que toma el Control DRBD, que monta la Partición DRBD,
que se configura la VIP y que los servicios se levantan. Solo se cortara el servicio entre 5 a 15 segundos.
La restauración. Debemos levantar el Nodo kPBXPRI, que ahora será Secundario, esperar que se sincronicen las
Particiones DRBD. Para hacer el Switchover, vamos al kPBXSEC y ejecutamos:
/etc/init.d/heartbeat restart
Al hacer esto, kPBXPRI pasara a tomar el control.
37