Almacenamiento LINSTO y su integración con OpenNebula

Almacenamiento LINSTO y su integración con OpenNebula

No hace mucho tiempo, los chicos de LINBIT presentaron su nueva solución SDS: Linstor. Este es un almacenamiento completamente gratuito basado en tecnologías probadas: DRBD, LVM, ZFS. Linstor combina simplicidad y arquitectura bien diseñada, lo que le permite lograr estabilidad y resultados bastante impresionantes.

Hoy me gustaría hablar un poco más al respecto y mostrar lo fácil que se puede integrar con OpenNebula usando linstor_un, un nuevo controlador que desarrollé específicamente para este propósito.

Linstor en combinación con OpenNebula le permite crear una nube rápida y confiable que se puede implementar fácilmente en su propia infraestructura.

arquitectura linstor

Linstor no es un sistema de archivos ni almacenamiento de bloques en sí mismo, Linstor es un orquestador que proporciona una capa de abstracción para automatizar la creación de volúmenes en LVM o ZFS y replicarlos usando DRBD9.

Rompiendo estereotipos

Pero espera, ¿DRBD? - ¿Por qué automatizarlo y cómo puede funcionar?

Recordemos el pasado cuando DRBD8 era muy popular. Su uso estándar significaba crear un dispositivo de bloque grande y cortarlo en muchos pedazos pequeños, usando el mismo LVM. Una especie de mdadm RAID-1 pero con replicación en red.

Este enfoque no está exento de inconvenientes y, por lo tanto, con la llegada de DRBD9, los principios de construcción de almacenamiento han cambiado, ahora se crea un dispositivo DRBD separado para cada máquina virtual.

El enfoque de dispositivo de bloque independiente permite una mejor utilización del espacio en el clúster y también agrega una serie de características adicionales. Por ejemplo, para cada dispositivo de este tipo, puede determinar la cantidad de réplicas, su ubicación y la configuración individual. Son fáciles de crear/eliminar, tomar instantáneas, cambiar el tamaño, habilitar el cifrado y más. Vale la pena señalar que DRBD9 también mantiene un quórum, lo que evita situaciones de cerebro dividido.

Recursos y backends

Al crear un nuevo dispositivo de bloques, Linstor coloca la cantidad necesaria de réplicas en diferentes nodos del clúster. Llamaremos a cada una de estas réplicas un recurso DRBD.

Los recursos son de dos tipos:

  • recurso de datos - representar un dispositivo DRBD ubicado en un nodo en un grupo LVM o ZFS.
    Actualmente hay soporte para varios backends y su número crece constantemente. Hay soporte para LVM, ThinLVM y ZFS. Los dos últimos le permiten crear y utilizar instantáneas.
  • Recurso sin disco - es un dispositivo DRBD alojado en un nodo sin backend, pero al permitir que se trate como un dispositivo de bloque normal, todas las operaciones de lectura/escritura se redirigirán a los recursos de datos. El análogo más cercano a los recursos sin disco es iSCSI LUN.

Cada recurso DRBD puede tener hasta 8 réplicas y solo una de ellas puede estar activa de forma predeterminada: Primaria, todo lo demás será Secundaria y su uso será imposible mientras exista al menos un Primario, es decir, simplemente replicarán datos entre ellos.

Al montar un dispositivo DRBD en el sistema, automáticamente se vuelve Primaria, por lo tanto, incluso un recurso sin disco, en terminología DRBD, puede ser primario.

Entonces, ¿por qué necesitamos a Linstor?

Al confiar todas las tareas intensivas en recursos al kernel, Linstor es esencialmente una aplicación Java regular que le permite automatizar fácilmente la creación de recursos DRBD.
Al mismo tiempo, cada recurso creado por él será un clúster DRBD independiente que funcionará de forma independiente, independientemente del estado del plano de control y otros recursos DRBD.

