You are here

Servidores de alta disponibilidad: DRBD

Continuando con el tutorial de servidores de alta disponibilidad, a continuación expondré como configuré la partición en red en el sistema Heartbeat. Antes de continuar si no lo has hecho ya deberías configurar Heartbeat. Continuaremos usando la misma nomenclatura en los servidores.

El primer paso va a ser instalar DRBD en las 2 máquinas:

apt-get install drbd0.7-module-source drbd0.7-utils

Con module assistant compilamos el módulo DRBD en Debian:

module-assistant prepare
m-a auto-install drbd0.7-module-source

En /etc/drbd.conf configuramos las particiones que van a estar sincronizadas en los dos servidores, este fichero debe ser idéntico en las dos máquinas:

resource data {

  protocol C;

  startup {
    degr-wfc-timeout 120;    # 2 minutes.
  }

  disk {
    on-io-error   detach;
  }

  net {
  }

  syncer {
    rate 10M;
    group 1;
    al-extents 257;
  }

  on asteriskPBX {
    device     /dev/drbd0;
    disk       /dev/hdc6;
    address    192.168.1.8:7788;
    meta-disk  internal;
  }

  on asteriskPBX2 {
    device    /dev/drbd0;
    disk      /dev/hda10;
    address   192.168.1.7:7788;
    meta-disk internal;
  }

Después de configurarlo en la primera lo copiamos a la segunda:

scp /etc/drbd.conf root@asteriskPBX2:/etc/

Reiniciamos ambas máquinas, y la primera que arranque nos pedirá si queremos que actúe como principal y le respondemos que sí.

Cuando el DRBD de las 2 máquinas esté conectado esto lo podemos ver en /proc/drbd:

cat /proc/drbd

version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@asteriskPBX, 2007-12-21 09:05:16
 0: cs:Connected st:Primary/Secondary ld:Consistent
    ns:82970 nr:612 dw:83582 dr:17714 al:0 bm:103 lo:0 pe:0 ua:0 ap:0

Pasamos a sincronizar los discos, usamos el parámetro --do-what-I-say para no perder los datos la primera vez que sincronicemos ya que forzamos el primario a sincronizarse con el secundario y este hace lo mismo a la inversa con lo cual perderíamos los datos.

drbdsetup /dev/drbd0 primary --do-what-I-say

En el servidor principal creamos un directorio como punto de montaje y montamos el sistema de ficheros:

mkdir /data
mount /dev/drbd0 /data

Le copiamos los datos que queramos tener en ambas máquinas (podemos copiar directorios y crear enlaces simbólicos), y procedemos a desmontarlo y lo dejaremos como secundario:

umount /data
drbdsetup /dev/drbd0 secondary

Ahora nos vamos al servidor "espejo" y procedemos a crear un punto de montaje y comprobamos que el contenido es el mismo que en el servidor principal, aprovechamos para crear enlaces simbólicos si es necesario:

mkdir /data
mount /dev/drbd0 /data

Hechas las comprobaciones desmontamos el disco y lo dejamos ya en secundario:

umount /data
drbdsetup /dev/drbd0 secondary

Nos volvemos al servidor principal, lo dejamos como primario y montamos el disco :

drbdsetup /dev/drbd0 primary
mount /dev/drbd0 /data

Ahora procederemos a integrar DRBD en Heartbeat, la partición que está sincronizada solo puede estar montada en uno de los dos servidores a la vez para ello Heartbeat tiene que indicarle a DRBD cual de los dos nodos es el que esta activo, para ello vamos a nuestro fichero /etc/ha.d/haresources y modificamos la linea para añadir el servicio drbd (esto en las dos máquinas y en una sola línea):

asteriskPBX drbddisk::data Filesystem::/dev/drbd0::/data::ext3
IPaddr2::192.168.1.10/24/eth0 apache2 mysql

Reiniciamos Heartbeat en ambas máquinas y listo:

sudo /etc/init.d/heartbeat restart

Esto ha sido todo. Smile

GNU/Linux: 
Qué te parece: 

Comments

Hola, estoy con un proyecto basado en heartbeat y drbd y me ha surgido una duda configurando drbd. Me gustaría saber si "drbd0" tengo que crearlo yo o si drbd por si mismo lo crea él. Y en el caso que tenga que crearlo yo como se haría.

Lleno varios días investigando y no veo ninguna página donde se explique. Te agradecería mucho que me explicaras eso.

 

Gracias de antemano.

Hola, el dispositivo se especifica en el fichero /etc/drbd.conf, en la línea que pone "device /dev/drbd0;".

Después de instalar y configurar el módulo del kernel y drbd debe aparecer este dispositivo.

Comprueba que tengas correctamente cargado el módulo con un "lsmod | grep drbd", debería retornarte algo parecido a esto:

lsmod | grep drbd
drbd                  127892  2

si el comando no retorna nada es que no se ha cargado correctamente el módulo, puedes probar a cargarlo ejecutando en Debian "modprobe drbd", y si no te lanza un error, puedes añadir "drbd" al final del fichero /etc/modules.conf para que se cargue al iniciar la máquina

Saludos, si no se carga correctamente el módulo recuerda que "dmesg" es tu amigo Wink

pregunto: Ambos servidores deben estar conectados directamente a través de una tarjeta de red o solo basta que se vean en una red LAN?

Hola Jesús,

con que los hosts se vean en una LAN tienes suficiente, si no quieres cargar la LAN con más tráfico puedes conectarlos con un cable cruzado usando dos tarjetas de red adicionales. Otra opción es conectarlos con un cable null modem usando el puerto RS-232.

Quede en el paso mount /dev/drbd0

Lo hace en el cluster 1 (maestro)

pero en el espejo no,

cluster2:~# mount /dev/drbd0 /home/
mount: you must specify the filesystem type
Saludos, Muy bueno este tutorial

 

Hola J0se,

No deberías tener que especificar ningún sistema de ficheros por que de ello se encarga DRBD directamente.

Tal vez comprueba que no haya errores en la salida del comando drbdsetup, comprueba también el estado en /proc/drbd y que tengas también el módulo cargado en el servidor secundario.

PD: Siento la respuesta tardía, hemos tenido problemas con el sistema de notificación de comentarios.

no estoy muy seguro, he empezado hoy con el drbd, pero creo que

para poder hacer el mount primero tienes que

drdbdsetup /dev/drbd0 primary en el nodo secundario

entonces ya si puedes montarlo

un saludo.

Hola, muy bien explicado todo. En mi caso, lo tenía todo funcionando con debian sarge, pero al actualizar a etch ya no funciona.  Dice que no encuentra el modulo.

# modprobe drbd
FATAL: Module drbd not found.

He probado todo lo que me se ocurria pero nada. ¿alguna sugerencia?

Hola Martín,

esto es porque has actualizado el kernel y ahora estás usando el kernel nuevo. Comprueba que tengas instalado los fuentes de DRBD y cuando lo tengas vuelve a compilar el módulo con module assistant.

En resumen, te toca repetir las tres primeras líneas del tutorial. El resto de configuraciones no se habrán modificado al actualizar a Etch.

Saludos

Hola, tengo un problema, en mi caso, tras modificar el archivo drbd.conf de la siguiente manera:

on nodo1 {
device /dev/drbd0;
disk /dev/sda2;
address 10.108.25.4:7788;
meta-disk internal;
}

on nodo1 {
device /dev/drbd0;
disk /dev/sda3;
address 10.108.25.4:7788;
meta-disk internal;
}

on nodo2 {
device /dev/drbd0;
disk /dev/sda3;
address 10.108.25.10:7788;
meta-disk internal;
}

on nodo2 {
device /dev/drbd0;
disk /dev/sda2;
address 10.108.25.10:7788;
meta-disk internal;
}

reinicio ambas maquinas, pero en ninguna me pregunta si va a ser la principal, he probado con "/etc/init.d/drbd restart" y me pone lo siguitente:
/etc/drbd.con:234: host section 'data: on nodo1'first used here.
/etc/drbd.con:233: clonflicting use of host section 'data: on nodo1' ...
/etc/drbd.con:234: host section 'data: on nodo1'first used here.
/etc/drbd.con:233: clonflicting use of host section 'data: on nodo1' ...
/etc/drbd.con:234: host section 'data: on nodo1'first used here.
/etc/drbd.con:233: clonflicting use of host section 'data: on nodo1' ...
/etc/drbd.con:234: host section 'data: on nodo1'first used here.

por otro lado, en mi caso quiero que en nodo 1 el /dev/sda2 sea el activo y su espejo sea el /dev/sda2 del nodo 2, y que el en el nodo 2 el /dev/sda3 sea el activo y su espejo sea el /dev/sda3 de nodo 1. Como puedo hacer esto y solucionar lo anterior. Muchas Gracias

Hola, tengo un problema, en mi caso, tras modificar el archivo drbd.conf de la siguiente manera:

on nodo1 {
device /dev/drbd0;
disk /dev/sda2;
address 10.108.25.4:7788;
meta-disk internal;
}

on nodo1 {
device /dev/drbd0;
disk /dev/sda3;
address 10.108.25.4:7788;
meta-disk internal;
}

on nodo2 {
device /dev/drbd0;
disk /dev/sda3;
address 10.108.25.10:7788;
meta-disk internal;
}

on nodo2 {
device /dev/drbd0;
disk /dev/sda2;
address 10.108.25.10:7788;
meta-disk internal;
}

reinicio ambas maquinas, pero en ninguna me pregunta si va a ser la principal, he probado con "/etc/init.d/drbd restart" y me pone lo siguitente:
/etc/drbd.con:234: host section 'data: on nodo1'first used here.
/etc/drbd.con:233: clonflicting use of host section 'data: on nodo1' ...
/etc/drbd.con:234: host section 'data: on nodo1'first used here.
/etc/drbd.con:233: clonflicting use of host section 'data: on nodo1' ...
/etc/drbd.con:234: host section 'data: on nodo1'first used here.
/etc/drbd.con:233: clonflicting use of host section 'data: on nodo1' ...
/etc/drbd.con:234: host section 'data: on nodo1'first used here.

por otro lado, en mi caso quiero que en nodo 1 el /dev/sda2 sea el activo y su espejo sea el /dev/sda2 del nodo 2, y que el en el nodo 2 el /dev/sda3 sea el activo y su espejo sea el /dev/sda3 de nodo 1. Como puedo hacer esto y solucionar lo anterior. Muchas Gracias

Se que es muy tarde para responder este post, pero seguramente le servira a otra persona que llegue hasta aqui.
El error es que estas apuntando diferentes discos al mismo dispositivo, no pueden existir dos dispositivos drbd0 en el mismo equipo.
Esta deberia ser tu config:

on nodo1 {
device /dev/drbd0;
disk /dev/sda2;
address 10.108.25.4:7788;
meta-disk internal;
}

on nodo1 {
device /dev/drbd1;
disk /dev/sda3;
address 10.108.25.4:7788;
meta-disk internal;
}

on nodo2 {
device /dev/drbd0;
disk /dev/sda3;
address 10.108.25.10:7788;
meta-disk internal;
}

on nodo2 {
device /dev/drbd1;
disk /dev/sda2;
address 10.108.25.10:7788;
meta-disk internal;
}

Saludos