Hola a tod@s
En este post, exploraremos cómo configurar un iSCSI Target HA utilizado LINSTOR Gateway, una solución de alta disponibilidad que permite gestionar el almacenamiento distribuido de forma sencilla y eficiente. Este tutorial te guiará a través de cada paso del proceso, proporcionando todos los detalles necesarios para replicar la configuración en tu propio entorno.
¿Qué es LINSTOR?
LINSTOR es un sistema de gestión de almacenamiento que facilita la creación de volúmenes distribuidos sobre múltiples nodos. Es parte del ecosistema DRBD (Distributed Replicated Block Device) y está diseñado para simplificar la orquestación del almacenamiento de bloques en entornos altamente disponibles.
OS soportados
Actualmente LINSTOR Gateway soporta las siguientes distribuciones de Linux:
- Ubuntu 20.04 (Focal Fossa)
- Ubuntu 22.04 (Jammy Jellyfish)
- Red Hat Enterprise Linux 8.0 (y sus derivados)
- Red Hat Enterprise Linux 9.0 (y sus derivados)
Preparación
Para construir esta laboratorio usaré 3 máquinas virtuales con las siguientes características:
- 2 vCPU
- 4 GiB de RAM
- Un disco de 20 GiB para el sistema operativo
- Un disco de 50 GiB para el almacén de datos de alta disponibilidad
- Ubuntu 22.04
En cada máquina virtual agregaremos en el archivo /etc/hosts de cada servidor (Reemplazar con tus propios datos):
# nano /etc/hosts
10.10.10.42 Core01.witcherit.local Core01
10.10.10.43 Core02.witcherit.local Core02
10.10.10.44 Core03.witcherit.local Core03
Paso 1: Agregar LINBIT Repository
LINBIT publica paquetes no oficiales para usuarios de Ubuntu a través de repositorio PPA. Al ser paquetes no oficiales debemos tener en cuenta los riesgos que esto puede conllevar en un entorno de producción.
Agregamos el repositorio en nuestros 3 nodos con el siguiente comando con permisos de root:
# add-apt-repository -y ppa:linbit/linbit-drbd9-stack
# apt-get update
Ahora, necesitaremos instalar algunas dependencias que usaremos más adelante en los 3 nodos:
# apt -y install pacemaker-resource-agents targetcli-fb resource-agents-extra
apt -y install resource-agents targetcli-fb
Paso 2: Instalar DRBD
Pasaremos a instalar Distributed Replicated Block Device (DRBD), que es el requisito más fundamental para cada clúster de LINSTOR Gateway.
Lo primero será instalar el kernel module y user space utilities en todos los nodos con el siguiente comando:
# apt -y install drbd-dkms drbd-utils
Verificamos que el kernel module se instaló correctamente en cada nodo con los comandos:
# modprobe drbd
# cat /proc/drbd
Paso 3: Configuración de LINSTOR Cluster – Satélite
LINSTOR es otro requisito previo crucial para la implementación de un LINSTOR Gateway.
Un satélite es un nodo que puede alojar y replicar almacenamiento. En nuestro caso, los 3 nodos que tenemos se convertirán en satélites y así podrán gestionar el almacenamiento.
Ejecutamos el siguiente comando en todos los nodos para instalar el componente Satélite de LINSTOR:
# apt -y install linstor-satellite
Verificamos que el servicio se haya iniciado y habilitado correctamente en cada nodo con el comando:
# systemctl status linstor-satellite
Para que LINSTOR Gateway funcione, es necesario adaptar algunas de las opciones de configuración del Satélite.
En primer lugar, crearemos un directorio para los archivos de configuración de LINSTOR:
# mkdir -p /etc/linstor
A continuación, creamos el siguiente archivo en todos los nodos: /etc/linstor/linstor_satellite.toml
# nano /etc/linstor/linstor_satellite.toml
Pegamos el siguiente contenido:
[files]
allowExtFiles = [
“/etc/systemd/system”,
“/etc/systemd/system/linstor-satellite.service.d”,
“/etc/drbd-reactor.d”
]
Guardamos los cambios y verificamos con el siguiente comando:
# cat /etc/linstor/linstor_satellite.toml
Reiniciamos el servicio satélite LINSTOR para que los cambios de configuración surtan efecto. Esto lo realizamos en los 3 nodos.
# systemctl restart linstor-satellite
Paso 3: Configuración de nodo controller
Seleccionaremos uno de los 3 nodos que disponemos para configurar el rol de LINSTOR controller, donde ejecutaremos los siguientes comandos para asignar el rol de controller al nodo:
Para este laboratorio usaré como controller el nodo Core01.
# apt -y install linstor-controller
# systemctl enable –now linstor-controller
Para poder comunicarse con el nodo controlador necesitaremos instalar el LINSTOR Client en todos nodos con el comando:
# apt -y install linstor-client
Desde nuestro nodo controlador podemos probar que todo esté funcionando con el comando:
# linstor node list
No se mostrara nada, ya que aún no tenemos registrados los nodos, lo cual será nuestro siguiente paso.
Paso 4: Construcción del clúster
Ya con todos los pasos anteriores realizados podemos dar comienzo con la creación del clúster LINSTOR. El primer paso es hacer que LINSTOR conozca sus nodos satélite, empezando por el propio nodo controlador.
Para esto ejecutamos el siguiente comando en el nodo controlador:
# linstor node create Core01 10.10.10.42
Nota: reemplazamos el nombre del host (Core01) y la IP (10.10.10.42) por las que tengamos en nuestro entorno.
Ejecutamos el comando en el nodo controlador:
# linstor node create Core02 10.10.10.43
Nota: reemplazamos el nombre del host (Core02) y la IP (10.10.10.43) por las que tengamos en nuestro entorno.
Ejecutamos el comando en el nodo controlador:
# linstor node create Core03 10.10.10.44
Nota: reemplazamos el nombre del host (Core03) y la IP (10.10.10.44) por las que tengamos en nuestro entorno.
Ahora volvemos a ejecutar el comando:
# linstor node list
Ya deberíamos ver registrados nuestros 3 nodos visibles.
Paso 5: Creación de los grupos de almacenamiento
Ya con nuestro clúster creado, el siguiente paso será decirle a LINSTOR que almacenamiento administrará en cada nodo.
En esta demostración, en cada uno de los nodos tengo presentado dos discos de 50 GB para el almacenamiento de alta disponibilidad.
Verificamos los discos conectados con el siguiente comando:
# fdisk -l
Ejecutamos este comando en todos los equipos del clúster, sustituyendo la ruta real de los dispositivos de almacenamiento por: /dev/sdX
# vgcreate storage /dev/sdb /dev/sdc
Con este comando tenemos un volume group llamado “storage” en cada uno de los nodos. Lo siguiente, será indicarle a LINSTOR que utilice este volume group, y para esto ejecutamos el siguiente comando en el nodo controlador:
# linstor storage-pool create lvm Core01 gateway-storage storage
Con la ejecución de este comando creamos un storage pool llamado “gateway-storage” usando nuestros LVM volume group.
Ahora creamos el storage pool llamado “gateway-storage” en los dos nodos restantes, ejecutando los siguientes comandos en el nodo controlador:
# linstor storage-pool create lvm Core02 gateway-storage storage
# linstor storage-pool create lvm Core03 gateway-storage storage
Verificamos la configuración del storage pool con el siguiente comando en el nodo controlador:
# linstor storage-pool list
Ya podemos ver los pool configurados por cada uno de los nodos. Con estos pasos tenemos configurado nuestro clúster LINSTOR.
Paso 6: Instalación de DRBD Reactor
DRBD Reactor es un componente del ecosistema DRBD (Distributed Replicated Block Device) diseñado para mejorar la administración de recursos de alta disponibilidad y simplificar la gestión de eventos en clústeres DRBD.
Funciones y Características de DRBD Reactor
- Automatización de la Gestión de Recursos: DRBD Reactor está diseñado para automatizar la gestión de los recursos DRBD en respuesta a ciertos eventos del sistema. Estos eventos pueden incluir fallos de nodos, cambios en la red, o cualquier otro evento que afecte al estado del clúster.
- Módulos Personalizables (Handlers): DRBD Reactor utiliza módulos llamados “handlers” que son scripts o programas que responden a diferentes eventos. Estos handlers pueden ser personalizados para adaptarse a necesidades específicas, como la promoción de recursos de DRBD a un estado primario, la desactivación de recursos en caso de fallo, o la notificación a administradores del sistema sobre eventos críticos.
- Integración con Otros Sistemas de Alta Disponibilidad: Aunque DRBD Reactor puede funcionar de manera independiente, también puede integrarse con otros sistemas de alta disponibilidad como Pacemaker. Esto permite una mayor flexibilidad y control en entornos donde se requiere alta disponibilidad y replicación de datos.
- Monitoreo y Notificación: DRBD Reactor puede monitorear activamente el estado de los recursos DRBD y generar notificaciones o tomar acciones correctivas automáticamente cuando detecta un problema. Esto ayuda a minimizar el tiempo de inactividad y a asegurar que los datos replicados estén siempre disponibles.
- Configuración Basada en Archivos YAML: La configuración de DRBD Reactor se basa en archivos YAML, lo que facilita su configuración y personalización. Puedes definir reglas y acciones en respuesta a eventos específicos en un formato claro y estructurado.
Instalamos DRBD Reactor en todo los nodos con el siguiente comando:
# apt -y install drbd-reactor
Verificamos que el servicio se haya iniciado correctamente con el comando:
# systemctl status drbd-reactor
Para configurar DRBD Reactor y se recargue cuando cambiemos la configuración, debemos ejecutar el siguiente comando en todos los nodos:
# cp /usr/share/doc/drbd-reactor/examples/drbd-reactor-reload.{path,service} /etc/systemd/system/
# systemctl enable –now drbd-reactor-reload.path
Paso 7: Instalación de LINSTOR Gateway
LINSTOR Gateway gestiona los recursos de LINSTOR, así como los servicios de DRBD Reactor, lo que garantiza un acceso de alta disponibilidad al almacenamiento subyacente.
Para instalar LINSTOR Gateway, descargamos la última versión desde GitHub en el nodo controlador y le damos permisos de ejecución.
# wget -O /usr/sbin/linstor-gateway https://github.com/LINBIT/linstor-gateway/releases/latest/download/linstor-gateway-linux-amd64
# chmod +x /usr/sbin/linstor-gateway
Creamos el siguiente archivo: /etc/systemd/system/linstor-gateway.service el cual se ejecutará en segundo plano en el nodo controlador.
# nano /etc/systemd/system/linstor-gateway.service
Pegamos lo siguiente en el archivo y guardamos los cambios.
[Unit]
Description=LINSTOR Gateway
After=network.target
[Service]
ExecStart=/usr/sbin/linstor-gateway server –addr “:8080”
[Install]
WantedBy=multi-user.target
Luego, debemos iniciar y habilitar LINSTOR Gateway con el siguiente comando en el nodo controlador:
# systemctl daemon-reload
# systemctl enable –now linstor-gateway
Verificamos que todas las dependencias estén correctamente en línea, con el siguiente comando:
# linstor-gateway check-health
Nota: Los errores relacionados con NVMe-oF y NFS, podemos ignorarlos ya que solo estamos usando iSCSI para esta demostración.
Paso 8: Creación de un destino iSCSI
Ahora crearemos un iSCSI target de alta disponibilidad mediante LINSTOR Gateway.
Tendrá que elegir su propio nombre calificado iSCSI (IQN), así como una IP de servicio. La IP de servicio no debe estar ya en uso por otro equipo. Se asignará dinámicamente al nodo que aloje actualmente el destino iSCSI para que los iniciadores iSCSI puedan llegar al destino con una dirección coherente.
# linstor-gateway iscsi create iqn.2001-09.com.linbit:core01 10.10.10.45/24 25G
En este ejemplo, está creando un volumen de 50 GB.
El siguiente comando nos mostrara la lista de iSCSI target y en qué nodo se está ejecutando el servicio:
# linstor-gateway iscsi list
Con estos simples paso tenemos un iSCSI Target HA utilizando LINSTOR Gateway para presentar almacenamiento a nuestros servidores. La ventaja de esta configuración es si se produce un error en el nodo que aloja el ISCSI Target, el servicio migra automáticamente a otro nodo del clúster y el destino sigue siendo accesible.
Espero que esta información pueda ser de ayuda, y cualquier duda o sugerencia la dejan en los comentarios. Saludos.