El repositorio de LINSTOR 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 una arquitectura bien diseñada, que permite estabilidad y resultados impresionantes.


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


Linstor en combinación con OpenNebula le permite construir 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 un repositorio de bloques per se; Linstor es un orquestador que proporciona una capa de abstracción que automatiza la creación de volúmenes en LVM o ZFS y los replica usando DRBD9.


Rompiendo estereotipos

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


Recordemos el pasado cuando DRBD8 era popular en todo momento. Su uso estándar implicaba la creación de un dispositivo de bloque grande y cortarlo en muchas piezas pequeñas, utilizando el mismo LVM. Una especie de mdadm RAID-1 pero con replicación a través de la red.


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


El enfoque con dispositivos de bloque independientes le permite utilizar mejor el espacio en el clúster y también agrega una serie de características adicionales. Por ejemplo, para cada dispositivo, puede determinar el número de réplicas, su ubicación y configuraciones individuales. Son fáciles de crear / eliminar, hacer instantáneas, cambiar el tamaño, habilitar el cifrado y mucho más. Vale la pena señalar que DRBD9 también admite quórum, lo que evita situaciones de cerebro dividido.


Recursos y backends

Al crear un nuevo dispositivo de bloque, Linstor coloca el número requerido de réplicas en diferentes nodos del clúster. Llamaremos a cada réplica de este tipo un recurso DRBD.


Los recursos son de dos tipos:


  • Recurso de datos : es un dispositivo DRBD ubicado en un nodo en un grupo LVM o ZFS.
    En este momento hay soporte para varios backends y su número está en constante crecimiento. Hay soporte para LVM, ThinLVM y ZFS. Los dos últimos le permiten crear y usar instantáneas.
  • Diskless-resource : es un dispositivo DRBD ubicado en un nodo sin backend, pero que permite tratarlo como un dispositivo de bloque normal, todas las operaciones de lectura / escritura serán redirigidas a recursos de datos. El equivalente más cercano a los recursos sin disco es el iSCSI LUN.

Cada recurso DRBD puede tener hasta 8 réplicas, y solo una de ellas puede estar activa por defecto: primaria , el resto será secundaria y su uso será imposible hasta que haya al menos una primaria, es decir, simplemente se replicarán datos entre ustedes.


Al montar un dispositivo DRBD en el sistema, se convierte automáticamente en Primario , por lo que incluso un recurso sin Disco, en terminología DRBD, puede ser Primario.


Entonces, ¿por qué necesitamos Linstor?

Confiando todas las tareas intensivas en recursos en el núcleo, Linstor es esencialmente una aplicación Java normal que facilita la automatización de la creación de recursos DRBD.
Además, cada recurso creado por él será un clúster DRBD independiente que funciona 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, verificando el espacio libre en ellos, y envía tareas para crear y eliminar nuevos recursos. Se ejecuta en una sola instancia y utiliza una base de datos, que puede ser interna (H2) o externa (PostgreSQL, MySQL, MariaDB)
  • Satélite de Linstor : se instala 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:


  • Node es un servidor físico en el que se crearán y utilizarán recursos DRBD.
  • Agrupación de almacenamiento : agrupación LVM o ZFS creada en un 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 alojarán los recursos sin disco.
  • Definición de recurso : una definición de recurso es esencialmente 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 : una instancia creada de un dispositivo de bloque, cada recurso debe ubicarse en un nodo específico y en algún grupo de almacenamiento.

Instalar Linstor


Recomiendo usar Ubuntu como sistema, como Hay un PPA listo para ello:


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 

Controlador

Aquí todo es simple:


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

Nodos de almacenamiento

Actualmente, el módulo del kernel DRBD8 en el árbol se suministra en el kernel de Linux, 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 porque el módulo DRBD8 está cargado en el sistema, y ​​no DRBD9. Afortunadamente, esto es fácil de verificar haciendo:


 modprobe drbd cat /proc/drbd 

Si ve la versión: 9 - entonces todo está bien, si la versión: 8 - entonces algo salió mal y necesita tomar medidas adicionales para averiguar las razones.


Ahora instale linstor-satellite y drbd-utils :


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

Creación de clúster


Grupos de almacenamiento y nodos


Tomaremos ThinLVM como backend , como Es el más simple y admite instantáneas.
Instale 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 acciones adicionales se pueden realizar directamente en el controlador:


Agregue 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 

Crear agrupaciones 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 verifique los grupos creados:


 linstor storage-pool list 

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


  + ------------------------------------------------- -------------------------------------------------- ---- +
 El |  StoragePool |  Nodo |  Conductor |  PoolName |  FreeCapacity |  TotalCapacity |  Soporta Instantáneas |
 | ------------------------------------------------- -------------------------------------------------- ---- |
 El |  datos |  nodo1 |  LVM_THIN |  drbdpool / thinpool |  64 GiB |  64 GiB |  cierto |
 El |  datos |  nodo2 |  LVM_THIN |  drbdpool / thinpool |  64 GiB |  64 GiB |  cierto |
 El |  datos |  nodo3 |  LVM_THIN |  drbdpool / thinpool |  64 GiB |  64 GiB |  cierto |
 + ------------------------------------------------- -------------------------------------------------- ---- + 

Recursos de 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 

Veamos los recursos creados:


 linstor volume list 

  + ------------------------------------------------- -------------------------------------------------- --- +
 El |  Nodo |  Recurso |  StoragePool |  VolumenNr |  MenorNr |  DeviceName |  Asignado |  InUse |  Estado |
 | ------------------------------------------------- -------------------------------------------------- --- |
 El |  nodo1 |  myres |  datos |  0 |  1084  / dev / drbd1084 |  52 KiB |  Sin usar |  UpToDate |
 El |  nodo2 |  myres |  datos |  0 |  1084  / dev / drbd1084 |  52 KiB |  Sin usar |  UpToDate |
 + ------------------------------------------------- -------------------------------------------------- --- + 

Genial - 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í es como funciona Linstor, puede obtener más información de la documentación oficial .


Ahora hablaré sobre cómo integrarlo con OpenNebula


Configurar OpenNebula


No profundizaré en el proceso de configuración de OpenNebula, ya que Todos los pasos se describen en detalle en la documentación oficial , a la que le recomiendo que recurra, solo le contaré sobre la integración de OpenNebula con Linstor.


linstor_un

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


Toda la instalación se lleva a cabo en los nodos frontales OpenNebula y no requiere acciones adicionales en los nodos de cómputo.


En primer lugar, debemos asegurarnos de que tenemos jq y linstor-client :


 apt-get install jq linstor-client 

El linstor node list debería enumerar los nodos. Todos los nodos de proceso 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 realizamos los pasos simples descritos aquí .


Luego reinicie OpenNebula:


 systemctl restart opennebula 

Y agregue nuestro sistema de almacenes de datos:


 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 almacenamiento 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 

  • El parámetro AUTO_PLACE muestra el número de réplicas de datos que se crearán para cada nueva imagen en OpenNebula.
  • El parámetro CLONE_MODE indica cómo se CLONE_MODE las imágenes al crear nuevas máquinas virtuales, la snapshot : creará una instantánea de la imagen y desplegará 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 recomienda especificar todos los nodos que se utilizarán para realizar operaciones de clonación de imágenes.

Se proporciona una lista completa de los parámetros admitidos en el proyecto README .


Una vez completada esta configuración, ahora puede descargar algún dispositivo del OpenNebula Marketplace oficial y crear máquinas virtuales a partir de él.


Enlace al proyecto

Source: https://habr.com/ru/post/451186/


All Articles