Buscar en este blog

21.2.11

DRBD. Replicación de discos vía red en Debian

Instalación y configuración inicial.

DRBD se define a sí mismo con un sistema de RAID1 sobre IP. Los espejos se crean sobre discos de máquinas remotas y el bus SCSI o SATA se convierte en conexiónes IP.

Se dispone de dos máquinas, con un dispositivo de bloques (habitualmente un disco duro) que se desea replicar de forma continua entre ambos. Uno de ellos será el original (Master) y el otro la réplica (Espejo). En este caso se va a replicar la partición "/dev/sda3", que debe tener el mismo tamaño en ambos nodos.

Se parte de dos máquinas Debian 6 con conexión directa IP y configuración:

Master (drbd1)
hostname: nodo01.prueba.com
Dirección IP: 192.168.1.21
Replica/espejo (drbd2)
hostname: nodo02.prueba.com
Dirección IP: 192.168.1.22

Ambos nodos deben ser accesibles desde el otro por estas direcciones IP (un ping es una buena prueba rápida). El ancho de banda de la linea que los une definirá el rendimiento de la replicación.

Archivo "/etc/hosts"
Debe existir en ambos nodos e incluir una linea por cada nodo con su dirección IP de contacto:
[...]
192.168.1.21   nodo01.prueba.com node01
192.168.1.22   nodo02.prueba.com node02
[...]

Instalar paquete "drbd8-utils" en ambos nodos:
#> apt-get install drbd8-utils

Cargar el módulo "drbd" del kernel en ambos nodos:
#> modprobe drbd

La partición de disco a replicar debe:
 - Existir como tal antes de iniciar el servicio (vg.- /dev/sda3) en ambos nodos.
 - No estar formateada con ningún sistema de archivos en ninguno de los nodos. Por lo tanto, ningún fichero del sistema debe residir en ella.
 - Ser idéntica en ambos nodos en tamaño.

Editar el archivo de configuración "/etc/drbd.conf"

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

#include "drbd.d/global_common.conf";
#include "drbd.d/*.res";

global {
    usage-count no;
}

common {
    #Velocidad de sincronización. Velocidad de la red dedicada.
    syncer {rate 100M; }
}

resource r1 {
    #Protocolo de sincronización:
    #    A: La sincronización se da por terminada cuando es enviada al buffer TCP local
    #    B: La sincronización se da por terminada cuando ha llegado al buffer remoto
    #    C: La sincronización se da por termianda cuando ha sido escrita también en el disco espejo
    protocol C;
    startup {
        wfc-timeout 15;       #Tiempo seg. de espera por lo recursos remotos en el arranque del servicio
        degr-wfc-timeout 60;  #Tiempo seg. de espera por un recurso perdido hasta que el cluster se marca como degradado
    }

    net {
        cram-hmac-alg sha1;    #Algoritmo CRAM para la clave
        shared-secret "secret"; #Clave de autentificación
        #allow-two-primaries;   #Solo si hay cluster filesystem encima
    }

    on nodo01 {
        device /dev/drbd0;    #Dispositivo RAID DRBD
        disk /dev/sda3;        #Dispositivo local miembro de DRBD
        address 192.168.1.21:7788;    #Interfaz de comunicación
        meta-disk internal;    #Integrado en "/dev/sda3"
    }

    on nodo02 {
        device /dev/drbd0;
        disk /dev/sda3;
        address 192.168.1.22:7788;
        meta-disk internal;
    }
} #Fin resource r1

Iniciar el servicio "drbd" en ambos nodos:
#> /etc/init.d/drbd start

Inicializar el recurso DRBD (genera los metadatos). Se debe ejecutar el siguiente comando en ambos nodos:
 #> drbdadm create-md r1
"Levantar" el recurso en ambos nodos, ejecutando:
 #> drbdadm up r1
Desde este momento podemos ver el estado del "raid" en el archivo "/proc/drbd":
 #> watch cat /proc/drbd
Ahora se debe establecer cual de los nodos es el master y cual el que debe ser espejo. En este caso, nodo01 será master y nodo02 será espejo. Para ello, ejecutar en el master:
 #> drbdsetup /dev/drbd0 primary -o
Esto sincronizará el nodo espejo (nodo02)  con el master (nodo01). Se puede ver el estado de la sincronización en "/proc/drbd".

Ahora se puede crear un filesystem en el raid. Para ello, en cualquiera de los nodos, ejecutar:
#> mkfs.ext3 /dev/drbd0
El nuevo sistema de archivos en raid DRBD solo puede (debe) ser montado en un nodo a la vez. De lo contrario, y salvo que el sistema de archivos sea un cluster-filesystem, se corrompería. Por defecto, el filesystem solamente puede ser montado en el nodos principales (primary).
#> mount /dev/drbd1 /mnt/mountpoint

Administración básica
DRBD permite varios nodos principales (opción "allow-two-primaries" en /etc/drbd.conf), pero salvo que el filesystem que se cree encima de DRBD sea un sistema de archivos en cluster (vg.- OCFS2, GFS, etc...). Por lo tanto, y si hemos utilizado ext3 como en este caso, para montar el raid en el nodo espejo, previamente debemos hacer que sea primario (pasando el Master a secundario).

Montar el raid DRBD en el nodo espejo (nodo02):
   nodo01> umount /mnt/mountpoint
   nodo01> drbdsetup /dev/drbd0 secondary
   nodo02> drbdsetup /dev/drbd0 primary
   nodo02> mount /mnt/mountpoint

OJO!!. Ahora el nodo Maestro es "nodo02".