Linstor consta de solo dos componentes:

  • controlador Linstor - El controlador principal, que proporciona una API para crear y administrar recursos. También se comunica con los satélites, verifica el espacio libre en ellos y envía trabajos para crear y eliminar nuevos recursos. Se ejecuta en una única instancia y utiliza una base de datos que puede ser interna (H2) o externa (PostgreSQL, MySQL, MariaDB)
  • linstor-satélite - Instalado en todos los nodos de almacenamiento y proporciona al controlador información sobre el espacio libre, y también realiza tareas recibidas del controlador para crear y eliminar nuevos volúmenes y dispositivos DRBD encima de ellos.

Linstor opera con los siguientes conceptos clave:

  • Nodo — un servidor físico en el que se crearán y utilizarán los recursos DRBD.
  • Grupo de almacenamiento - Grupo LVM o ZFS creado en el nodo en el que se colocarán los recursos DRBD. También es posible un grupo sin disco: este es un grupo en el que solo se colocarán recursos sin disco.
  • Definición de recursos - Definición de un recurso, de hecho es un prototipo que describe el nombre y todas sus propiedades.
  • definición de volumen — Definición de volumen. Cada recurso puede constar de varios volúmenes, cada volumen debe tener un tamaño.
  • Recurso - Creada una instancia de un dispositivo de bloque, cada recurso debe colocarse en un nodo específico y en algún pool de almacenamiento.

Instalación de Linstor

Recomiendo usar Ubuntu como sistema, porque. existe para ella PPA listo para usar:

add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update

O Debian, donde se puede instalar Linstor desde el repositorio oficial de Proxmox:

wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add -
PVERS=5 && echo "deb http://packages.linbit.com/proxmox/ proxmox-$PVERS drbd-9.0" > 
    /etc/apt/sources.list.d/linbit.list
apt-get update

Control

Aquí todo es simple:

apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller

Nodos de almacenamiento

El kernel de Linux actualmente se envía con un módulo de kernel en árbol DRBD8, desafortunadamente no nos conviene y necesitamos instalar DRBD9:

apt-get install drbd-dkms

Como muestra la práctica, la mayoría de las dificultades surgen precisamente por el hecho de que el módulo DRBD8 está cargado en el sistema, y ​​no DRBD9. Afortunadamente, esto es fácil de verificar ejecutando:

modprobe drbd
cat /proc/drbd

Si tú ves Versión: 9 - todo está bien si Versión: 8 - significa que algo salió mal y debe tomar medidas adicionales para averiguar los motivos.

Ahora vamos a instalar linstor-satélite и drbd-utils:

apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite

Crear un clúster

Grupos de almacenamiento y nodos

Como backend tomaremos ThinLVM, porque es el más simple y admite instantáneas.
Establecer lvm2, si aún no lo ha hecho, y creemos un grupo ThinLVM en todos nuestros nodos de almacenamiento:

sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool

Todas las demás acciones se pueden realizar directamente en el controlador:

Agreguemos nuestros nodos:

linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13

Vamos a crear grupos de almacenamiento:

linstor storage-pool create lvmthin node1 data drbdpool/thinpool
linstor storage-pool create lvmthin node2 data drbdpool/thinpool
linstor storage-pool create lvmthin node3 data drbdpool/thinpool

Ahora vamos a comprobar los grupos creados:

linstor storage-pool list

Si todo se hace correctamente, entonces deberíamos ver algo como:

+---------------------------------------------------------------------------------------------------------------------+ | Piscina de almacenamiento | nodo | conductor | nombre del grupo | librecapacidad | capacidadtotal | Admite instantáneas | |----------------------------------------------------------------------------------------------------------------------------------------| | datos | nodo1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | cierto | | datos | nodo2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | cierto | | datos | nodo3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | cierto | +-----------------------------------------------------------------------------------------------------------------------------------+

Recursos DRBD

Ahora intentemos crear nuestro nuevo recurso DRBD:

linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2

Revisemos los recursos creados:

linstor resource list 

+-----------------------------------------------------------------------------------------------------------------------+ | nodo | recurso | Piscina de almacenamiento | VolumeNr | MinorNr | Nombre del dispositivo | Asignado | en uso | estado | |----------------------------------------------------------------------------------------------------------------------------------------| | nodo1 | mires | datos | 0 | 1084 | /dev/drbd1084 | 52 KiB | sin usar | Actualizado | | nodo2 | mires | datos | 0 | 1084 | /dev/drbd1084 | 52 KiB | sin usar | Actualizado | +----------------------------------------------------------------------------------------------------------------------------------+

