Instalación Drbd + Ocfs2 en Debian 12

drbd-ocfs2

¿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.