Enviado por admin el
DRBD es un programa que permite conectar particiones presentes en distintos servidores y tenerlas sincronizadas. Funciona en el mismo modo de un sistema RAID1 con la sencilla diferencias que las copias de los datos se hacen a través de la red usando el protocolo TCP. En este articulo veremos como instalar DRBD en dos servidores VPS en Linode y de esta forma crear un sistema de alta disponibilidad para Asterisk. Lo mismo podemos hacer con dos servidores locales con un minimo de cambios.
Antes que nada tenemos que instalar y configurar el sistema operativo Linux (en nuestro caso CentOS 5.3) en Linode. En el video se muestra el procedimiento a seguir en un servidor Linode. El mismo procedimiento hay que repetirlo en el segundo servidor Linode.
Una vez terminada esta operación, tendremos los dos servidores Linode listos para la instalación y configuración de DRBD. Siendo los dos servidores localizados en el mismo centro de datos podemos aprovechar de la posibilidad de interconectarlos como si estuvieran en una red local.
ServerA
IP publico: 69.164.204.41
IP Lan: 192.168.130.234
Configuramos la IP de la red local:
nano /etc/sysconfig/network-scripts/ifcfg-eth0:1
pegamos las siguientes líneas:
DEVICE=eth0:1
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.130.234
NETMASK=255.255.128.0
Guardamos los cambios y cambiamos el nombre del host:
nano /etc/sysconfig/network
modificamos la siguiente línea:
HOSTNAME=localhost.localdomain
para que quede:
HOSTNAME=test1.voztovoice.org
Terminada la operación reiniciamos el servidor:
reboot
Seguimos el mismo procedimiento en el segundo servidor:
ServerB
IP publico: 69.164.204.42
IP Lan: 192.168.130.58
nano /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.130.58
NETMASK=255.255.128.0
nano /etc/sysconfig/network
cambiamos la siguiente línea:
HOSTNAME=localhost.localdomain
para que quede:
HOSTNAME=test2.voztovoice.org
reboot
Seguimos con la configuración de los dos server para que cada uno sepa a que dirección IP encontrar el otro:
ServerA
nano /etc/hosts
Añadimos las siguientes líneas:
192.168.130.234 test1.voztovoice.org
192.168.130.58 test2.voztovoice.org
Guardamos los cambios y averiguamos que efectivamente logramos localizar el servidor B
ping test2.voztovoice.org
PING test2.voztovoice.org (192.168.130.58) 56(84) bytes of data.
64 bytes from test2.voztovoice.org (192.168.130.58): icmp_seq=1 ttl=64 time=0.346 ms
64 bytes from test2.voztovoice.org (192.168.130.58): icmp_seq=2 ttl=64 time=0.344 ms
64 bytes from test2.voztovoice.org (192.168.130.58): icmp_seq=3 ttl=64 time=0.370 ms
64 bytes from test2.voztovoice.org (192.168.130.58): icmp_seq=4 ttl=64 time=0.430 ms
--- test2.voztovoice.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.344/0.372/0.430/0.039 ms
Seguimos el mismo procedimiento en el servidor B
ServerB
nano /etc/hosts
Añadimos las siguientes líneas:
192.168.130.234 test1.voztovoice.org
192.168.130.58 test2.voztovoice.org
ping test1.voztovoice.org
PING test1.voztovoice.org (192.168.130.234) 56(84) bytes of data.
64 bytes from test1.voztovoice.org (192.168.130.234): icmp_seq=1 ttl=64 time=0.389 ms
64 bytes from test1.voztovoice.org (192.168.130.234): icmp_seq=2 ttl=64 time=0.365 ms
64 bytes from test1.voztovoice.org (192.168.130.234): icmp_seq=3 ttl=64 time=0.331 ms
64 bytes from test1.voztovoice.org (192.168.130.234): icmp_seq=4 ttl=64 time=0.446 ms
--- test1.voztovoice.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.331/0.382/0.446/0.048 ms
Una vez terminada esta preparamos el sistema para la instalación de DRBD:
ServerA ServerB
Las operaciones que siguen hay que ejecutarlas en ambos servidores:
Instalamos los paquetes necesarios para la instalación de DRBD
yum update
yum install flex gcc gcc-c++ glibc-devel make bzip2-devel wget
cd /usr/src
Miramos la versión del XEN kernel instalado:
uname –r
2.6.18.8-linode22
La descargamos:
wget http://www.linode.com/src/2.6.18.8-linode22.tar.bz2
descomprimimos el paquete y cambiamos el nombre a la carpeta:
tar -xf 2.6.18.8-linode22.tar.bz2
mv 2.6.18.8-linode22 linux
Ahora creamos una enlace simbólico a la carpeta creada en la carpeta del kernel instalado:
cd /lib/modules/2.6.18.8-linode22/
ln -s /usr/src/linux build
Ya podemos empezar con la instalación de DRBD:
cd /usr/src
wget http://oss.linbit.com/drbd/8.3/drbd-8.3.7.tar.gz
tar -xf drbd-8.3.7.tar.gz
cd drbd-8.3.7
./configure --prefix=/ --with-km
make KDIR=/usr/src/linux/
make install
De esta forma compilamos e instalarnos DRBD como modulo del Kernel
Movemos la configuración predefinida que viene con la instalación de DRBD
mv /etc/drbd.conf /etc/drbd.conf.old
y creamos la nuestra:
nano /etc/drbd.conf
global {
usage-count yes;
}
common {
protocol C;
}
resource data {
net {
allow-two-primaries;
}
startup {
become-primary-on both;
}
on test1.voztovoice.org {
device /dev/drbd1;
disk /dev/xvdc;
address 192.168.130.234:7789;
meta-disk /dev/xvdd[0];
}
on test2.voztovoice.org {
device /dev/drbd1;
disk /dev/xvdc;
address 192.168.130.58:7789;
meta-disk /dev/xvdd[0];
}
}
De esta forma creamos dos nodos primarios usando el protocolo C y llamamos este recurso creado “data”.
El nodo 1 será test1.voztovoice.org cuya IP local es 192.168.130.234 Utilizaremos las dos particiones creadas (xvdc y xvdd) una para las copia de los datos y la otra como meta disco para guardar los datos que DRBD crea al momento de conectarse y actualizarse con el segundo nodo.
El nodo 2 será test2.voztovoice.org cuya IP local es 192.168.130.58.
Ahora creamos los meta-datos en la partición xvdd de ambos servidores:
drbdadm create-md data
Normalmente sale este error:
Found ext3 filesystem
This would corrupt existing data.
If you want me to do this, you need to zero out the first part
of the device (destroy the content).
You should be very sure that you mean it.
Operation refused.
Command 'drbdmeta 1 v08 /dev/xvdd 0 create-md' terminated with exit code 40
drbdadm create-md data: exited with code 40
Lo solucionamos destruyendo todos los datos presentes:
dd if=/dev/zero of=/dev/xvdd bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 0.333349 seconds, 403 MB/s
Volvemos al comando:
drbdadm create-md data
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success
Ahora modificamos el script de arranque automático de DRBD:
nano /etc/init.d/drbd
Modificando esta línea:
$MODPROBE -s drbd `$DRBDADM sh-mod-parms` $ADD_MOD_PARAM || {
para que quede:
$MODPROBE -f drbd `$DRBDADM sh-mod-parms` $ADD_MOD_PARAM || {
Terminamos configurando el sistema para que el script se inicie al iniciarse el sistema operativo:
chkconfig --add drbd
chkconfig drbd on
Para crear una primera sincronización entre los datos de las dos particiones de los dos servidores cargamos el modulo DRBD en el Kernel:
modprobe -f drbd
averiguamos que efectivamente se cargó:
lsmod
Module Size Used by
drbd 247200 0
Ahora creamos la conexión entre los dos servidores:
drbdadm attach data
drbdadm syncer data
drbdadm connect data
Efectuamos una primera sincronización de los datos:
ServerA
drbdadm -- --overwrite-data-of-peer primary data
Esta operación puede durar bastante tiempo dependiendo del tamaño de los discos. Podemos controlar en cualquier momento a que punto ha llegado con el comando:
cat /proc/drbd
version: 8.3.7 (api:88/proto:86-91)
GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@test1.voztovoice.org, 2010-04-13 13:37:24
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----
ns:384744 nr:0 dw:0 dr:384744 al:0 bm:23 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:106776
[==============>.....] sync'ed: 78.6% (106776/491520)K
finish: 0:07:07 speed: 240 (240) K/sec
Una vez terminada la sincronización de los dos recursos reiniciamos ambos servidores:
reboot
Volvemos al servidor A
ServerA
Creamos una nueva carpeta donde vamos a copiar los datos que queremos sincronizar:
mkdir /data
Montamos la partición de los datos:
mount /dev/drbd1 /data
y creamos unos cuantos archivos:
touch /data/file1
touch /data/file2
touch /data/file3
ls /data
file1 file2 file3 lost+found
La quitamos:
umount /data
y averiguamos el resultado en el servidor B
ServerB
mkdir /data
mount /dev/drbd1 /data
ls /data
file1 file2 file3 lost+found
umount /data
Claramente este es solo un ejemplo. En el caso de asterisk podemos copiar directamente la carpeta de esta forma:
ServerA
mount /dev/drbd1 /data
mkdir /data/etc
cd /etc
mv asterisk /data/etc/asterisk
ln –s /data/etc/asterisk asterisk
Lo mismo hacemos con DAHDI:
mv dahdi /data/etc/dahdi
ln –s /data/etc/dahdi dahdi
umount /data
ServerB
mount /dev/drbd1 /data
cd /etc
rm –fr asterisk
rm –fr dahdi
ln –s /data/etc/asterisk asterisk
ln –s /data/etc/dahdi dahdi
umount /data
A este punto tenemos configurado y en función DRBD. En el próximo articulo veremos como complementar DRBD con Heartbeat de forma que si el servidor principal de Asterisk (serverA) se cae, el servidor de respaldo (ServerB) tomará su lugar y utilizará los mismos archivos de configuración compartidos con DRBD.
Comentarios recientes