Instalación Drbd + Ocfs2 en Debian 12
¿Que son drbd y ocfs2?
DRBD es un sistema de almacenamiento de bloques distribuidos que se utiliza para replicar el almacenamiento de bloques de un nodo a otro.
OCFS2 es un sistema de archivos de clúster de alto rendimiento.
Requisitos
- Sistema Debian 12 actualizado.
- Privilegios de root o sudo.
- Acceso a internet.
Instalacion de drbd
Para instalar drbd tenemos que ejecutar el siguiente comando en los dos nodos:
root@drbd-ocfs2-1:~# apt install drbd-utils -y
Configuracion de drbd
Para configurar drbd que crearemos un recurso que sincronizara los datos entre los dos nodos, para creamos un archivo de configuracion en los dos nodos que en mi caso se llamara data.res.
root@drbd-ocfs2-1:~# nano /etc/drbd.d/data.res
resource data {
protocol C;
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
net {
allow-two-primaries;
}
on drbd-ocfs2-1 {
disk /dev/vdb;
address 192.168.50.45:7789;
}
on drbd-ocfs2-2 {
disk /dev/vdb;
address 192.168.50.30:7789;
}
}
- resource: Nombre del recurso.
- protocol: indica el protocolo de comunicación que se utilizará para la sincronización de datos.
- meta-disk: indica donde se almacenara la información de metadatos.
- device: indica el nombre del dispositivo que se creara.
- on: indica el nombre exacto del nodo.
- disk: indica el dispositivo que se utilizara para la sincronización.
- address: indica la dirección ip y el puerto que se utilizara para la sincronización.
Una vez que tengamos el archivo de configuración creado en los dos nodos, tenemos que ejecutar los siguientes comandos en los dos nodos:
root@drbd-ocfs2-1:~# drbdadm create-md data
root@drbd-ocfs2-1:~# drbdadm up data
Establecemos el nodo 1 como primario y el nodo 2 como secundario.
root@drbd-ocfs2-1:~# drbdadm primary --force data
root@drbd-ocfs2-2:~# drbdadm secondary data
Para ver el estado de la sincronización ejecutamos el siguiente comandoen el nodo1:
Podemos ver como el nodo 1 esta sincronizando los datos con el nodo 2.
root@drbd-ocfs2-1:~# drbdadm status data
data role:Primary
disk:UpToDate
peer role:Secondary
replication:SyncSource peer-disk:Inconsistent done:5.89
Tambien podemos ver que el nodo aun no esta sincronizado (Inconsistent). Cuando la sincronización termine el estado sera UpToDate.
root@drbd-ocfs2-1:~# drbdadm status data
data role:Primary
disk:UpToDate
peer role:Secondary
replication:Established peer-disk:UpToDate
Con esto ya tendremos drbd configurado y sincronizado. Ahora solo faltaría formatear el dispositivo con un sistema de archivos como ext4, zfs …
Pero en este no dejaremos un nodo como primario y otro como secundario. Lo que haremos es establecer los dos nodos como primarios para que los dos nodos puedan escribir en el dispositivo. Para que esto funcione y no resulte en una corrupción de datos, tenemos que utilizar un sistema de archivos de clúster como ocfs2.
Instalacion de ocfs2
Antes de comenzar con la instalación de ocfs2 tenemos que establecer los dos nodos como primarios.
root@drbd-ocfs2-1:~# drbdadm primary --force data
root@drbd-ocfs2-2:~# drbdadm primary --force data
Ahora si podemos instalar ocfs2 en los dos nodos con el siguiente comando:
root@drbd-ocfs2-1:~# apt install ocfs2-tools -y
Configuracion de ocfs2
Creamos la definición del cluster en los dos nodos.
root@drbd-ocfs2-1:~# o2cb add-cluster ocfscluster
root@drbd-ocfs2-1:~# o2cb add-node ocfscluster drbd-ocfs2-1 --ip 192.168.50.45
root@drbd-ocfs2-1:~# o2cb add-node ocfscluster drbd-ocfs2-2 --ip 192.168.50.30
Podemos ver la configuración del cluster en el siguiente fichero.
root@drbd-ocfs2-1:~# cat /etc/ocfs2/cluster.conf
cluster:
name = ocfscluster
heartbeat_mode = local
node_count = 2
node:
cluster = ocfscluster
number = 0
ip_port = 7777
ip_address = 192.168.50.45
name = server1
node:
cluster = ocfscluster
number = 1
ip_port = 7777
ip_address = 192.168.50.30
name = server2
Tamien tenemos es otro fichero que tendremos que adaptar a nuestro escenario en /etc/default/o2cb.
root@drbd-ocfs2-1:~# nano /etc/default/o2cb
#
# This is a configuration file for automatic startup of the O2CB
# driver. It is generated by running 'dpkg-reconfigure ocfs2-tools'.
# Please use that method to modify this file.
#
# O2CB_ENABLED: 'true' means to load the driver on boot.
O2CB_ENABLED=true
# O2CB_BOOTCLUSTER: If not empty, the name of a cluster to start.
O2CB_BOOTCLUSTER=ocfscluster
# O2CB_HEARTBEAT_THRESHOLD: Iterations before a node is considered dead.
O2CB_HEARTBEAT_THRESHOLD=31
# O2CB_IDLE_TIMEOUT_MS: Time in ms before a network connection is considered dead.
O2CB_IDLE_TIMEOUT_MS=30000
# O2CB_KEEPALIVE_DELAY_MS: Max. time in ms before a keepalive packet is sent.
O2CB_KEEPALIVE_DELAY_MS=2000
# O2CB_RECONNECT_DELAY_MS: Min. time in ms between connection attempts.
O2CB_RECONNECT_DELAY_MS=2000
Una vez que tengamos la configuración del cluster creada en los dos nodos, tenemos que habilitar los servicios de ocfs2 y o2cb en los dos nodos.
root@drbd-ocfs2-1:~# systemctl enable o2cb
root@drbd-ocfs2-1:~# systemctl enable ocfs2
Registramos el cluster en los dos nodos.
root@drbd-ocfs2-1:~# o2cb register-cluster ocfscluster
Ahora tenemos que iniciar el cluster en ambos nodos.
```bash
root@drbd-ocfs2-1:~# systemctl start o2cb
Para que el cluster funcione correctamente tenemos que hacer algunas modificaciones en el fichero /etc/sysctl.conf de ambos nodos.
```bash
root@drbd-ocfs2-1:~# nano /etc/sysctl.conf
kernel.panic = 30
kernel.panic_on_oops = 1
Aplicamos los cambios.
root@drbd-ocfs2-1:~# sysctl -p
Ahora ya podemos dar formato al recurso drbd con ocfs2. Ejecutamos el siguiente comando en el nodo 1.
root@drbd-ocfs2-1:~# mkfs.ocfs2 --cluster-size 8K -J size=32M -T mail --node-slots 2 --label ocfs2_fs --mount cluster --fs-feature-level=max-features --cluster-stack=o2cb --cluster-name=ocfscluster /dev/drbd1
cluster.
Ya podemos montar el sistema de archivos en los dos nodos.
root@drbd-ocfs2-1:~# mount /dev/drbd1 /mnt
Si utilizamos el siguiente comando podemos ver que aparece el sistema de recursos drbd montado.
root@drbd-ocfs2-1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 738M 0 rom
vda 254:0 0 9G 0 disk
├─vda1 254:1 0 8G 0 part /
├─vda2 254:2 0 1K 0 part
└─vda5 254:5 0 975M 0 part [SWAP]
vdb 254:16 0 2G 0 disk
└─drbd1 147:1 0 2G 0 disk /mnt
Comprobacion de ocfs2
Para comprobar que ocfs2 funciona correctamente, vamos a crear un fichero en el nodo 1 y comprobaremos que se sincroniza en el nodo 2.
root@drbd-ocfs2-1:~# echo "Hola Mundo" > /mnt/hola.txt
nodo1
root@drbd-ocfs2-1:~# cat /mnt/hola.txt
Hola Mundo
nodo2
root@drbd-ocfs2-2:~# cat /mnt/hola.txt
Hola Mundo
Para probar que comprobar que realmente los dos nodos pueden escribir en el dispositivo al mismo tiempo, vamos a ejecutar los siguientes comandos en los dos nodos.
nodo1
root@drbd-ocfs2-1:~# for ((;;)) do date >> /mnt/fecha_nodo1.txt;sleep 1; done
nodo2
root@drbd-ocfs2-2:~# for ((;;)) do date >> /mnt/fecha_nodo2.txt;sleep 1; done
Ahora sin cancelar la ejecución de los comandos, abrirmos otra terminal en los dos nodos y ejecutamos los siguientes comandos.
nodo1
root@drbd-ocfs2-1:~# tail -f /mnt/fecha_nodo1.txt
mar 05 dic 2023 17:22:32 CET
mar 05 dic 2023 17:22:33 CET
mar 05 dic 2023 17:22:34 CET
mar 05 dic 2023 17:22:35 CET
mar 05 dic 2023 17:22:36 CET
mar 05 dic 2023 17:22:37 CET
mar 05 dic 2023 17:22:38 CET
mar 05 dic 2023 17:22:39 CET
mar 05 dic 2023 17:22:40 CET
mar 05 dic 2023 17:22:41 CET
mar 05 dic 2023 17:22:42 CET
mar 05 dic 2023 17:22:43 CET
mar 05 dic 2023 17:22:44 CET
mar 05 dic 2023 17:22:45 CET
mar 05 dic 2023 17:22:46 CET
nodo2
root@drbd-ocfs2-2:~# tail -f /mnt/fecha_nodo2.txt
mar 05 dic 2023 17:22:32 CET
mar 05 dic 2023 17:22:33 CET
mar 05 dic 2023 17:22:34 CET
mar 05 dic 2023 17:22:35 CET
mar 05 dic 2023 17:22:36 CET
mar 05 dic 2023 17:22:37 CET
mar 05 dic 2023 17:22:38 CET
mar 05 dic 2023 17:22:39 CET
mar 05 dic 2023 17:22:40 CET
mar 05 dic 2023 17:22:41 CET
mar 05 dic 2023 17:22:42 CET
mar 05 dic 2023 17:22:43 CET
mar 05 dic 2023 17:22:44 CET
mar 05 dic 2023 17:22:45 CET
mar 05 dic 2023 17:22:46 CET
mar 05 dic 2023 17:22:47 CET
mar 05 dic 2023 17:22:48 CET
mar 05 dic 2023 17:22:49 CET
mar 05 dic 2023 17:22:50 CET
Como podemos ver los dos nodos pueden escribir en el dispositivo al mismo tiempo sin que se produzca una corrupción de datos.
Con esto ya tendriamos drbd y ocfs2 instalado y configurado en Debian 12.