Como instalar DRBD sobre Linux Debian Ubuntu

3 Comments

Que es DRBD

DRBD ® se refiere a los dispositivos de bloque concebido como una edificacion en bloque, agrupados para formar un cluster de alta disponibilidad (HA). Esto se hace por medio del reflejo completo de un dispositivo de bloque asignado a traví©s de una red. Se muestra como la red raid-1-DRBD.

Como funciona DRBD

En la ilustración a continuacion, las dos cajas de color naranja representan dos servidores que forman un clúster de alta disponibilidad (HA). Las cajas contienen los componentes habituales de un núcleo Linux: sistema de archivos, buffer cache, planificador de disco, controladores de disco, pila TCP/IP y el controlador de la tarjeta de interfaz de red (NIC). Las flechas en negro ilustran el flujo de datos entre estos componentes.

Como instalar DRBD sobre Linux Debian Ubuntu 1
red raid-1-DRBD

Las flechas color naranja muestran el flujo de datos, cuando el DRBD copia o refleja los datos de un servicio de alta disponibilidad desde el nodo activo del clúster HA hacia el nodo de respaldo del cluster HA.

En pocas palabras, DRBD es un arreglo de software el cual construye un mirror de discos sobre LAN. Esto quiere decir que ademas de nuestros arreglos de disco por hardware raid0, raid1, raid50, podemos tener nuestros datos respaldados en otro servidor remoto.

Para mas informacion detallada del DRBD visiten la pagina oficial: www.drbd.org.

Instalacion de DRBD en Linux

Ahora que ya conocemos un poco mas del funcionamiento y las ventajas de utilizar el sistema de replicacion que ofrece DRBD, vamos a realizar la instalacion en Debian/Ubuntu:

deathbian:~# aptitude install linux-image-2.6-686 drbd8-modules-2.6-686
deathbian:~# apt-get install drbd8-utils drbd8-module-source build-essential module-assistant

Ahora reiniciamos, y a continuacion tecleamos:

deathbian:~# uname -a
Linux Deathbian 2.6.24-1-686 #1 SMP Sat Apr 19 00:37:55 UTC 2008 i686 GNU/Linux

DRBD utiliza tres protocolos: A, B y C. En nuestro caso hemos editado el archivo de configuracion del DRBD para utilizar el Protocolo C. Este protocolo de comunicacion del DRBD antes de grabar los datos al disco local lo hace al disco en red, segun la teoria es el protocolo mas lento, pero nos garantiza la seguridad de los datos y al igual en la practica se ha demostrado ser muy rapido.

  • El resource o recurso, delimita el grupo de particiones que van a guardar los datos.
  • Mail01 y Mail02 son los nombres de los servidores miembros del cluster/recurso DRBD. Estos tienen que estar en /etc/hosts.
  • Device, es el dispositivo de la capa del disco DRBD.
  • Disk, la particion de disco que almacena los datos.
  • Address, direccion ip del servidor
  • Meta-disk, es un particion donde el DRBD guarda informacion o la meta-data de su disco. Debe de existir un meta-disk por dispositivo por cada nodo.

Veamos la configuracion del DRBD:

archivo: /etc/drbd.conf
global {
usage-count yes;
}
common {
protocol C;
}
resource r0 {
on nodo01 {
device    /dev/drbd1;
disk      /dev/sda7;
address   192.168.1.110:7789;
meta-disk /dev/sda6[0];
}
on nodo02 {
device    /dev/drbd1;
disk      /dev/hda7;
address   192.168.1.100:7789;
meta-disk /dev/hda6[0];
}
}

La particion que deseo usar con el DRBD es el home, pero me falta espacio para la particion del metadata;

nodo01:~# df -h
/dev/hda6              30G  182M   28G   1% /home

Editamos el archivo /etc/fstab, y comentamos la particion del home, para que ya no la vuelva a montar. Por cualquier cosa nunca esta de mas sacar un backup antes. Luego desmontamos la particion e ingresamos a editar particiones con fdisk. Donde borramos la particion /dev/hda6 y creamos dos nuevas particiones, una para el meta-disk de 256MB y otra para el nuevo /home con DRBD.

nodo01:~# tar -cf home.tar home/
nodo01:~# umount /dev/hda6
nodo01:~# fdisk /dev/hda
Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         851     6835626   83  Linux
/dev/hda2             852        4865    32242455    5  Extended
/dev/hda5             852         941      722893+  82  Linux swap / Solaris

Command (m for help): n
Command action
l   logical (5 or over)
p   primary partition (1-4)
l
First cylinder (942-4865, default 942):
Using default value 942
Last cylinder or +size or +sizeM or +sizeK (942-4865, default 4865): +256M

Command (m for help): n
Command action
l   logical (5 or over)
p   primary partition (1-4)
l
First cylinder (974-4865, default 974):
Using default value 974
Last cylinder or +size or +sizeM or +sizeK (974-4865, default 4865):
Using default value 4865

Command (m for help): p

Disk /dev/hda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xbe54be54

Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         851     6835626   83  Linux
/dev/hda2             852        4865    32242455    5  Extended
/dev/hda5             852         941      722893+  82  Linux swap / Solaris
/dev/hda6             942         973      257008+  83  Linux
/dev/hda7             974        4865    31262458+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

Ya que estan creadas las nuevas particiones, reiniciamos el sistema para que el kernel tome los cambios.

Inicializando el recurso

Necesitamos crear el dispositivo de metadata. Este paso debe realizarse solo en la creacion inicial del dispositivo, ya que inicializa la metadata del DRBD y borra todo el contenido en la particion.

nodo01:~# drbdadm create-md r0
--==  Thank you for participating in the global usage survey  ==--
The server's response is:

