Mirror remoto con DRBD

DRBD (Distributed Replicated Block Device) nos permite montar un mirror de discos remoto (equivalente a RAID-1 en red).

DRDB crea un dispositivo de bloques drbd0 accesible desde ambos servidores. El servidor primario es el que tiene acceso RW en el dispositivo drbd0: cada vez que escribe algo en drbd0 lo escribe en la partición física y esos mismos datos se envían por TCP/IP al servidor secundario (que sólo tiene acceso RO) consiguiendo que ambas particiones físicas estén sincronizadas, exactamente igual que un RAID-1.A continuación configuraremos un dispositivo DRBD entre 2 servidores. Vamos a montar un mirror entre server1 y server2 del filesystem "/data".

DRBD

1.- Para crear el mirror utilizaremos la partición "/dev/sda8" que existe en cada servidor.

Nos aseguramos que dichas particiones no estén montadas y no estén en el fichero "/etc/fstab".

Nota: las particiones tienen que ser iguales en los 2 servidores.

 

2.- Nos aseguramos que ambos servidores tienen la misma hora. Para conseguir esto configuramos el cliente NTP para que se actualice desde la misma ubicación.

ntpdate server
date


3.- Instalamos y cargamos el módulo DRBD en cada servidor:

apt-get install drbd8-utils
apt-get install drbd8-modules-`uname -r`
modprobe drbd


Si queremos que arranque cuando se reinicie la máquina lo añadimos al fichero modules:

echo drbd >> /etc/modules


4.-
Editamos el fichero "drbd.conf" en cada servidor:

resource r0 {
protocol C;
incon-degr-cmd "halt -f";
startup {
degr-wfc-timeout 120; # 2 minutes.
}
disk {
on-io-error detach;
}
net {
}
syncer {
rate 10M;
group 1;
al-extents 257;
}
on server1 {
device /dev/drbd0;
disk /dev/sda8;
address 192.168.6.172:7788;
meta-disk /dev/sda8[0];
}
on server2 {
device /dev/drbd0;
disk /dev/sda8;
address 192.168.6.173:7788;
meta-disk /dev/sda8[0];
}
}


5.- Nos conectamos a cada servidor y activamos DRBD:

drbdadm up all
cat /proc/drbd
version: 0.7.10 (api:77/proto:74)
SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
0: cs:Connected st:Secondary/Secondary ld:Inconsistent
ns:0 nr:0 dw:0 dr:0 al:0 bm:1548 lo:0 pe:0 ua:0 ap:0
1: cs:Unconfigured

Vemos que ningún servidor ha sido configurado como primario (Secondary/Secondary) y que los datos son inconsistentes (Inconsistent), ya que todavía no hemos hecho la sincronización inicial.


6.- Nos conectamos a server1 y lo definimos como servidor primario:

drbdadm -- --do-what-I-say primary all


7.-
Ahora realizaremos la sincronización inicial. Ejecutamos el siguiente comando para realizar una sincronización inicial entre server1 y server2:

drbdadm -- connect all


Durará un buen rato, por lo que tendremos paciencia. Para ver el progreso de la sincronización:

cat /proc/drbd
version: 0.7.10 (api:77/proto:74)
SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
0: cs:SyncSource st:Primary/Secondary ld:Consistent
ns:13441632 nr:0 dw:0 dr:13467108 al:0 bm:2369 lo:0 pe:23 ua:226 ap:0[==========>.........] sync'ed: 53.1% (11606/24733)M
finish: 1:14:16 speed: 2,644 (2,204) K/sec
cs:Unconfigured


Cuando termine la salida será:

cat /proc/drbd
SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
0: cs:Connected st:Primary/Secondary ld:Consistent
ns:37139 nr:0 dw:0 dr:49035 al:0 bm:6 lo:0 pe:0 ua:0 ap:0
1: cs:Unconfigured