Cluster Redundante Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Heartbeat Tó ico 1
LVM
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
1
Cluster Redundante Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Heartbeat Tó ico 1 Introducción A lo largo de este tópico avanzado estaremos desarrollando desarrollando el tema de instalación, instalación, configuración configuración y despliegue 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 restaura restauración ción.. Como Como soporte soporte para las partici particione ones, s, haremos haremos uso de Partici Particione oness basadas basadas en Volúmen olúmenes es Lógico Lógicoss 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2
Cluster Redundante Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Heartbeat Tó ico 1 Introducción A lo largo de este tópico avanzado estaremos desarrollando desarrollando el tema de instalación, instalación, configuración configuración y despliegue 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 restaura restauración ción.. Como Como soporte soporte para las partici particione ones, s, haremos haremos uso de Partici Particione oness basadas basadas en Volúmen olúmenes es Lógico Lógicoss 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
2
Cluster Redundante Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Heartbeat Tó ico 1
Distributed Replicated Block Device (DRBD) 1.- Introducción y Aspectos Generales de DRBD DRBD 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 'synchronous mirroning' mirroning' un proceso de escritura 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
3
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 Herramientas de Administración de DRBD DRBD 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
4
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 Recursos En 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
5
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 Resource Roles En 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'.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
6
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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 LINBIT LINBIT 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 update apt-get install drbd-utils drbd8-utils drbdlinks apt-get install build-essential module-assistant
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
7
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.2.- Instalación de DRBD vía Compilación 2.2.1.- Descarga del Código Fuente de DRBD A 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>&2 rm -rf drb -${drbdVersion} > /dev/null 2>&2 wget http://oss.linbit.com/drbd/8.4/drbd-${drbdVersion}.tar.gz tar xvzf drbd-${drbdVersion}.tar.gz ln -s /usr/src/drbd-${drbdVersion} /usr/src/drbd ls -la
Luego de descomprimir, se va a crear el directorio ‘/usr/src/drbd-8.4.1/’.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
8
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.2.2.- Compilación de DRBD 2.2.2.1.- Pre-Requisitos Para 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 Kernel Lo 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/src kernelVersion="2.6.32-5-686" ln -s /usr/src/linux-headers-2.6.32-5-686 /usr/src/linux cd /usr/src/linux make mrproper zcat /proc/config.gz > .config make cloneconfig cp /boot/config-$(uname -r) .config cp .config /root/.config-backup
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
9
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.2.2.3.- Compilando DRBD A 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: make make install ls -la /sbin/drbd*
Con el último comando, se crean las siguientes herramientas en el directorio ‘/sbin/’: •
drbdadm
•
drbdsetup
•
drbdmeta
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
10
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.2.2.4.- Compilando DRBD como un Modulo del Kernel Para 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/drbd make 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/drbd make clean make KDIR=/path/to/kernel/source
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
11
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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/drbd make clean make 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
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
12
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.3.- Instalando DRBD como un Paquete Debian Para 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...)
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
13
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 3.- Configuración de DRBD (Post-Instalación) 3.1.- Secciones Lógicas de Almacenamiento Una 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 .
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
14
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
15
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 3.3.- Configuración de los Recursos de DRBD El 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) include "/etc/drbd.d/global_common.conf";
/etc/drbd.conf (flat configuration file) global {
include "/etc/drbd.d/*.res";
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; } }
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
16
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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 c' ommon' 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
17
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1
Elaboración de las Prácticas Creación de Cluster Redundante con DRBD y Heartbeat Uso del Cluster para Servidor Asterisk IP PBX
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
18
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 1.- Preparación del Entorno de Particiones LVM Para 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:
CONATEL / CEDITEL -
/mnt/vfs
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
19
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 1.1.- Creación del Volumen Físico Unidad de Disco:
/dev/sdb
Comandos: pvcreate /dev/sdb pvdisplay
1.2.- Creación del Volumen Virtual Nombre del Volumen Físico:
/dev/sdb
Nombre del Volumen Virtual:
kkpbx
Comandos: vgcreate kkpbx /dev/sdb vgdisplay
1.3.- Creación del Volumen Lógico Nombre 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 kkpbx lvcreate -L 8G -n kkpbx-meta kkpbx lvdisplay
Los Volúmenes Lógicos quedan referenciados como /dev/kkpbx/kkpbx y /dev/kkpbx/kkpbx-meta, respectivamente. CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
20
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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 LVM Ahora, 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/kkpbx mkfs -t ext3 -m 1 -v /dev/kkpbx/kkpbx-meta
1.5.- Montar la Partición LVM La 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/vfs mount -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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
21
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
22
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.- Montaje de DRBD sobre la Partición LVM Toda 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; } }
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
23
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
24
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.1.- Creación de la Partición Virtual DRBD Toda 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’.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
25
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.2.- Inicio de la Sincronización/Replicación DRBD Luego 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
26
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 2.2.- Configuracion Adicional DRBD solo en el Nodo Primario Finalmente, 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/drbd1 mkdir /mnt/vfs mount -t ext4 /dev/drbd1 /mnt/vfs mount
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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
27
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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/vfs mkdir dir1 cc dir1 touch archivo.text echo “Hola” > archivo.text
•
Desmontamos la Partición DRBD y hacemos que el Primario pase a ser Secundario umount /mnt/vfs drbdadm secondary kPBX drbdadm role kPBX
Deberíamos ver ‘Secondary/Secondary’ en el Nodo Primario.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
28
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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 kPBX mkdir /mnt/vfs mount -t ext3 /dev/drbd1 /mnt/vfs ls -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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
29
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
30
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 Parte II Instalación, Configuracion y Pruebas de Heartbeat 1.- 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 haresources authkeys
Archivo de Configuracion Principal de Heartbeat Archivo de Configuracion de Recursos de Heartbeat Información de Autenticación para Heartbeat
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
31
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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.gz gzip -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-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 20 warntime 10 initdead 40 udpport 694 bcast eth0 auto_failback off node kPBXPRI node kPBXSEC
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
32
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1
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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
33
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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 drbddisk::kPBX Filesystem::/dev/drbd1::/mnt/vfs::ext3 IPaddr::10.0.1.99/24/eth1 asterisk fonulator heartbeat-info
Especifica
que el Nodo kPBXPRI es el Primario del Recurso DRBD Información para el Montaje de DRBD Dirección IP Virtual (VIP: Virtual IP Address) Scripts en ‘/etc/init.d/’ a Ejecutar en Failover/Switchover Nombre
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.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
34
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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 2 2 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
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
35
Cluster Redundante de la Suite Asterisk IP PBX con DRBD y Heartbeat Tó ico 1 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 kPBX
Primary/Unknow A continuación arrancamos el kPBXSEC y comprobamos que es efectivamente el Nodo Secundario. drbdadm role kPBX
Secondary/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’.
CONATEL / CEDITEL -
VoIP Telefonía IP y sus Aplicaciones sobre Plataformas de Red GNU/Linux y Software Libre con Asterisk, Nivel Avanzado II
36