Instalando DRBD

Bienvenidos aventureros. En este post vamos a aprender a instalar DRBD. . En cada nodo tendremos un disco vacio y completamente dedicado a DRBD, por lo tanto usaremos este disco /dev/vda

Que es DRBD (Distributed Replicated Block Device)?

DRBD es un software que permite hacer replica de los datos de una particion o disco entre varias maquinas a traves de la red.

Empecemos

Entorno

Nodo1 drbd1 192.168.10.10 CentOS 7
Nodo2 drbd2 192.168.10.11 CentOS 7

Instalando

Para comenzar con la instalación lo primero que haremos sera ir a una terminal de linux. 1 - Ejecutaremos los siguientes comandos para agregar el repositorio ELRepo en ambos nodos:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

2 - Luego ejecutamos lo siguiente para instalar DRBD y los modulos del kernel necesarios para el funcionamiento de DRBD:

yum install drbd90-utils kmod-drbd90

Cuando finalice la instalación comprobaremos si el modulo del kernel fue cargado:

lsmod | grep -i drbd

Si no fue cargado automáticamente entonces ejecutamos:

modprobe drbd

Nota

El comando modprobe cargara el modulo durante la sesión activa, para que el modulo se cargue en el inicio hay que utilizar el servicio systemd-modules-load creando un archivo dentro de /etc/modulesload.d/ y de esta manera el modulo es cargado durante cada inicio del sistema.

echo drbd > /etc/modules-load.d/drbd.conf

Configurando DRBD

Luego de instalar DRBD de forma correcta lo que haremos sera cambiar la configuración global editando el archivo /etc/drbd.d/global_common.conf 1 - Vamos a hacer un backup del archivo original:

mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.orig

2 - Creamos un nuevo archivo de configuración global:

vi /etc/drbd.d/global_common.conf
global {
 usage-count no;
}
common {
 net {
  protocol C;
 }
}

3 - Lo siguiente sera crear un archivo de configuración para el recurso drbd0:

vi /etc/drbd.d/drbd0.res
resource drbd0 {
	disk /dev/vda;
	device /dev/drbd0;
	meta-disk internal;
	on drbd1 {
		address 192.168.10.10:7789;
	}
	on drbd2 {
		address 192.168.10.11:7789;
	}
}

Nota

En el archivo de recurso de arriba hemos creado un nuevo recurso llamado drbd0, donde 192.168.10.10 y 192.168.10.11 son las IP de nuestros nodos y 7789 el puerto utilizado para la comunicación, usando el disco /dev/vda para crear el dispositivo /dev/drbd0.

4 - Inicializar el dispositivo drbd0 en cada nodo:

drbdadm create-md drbd0

5 - Iniciar y habilitar el demonio drbd en ambos nodos:

systemctl start drbd
systemctl enable drbd

6 - Levantamos DRBD en ambos nodos y definimos el Nodo1 como nodo primario:

drbdadm up drbd0
drbdadm primary drbd0

Nota

En caso de tener algún error para definir el nodo como primaro ejecutamos el mismo comando pero con el parámetro –force para forzar esta opcion.

drbdadm primary drbd --force

7 - Para chequear el estado de la sincronización mientras se ejecuta utilizamos el siguiente comando:

drbdadm status

8 - Ajustes de firewall en ambos nodos:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="ip_nodo" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

Testeando DRBD

Para testear DRBD crearemos un filesystem, montaremos el volumen y crearemos archivos en el nodo primario drbd1, finalmente cambiaremos el nodo primario a drbd2 y comprobaremos que DRBD funciona. Con el siguiente comando crearemos un filesystem xfs en /dev/drbd0 y lo montaremos en /mnt/

mkfs.xfs /dev/drbd0
mount /dev/drbd0 /mnt

Crearemos archivos con

touch /mnt/file{1..5}
ls -l /mnt/
total 0
-rw-r--r--. 1 root root 0 Sep 22 21:43 file1
-rw-r--r--. 1 root root 0 Sep 22 21:43 file2
-rw-r--r--. 1 root root 0 Sep 22 21:43 file3
-rw-r--r--. 1 root root 0 Sep 22 21:43 file4
-rw-r--r--. 1 root root 0 Sep 22 21:43 file5

Ahora cambiaremos el nodo primario de drbd1 a drbd2 Primero desmontamos el volumen drbd0

umount /mnt

Cambiamos el Nodo1 de primario a secundario

drbdadm secondary drbd0

Ahora cambiamos el Nodo2 de secundario a primario

drbdadm primary drbd0

Montamos el filesystem y comprobamos que tenga los archivos dentro

mount /dev/drbd0 /mnt
ls -l  /mnt
total 0
-rw-r--r--. 1 root root 0 Sep 22 21:43 file1
-rw-r--r--. 1 root root 0 Sep 22 21:43 file2
-rw-r--r--. 1 root root 0 Sep 22 21:43 file3
-rw-r--r--. 1 root root 0 Sep 22 21:43 file4
-rw-r--r--. 1 root root 0 Sep 22 21:43 file5