In the future drbdadm will only contact usage.drbd.org when you update
DRBD or when you use 'drbdadm create-md'. Of course it will continue
to ask you for confirmation as long as 'usage-count' is at its default
value of 'ask'.

Just press [enter] to continue:

v08 Magic number not found
v07 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.

En el comando :~# drbdadm create-md $resource, cambiamos $resource por r0 ya que este es el nombre del recurso en el archivo de configuracion. El mensaje de global usage survey no importa, solo es un contador para que el proyecto conozca la version de DRBD de la instalacion.

drbdadm up Levanta y conecta el servicio del DRBD con el otro nodo.

Sincronizacion Inicial del dispositivo DRBD

Para que el DRBD sea operacional se requieren dos ultimos pasos:
Seleccionar la fuente de sincronizacion. Si tenemos un disco vacio, no importa la fuente que seleccionemos, pero si ya tenemos informacion en el disco es crucial que dicho disco sea seleccionado como la fuente. De lo contrario, si se hace la sincronizacion desde la fuente equivocada, perderemos todos los datos.

nodo01:~# drbdadm -- --overwrite-data-of-peer primary resource

Luego de ejecutar este comando se inicia la sincronizacion completa. Pueden monitorear el progreso via /proc/drbd. Puede tomar algún tiempo dependiendo del tamaño del dispositivo.

Ahora el dispositivo DRBD esta operacional, incluso antes de terminar la sincronizacion. Ahora pueden crear un sistema de archivos en el dispositivo, montarlo y realizar cualquier accion sobre el dispositivo de bloque.

Pruebas de rendimiento de DRBD

nodo01:~# dd if=/dev/zero bs=1M count=1 of=/dev/hda6; sync
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0392371 s, 26.7 MB/s

Donde, /dev/hda6 es la particion de nuestro DRBD, lo cual destruye el formato. Podemos incrementar bs por 250M, 1G, etc. Para ver el rendimiento del dispositivo

Resumen
Habilitar y crear el recurso (http://www.drbd.org/users-guide/s-first-time-up.html)
Con fsdisk creamos dos particiones sda3 y sda 4 de 256M y 68Gigas respectivamente (ver ejemplo en drbd.org)
Crear Metadata
drbdadm create-md r0
mail02:~# drbdadm create-md r0
v08 Magic number not found
v07 Magic number not found
Writing meta data...
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.

Iniciar el servicio del DRBD
nodo01:~# /etc/init.d/drbd start
Asignar el nodo DRBD como primario
nodo01:~# drbdadm -- -o primary $r
Formateo de la particion replicada
nodo01:~# mkfs.ext3 /dev/drbd1

Para el nodo02, copiamos via scp la configuracion del /etc/drbd.conf desde el nodo01

Solución de problemas

No puedo levantar el servicio de DRBD

Starting DRBD resources: [ d0 Failure: (119) No valid meta-data signature found.

==> Use 'drbdadm create-md res' to initialize meta-data area. < == cmd /sbin/drbdsetup /dev/drbd1 disk /dev/sda8 /dev/sda7 0 --set-defaults --create-device --on-io-error=detach failed!
Aun no hemos creado el metadata, por eso los servicios DRBD no pueden iniciar.

No puedo conectar mi dispositivo a la red DRBD
drbdadm attach r0
No response from the DRBD driver! Is the module loaded?
Command 'drbdsetup /dev/drbd1 disk /dev/sda4 /dev/sda3 0 --set-defaults --create-device' terminated with exit code 20
drbdadm aborting

El error anterior se debe a que no tenemos el servicio de drbd o demonio corriendo.
Levantamos el servicio del DRBD y si todo sale bien tecleamos el comando cat para ver si esta sincronizando.

nodo01:~# service drbd start
Starting DRBD resources:    [ d(r0) s(r0) n(r0) ].

nodo01:~# cat /proc/drbd
version: 8.0.11 (api:86/proto:86)
GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by buildsvn@c5-i386-build, 2008-03-09 10:26:33

1: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
ns:0 nr:1421536 dw:1420480 dr:0 al:0 bm:86 lo:34 pe:717 ua:33 ap:0
[>....................] sync'ed:  2.1% (65184/66571)M
finish: 0:21:10 speed: 52,548 (50,728) K/sec
resync: used:3/31 hits:89441 misses:89 starving:0 dirty:0 changed:89
act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0

No puedo crear el metadata del DRBD.

[root@node02 ~]# drbdadm create-md r0
/etc/drbd.conf:20: in resource r0, on nodo01 { ... } ... on nodo02 { ... }:
There are multiple host sections for the peer.
Maybe misspelled local host name 'node02.guatewireless.org'?
/etc/drbd.conf:20: in resource r0, there is no host section for this host.
Missing 'on node02.guatewireless.org {...}' ?
[root@node02 ~]# hostname

Este problema se debe a que DRBD no puede encontrar el nombre de dominio, editamos /etc/sysconfig/network y cambiamos HOSTNAME.

Mas informacion | http://wiki.centos.org/HowTos/Ha-Drbd

3 Replies to “Como instalar DRBD sobre Linux Debian Ubuntu”

  1. En base a que tamaño de disco calculaste los 256MB de la partición de metadata?
    Porque no se como dimensionar la misma en distintos tamaños de disco. Utilice una formula de la pagina oficial pero nos números que me tiran apenas superan los 2 MB de partición de metadata para un disco de 70 GB
    A y el tutorial es el mejor que vi.

    Saludos

    1. La verdad la particion del metadata resulta ser bastante pequeño. Pero por razones de consistencia en diferentes instalaciones decidi estandarizar en 256MB. Por cierto, cual es el link de la formula?

Deja tus preguntas o comentarios