Taller de Almacenamiento - Creación de un cluster DRBD + OCFS2
Introducción
En este post vamos a ver cómo crear un cluster DRBD + OCFS2 para almacenar datos en un entorno de alta disponibilidad. Para ello, vamos a utilizar dos maquinas virtuales, a las que les vamos a añadir dos discos adicionales de 2GB para que la sincronización de los datos sea más rápida.
Creación de las máquinas virtuales
Para crear las máquinas virtuales, vamos a montarlas con Vagrant con el siguiente fichero:
Vagrant.configure("2") do |config|
config.vm.define :mac1 do |mac1|
mac1.vm.box = "debian/bullseye64"
mac1.vm.hostname = "mac1"
mac1.vm.synced_folder ".", "/vagrant", disabled: true
mac1.vm.network "private_network", ip: "10.0.0.20"
mac1.vm.provider :libvirt do |libvirt|
libvirt.storage :file, :size => '2G'
libvirt.storage :file, :size => '2G'
end
end
config.vm.define :mac2 do |mac2|
mac2.vm.box = "debian/bullseye64"
mac2.vm.hostname = "mac2"
mac2.vm.synced_folder ".", "/vagrant", disabled: true
mac2.vm.network "private_network", ip: "10.0.0.30"
mac2.vm.provider :libvirt do |libvirt|
libvirt.storage :file, :size => '2G'
libvirt.storage :file, :size => '2G'
end
end
end
Instalación
Para realizar este establecimiento, instalar el paquete DRBD:
apt install drbd-utils -y
Y para la implementación del sistema de ficheros, vamos a instalar OCFS2:
apt install ocfs2-tools -y
Creación de los recursos DRDB
Una vez realizada la instalación de ambos paquetes, vamos a configurar el DRBD. Para ello, vamos a editar el fichero /etc/drbd.d/wwwdata.res. Deberemos añadir los dos discos que hemos creado en las máquinas virtuales, y añadir la siguiente configuración:
resource wwwdata {
protocol C;
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
net {
allow-two-primaries;
}
on mac1 {
disk /dev/vdb;
address 10.0.0.20:7789;
}
on mac2 {
disk /dev/vdb;
address 10.0.0.30:7789;
}
}
Creado el fichero anterior, lo siguiente es crear el recurso en ambas máquinas:
drbdadm create-md wwwdata
Lo mismo que hemos hecho ahora lo haremos con el segundo recurso, que se llamará dbdata.res:
resource dbdata {
protocol C;
meta-disk internal;
device /dev/drbd2;
syncer {
verify-alg sha1;
}
net {
allow-two-primaries;
}
on mac1 {
disk /dev/vdc;
address 10.0.0.20:7790;
}
on mac2 {
disk /dev/vdc;
address 10.0.0.30:7790;
}
}
Creado el fichero anterior, lo siguientees crear el recurso en ambas máquinas:
drbdadm create-md dbdata
Configuración Single-Primary de wwwdata
Ahora vamos a configurar wwwdata en modo Single Primary. Para ello, los activamos con el comando drbdadm up wwwdata y miramos el estado en ambas máquinas:
Como podemos ver en las imágenes anteriores, ambos recursos están en modo Secondary/Secondary. Para cambiar esto, vamos a hacer que uno de los recursos sea primario, en este caso, wwwdata:
drbdadm primary --force wwwdata
Al pasar escaso tiempo, podemos ver que el estado del recurso pasará a UpToDate/UpToDate. Esto quiere decir están sincronizados.
El siguiente paso que deberíamos hacer es darle formato al recurso que acabamos de crear, de momento en la primera máquina:
apt install xfsprogs
mkfs.xfs /dev/drbd1
Lo montamos y creamos un fichero para comprobar su funcionamiento:
mount /dev/drbd1 /mnt
echo "Hola mundo" > /mnt/hola.txt
Si intentásemos montar el mismo recurso en la segunda máquina, no podríamos, ya que el recurso está en modo Secondary. Para poder montarlo, deberíamos desmontar el recurso, cambiar los roles y volver a montarlo pero en la segunda máquina:
- Error de montaje:
- Desmontaje del recurso en
mac1:
- Cambiamos los roles, ponemos la
mac1en modo secundaria y lamac2en modo primario:
#mac1
drbdadm secondary wwwdata
#mac2
drbdadm primary --force wwwdata
El mismo montaje que hemos realizado en la primera máquina, lo haremos en la segunda:
mount /dev/drbd1 /mnt
Y como podemos ver en la imagen anterior, el fichero que creamos en la primera máquina, podemos ver que sigue existiendo.
Configuración del recurso dbdata en modo Dual-Primary
Ahora vamos a configurar el recurso dbdata en modo Dual-Primary. Para ello, vamor a levantar el recurso en ambas máquinas.
drbdadm up dbdata
drbdadm status dbdata
Ya con el recurso levantado vamos a configurarlo en modo Dual-Primary. Para ello vamos a configurar el recurso en ambos nodos como primarios:
drbdadm primary --force dbdata
Para poder hacer que los dos recursos sean primarios, deberemos cambiar el sistema de ficheros por OCFS2. Pero, ¿qué es OCFS2?
Oracle Cluster File System (OCFS2) es un sistema de archivos de código abierto que se basa en el sistema de archivos de Linux. Es un sistema de archivos de cluster de alto rendimiento que se puede utilizar para crear un sistema de archivos distribuido en un cluster de Linux.
Una vez entendido esto, instalamos el paquete ocfs2-tools:
apt install ocfs2-tools
Creamos el cluster y añadimos los nodos a este mismo de la siguiente manera:
#Creación del cluster
o2cb add-cluster tclust
#Añadir nodos al cluster
o2cb add-node tclust mac1 --ip 10.0.0.20
o2cb add-node tclust mac2 --ip 10.0.0.30
Todo esto lo realizaremos en el mac1. Y como podemos ver en la imagen, el cluster se ha creado correctamente y los nodos están añadidos.
El contenido que vemos en esta imagen, será el contenido del mismo fichero en la máquina mac2 ya que hemos copiado el fichero de configuración del cluster de la máquina mac1 a la máquina mac2.
Ahora vamos a modificar el fichero /etc/default/o2cb en ambas máquinas de la siguiente manera:
# 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=tclust
# 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
Para que funciones de forma correcta, deberemos modificar el kernel con ciertos parámetros en ambas máquinas. Para eso, modificamos el fichero /etc/sysctl.conf:
kernel.panic = 30
kernel.panic_on_oops = 1
Aplicamos los cambios con un sysctl -p.
Para finalizar, ponemos en marcha el cluster en ambas máquinas:
o2cb register-cluster tclust
o2cb cluster-status tclust
Tras verificar que el estado de nuestro cluster es online, vamos a crear el sistema de ficheros OCFS2 en el recurso dbdata:
sudo mkfs.ocfs2 --cluster-stack=o2cb --cluster-name=tclust /dev/drbd2
Desde la mac2 podemos verificr que el sistema de ficheros OCFS2 se ha creado correctamente:
Una vez realizado el formateo del sistema de ficheros, montamos los nodos en el directorio /mnt:
mount /dev/drbd2 /mnt
Para comprobar que funciona correctamente, vamos a crear un fichero en mac1 y lo vamos a editar desde mac2. Tras ello, comprobamos los cambios en mac1:
- Creamos el fichero en
mac1:
echo "Hola mundo" > /mnt/hola.txt
- Comprobamos su contenido y lo editamos:
cat /mnt/hola.txt
echo "Hola mundo 2" > /mnt/hola.txt
- Comprobamos los cambios en
mac1:
cat /mnt/hola.txt