¡Excelente! - vemos que el recurso se creó en los dos primeros nodos, también podemos intentar crear un recurso sin disco en el tercero:

linstor resource create --diskless node3 myres

En los nodos siempre encontrará este dispositivo como /dev/drbd1084 o /dev/drbd/by-res/myres/0

Así funciona Linstor, puedes obtener más información en documentación oficial.

Ahora hablaré de cómo integrarlo con OpenNebula

Configuración de OpenNebula

No profundizaré demasiado en el proceso de configuración de OpenNebula, porque Todos los pasos están detallados en documentación oficial, que te recomiendo consultar, solo hablaré de la integración de OpenNebula con Linstor.

linstor_un

Para resolver este problema, escribí mi propio controlador: linstor_un, actualmente está disponible como complemento y debe instalarse por separado.

Toda la instalación se realiza en los nodos de OpenNebula frontend y no requiere acciones adicionales en los nodos de cómputo.

En primer lugar, tenemos que asegurarnos de que tenemos jq и linstor-cliente:

apt-get install jq linstor-client

Equipo linstor node list debe mostrar una lista de nodos. Todos los nodos de cómputo de OpenNebula deben agregarse al clúster de Linstor.

Descargue e instale el complemento:

curl -L https://github.com/OpenNebula/addon-linstor_un/archive/master.tar.gz | tar -xzvf - -C /tmp

mv /tmp/addon-linstor_un-master/vmm/kvm/* /var/lib/one/remotes/vmm/kvm/

mkdir -p /var/lib/one/remotes/etc/datastore/linstor_un
mv /tmp/addon-linstor_un-master/datastore/linstor_un/linstor_un.conf /var/lib/one/remotes/etc/datastore/linstor_un/linstor_un.conf

mv /tmp/addon-linstor_un-master/datastore/linstor_un /var/lib/one/remotes/datastore/linstor_un
mv /tmp/addon-linstor_un-master/tm/linstor_un /var/lib/one/remotes/tm/linstor_un

rm -rf /tmp/addon-linstor_un-master

Ahora necesitamos agregarlo a la configuración de OpenNebula, para esto seguimos los sencillos pasos descritos aquí.

Luego reinicie OpenNebula:

systemctl restart opennebula

Y agregue nuestros almacenes de datos, sistema:

cat > system-ds.conf <<EOT
NAME="linstor-system"
TYPE="SYSTEM_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
CLONE_MODE="snapshot"
CHECKPOINT_AUTO_PLACE="1"
BRIDGE_LIST="node1 node2 node3"
TM_MAD="linstor_un"
EOT

onedatastore create system-ds.conf

Y la tienda de imágenes:

cat > images-ds.conf <<EOT
NAME="linstor-images"
TYPE="IMAGE_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
BRIDGE_LIST="node1 node2 node3"
DISK_TYPE="BLOCK"
DS_MAD="linstor_un"
TM_MAD="linstor_un"
EOT

onedatastore create images-ds.conf

  • Parámetro AUTO_PLACE muestra el número de réplicas de datos que se crearán para cada nueva imagen en OpenNebula.
  • Parámetro CLONE_MODE indica exactamente cómo se clonarán las imágenes al crear nuevas máquinas virtuales, snapshot - creará una instantánea de la imagen e implementará una máquina virtual a partir de la instantánea, copy - hará una copia completa de la imagen para cada máquina virtual.
  • В BRIDGE_LIST se recomienda especificar todos los nodos que se utilizarán para realizar operaciones de clonación de imágenes.

Para obtener una lista completa de las opciones admitidas, consulte README proyecto.

Esto completa la configuración, ahora puede descargar algún dispositivo del oficial Mercado OpenNebula y crear máquinas virtuales a partir de él.

Enlace del proyecto:
https://github.com/OpenNebula/addon-linstor_un

Fuente: habr.com

Añadir un comentario