Almacenamento LINSTOR e a súa integración con OpenNebula

Almacenamento LINSTOR e a súa integración con OpenNebula

Non hai moito tempo, os mozos de LINBIT presentaron a súa nova solución SDS: Linstor. Este é un almacenamento totalmente gratuíto baseado en tecnoloxías comprobadas: DRBD, LVM, ZFS. Linstor combina a sinxeleza e unha arquitectura ben deseñada, o que lle permite acadar estabilidade e resultados bastante impresionantes.

Hoxe gustaríame falar un pouco máis sobre iso e mostrar o fácil que se pode integrar con OpenNebula usando linstor_un, un novo controlador que desenvolvín especificamente para este propósito.

Linstor en combinación con OpenNebula permítelle construír unha nube rápida e fiable que se poida despregar facilmente na súa propia infraestrutura.

Arquitectura Linstor

Linstor non é nin un sistema de ficheiros nin un almacenamento de bloques en si mesmo, Linstor é un orquestrador que proporciona unha capa de abstracción para automatizar a creación de volumes en LVM ou ZFS e replicalos mediante DRBD9.

Romper estereotipos

Pero espera, DRBD? - Por que automatizalo e como pode funcionar?

Lembremos o pasado cando DRBD8 era moi popular. O seu uso estándar significaba crear un dispositivo de bloque grande e cortalo en moitos anacos pequenos, usando o mesmo LVM. Unha especie de mdadm RAID-1 pero con replicación de rede.

Este enfoque non está exento de inconvenientes e, polo tanto, coa chegada de DRBD9, os principios de construción do almacenamento cambiaron, agora créase un dispositivo DRBD separado para cada máquina virtual.

O enfoque do dispositivo de bloque independente permite unha mellor utilización do espazo no clúster e tamén engade unha serie de funcións adicionais. Por exemplo, para cada un destes dispositivos, pode determinar o número de réplicas, a súa localización e a configuración individual. Son fáciles de crear/eliminar, tomar instantáneas, cambiar o tamaño, activar o cifrado e moito máis. Cabe destacar que DRBD9 tamén mantén un quórum, o que evita situacións de división cerebral.

Recursos e backends

Ao crear un novo dispositivo de bloque, Linstor coloca o número necesario de réplicas en distintos nodos do clúster. Chamaremos a cada unha destas réplicas un recurso DRBD.

Hai dous tipos de recursos:

  • Recurso de datos - representa un dispositivo DRBD situado nun nodo nun grupo LVM ou ZFS.
    Nestes momentos hai soporte para varios backends e o seu número está en constante crecemento. Hai soporte para LVM, ThinLVM e ZFS. Os dous últimos permítenche crear e utilizar instantáneas.
  • Recurso sen disco - é un dispositivo DRBD aloxado nun nodo sen backend, pero permitindo que se trate como un dispositivo de bloque normal, todas as operacións de lectura/escritura serán redirixidas a recursos de datos. O análogo máis próximo aos recursos sen disco é iSCSI LUN.

Cada recurso DRBD pode ter ata 8 réplicas e só unha delas pode estar activa por defecto − Primario, todo o resto será Secundario e o seu uso será imposible sempre que exista polo menos un Primario, é dicir, simplemente replicarán os datos entre eles.

Ao montar un dispositivo DRBD no sistema, faise automaticamente Primario, polo que mesmo un recurso sen disco, en terminoloxía DRBD, pode ser Primario.

Entón, por que necesitamos Linstor?

Ao confiar todas as tarefas de uso intensivo de recursos ao núcleo, Linstor é esencialmente unha aplicación Java normal que che permite automatizar facilmente a creación de recursos DRBD.
Ao mesmo tempo, cada recurso creado por el será un clúster DRBD independente que funciona de forma independente, independentemente do estado do plano de control e doutros recursos DRBD.

Linstor consta só de dous compoñentes:

  • linstor-controlador - O controlador principal, que proporciona unha API para crear e xestionar recursos. Tamén se comunica cos satélites, comproba o espazo libre neles e envía traballos para crear e eliminar novos recursos. Executa nunha única instancia e usa unha base de datos que pode ser interna (H2) ou externa (PostgreSQL, MySQL, MariaDB)
  • linstor-satélite — Instalado en todos os nodos de almacenamento e proporciona ao controlador información sobre o espazo libre e tamén realiza tarefas recibidas do controlador para crear e eliminar novos volumes e dispositivos DRBD enriba deles.

Linstor opera cos seguintes conceptos clave:

  • Nodo — un servidor físico no que se crearán e utilizarán os recursos DRBD.
  • Piscina de almacenamento — Grupo LVM ou ZFS creado no nodo no que se localizarán os recursos DRBD. Tamén é posible un pool sen disco: este é un pool no que só se localizarán os recursos sen disco.
  • definición de recursos - Definición dun recurso, de feito é un prototipo que describe o nome e todas as súas propiedades.
  • definición de volume - Definición do volume. Cada recurso pode constar de varios volumes, cada volume debe ter un tamaño.
  • Recurso — Unha instancia creada dun dispositivo de bloque, cada recurso debe colocarse nun nodo específico e nalgún grupo de almacenamento.

Instalación de Linstor

Recomendo usar Ubuntu como sistema, porque. existe para ela PPA preparado:

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

Ou Debian, onde se pode instalar Linstor desde o 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

Todo é sinxelo aquí:

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

Nodos de almacenamento

O núcleo de Linux envíase actualmente cun módulo de núcleo en árbore DRBD8, por desgraza non nos convén e necesitamos instalalo DRBD9:

apt-get install drbd-dkms

Como mostra a práctica, a maioría das dificultades xorden precisamente co feito de que o módulo DRBD8 está cargado no sistema, e non DRBD9. Afortunadamente, isto é fácil de comprobar executando:

modprobe drbd
cat /proc/drbd

Se ves versión: 9 - todo está ben se versión: 8 - significa que algo saíu mal e que debes tomar medidas adicionais para descubrir os motivos.

Agora imos 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

Pools e nodos de almacenamento

Como backend tomaremos ThinLVM, porque é o máis sinxelo e admite instantáneas.
Conxunto lvm2, se aínda non o fixeches, e imos crear un grupo ThinLVM en todos os nosos nodos de almacenamento:

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

Todas as accións posteriores pódense realizar directamente no controlador:

Engadimos os nosos 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

Imos crear agrupacións de almacenamento:

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

Agora imos comprobar os pools creados:

linstor storage-pool list

Se todo está feito correctamente, deberíamos ver algo así como:

+------------------------------------------------- -------------------------------------------------- ----+ | Piscina de almacenamento | nodo | condutor | nome da piscina | capacidade libre | capacidade total | Admite instantáneas | |------------------------------------------------- -------------------------------------------------- ----| | datos | nodo 1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | verdadeiro | | datos | nodo 2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | verdadeiro | | datos | nodo 3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | verdadeiro | +------------------------------------------------- -------------------------------------------------- ----+

Recursos DRBD

Agora imos tentar crear o noso novo recurso DRBD:

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

Comprobamos os recursos creados:

linstor resource list 

+------------------------------------------------- -------------------------------------------------- ---+ | nodo | recurso | Piscina de almacenamento | Volumenr | MenorNr | DeviceName | Asignado | en uso | estado | |------------------------------------------------- -------------------------------------------------- ---| | nodo 1 | mires | datos | 0 | 1084 | /dev/drbd1084 | 52 KiB | Sen uso | Actualidade | | nodo 2 | mires | datos | 0 | 1084 | /dev/drbd1084 | 52 KiB | Sen uso | Actualidade | +------------------------------------------------- -------------------------------------------------- ---+

Genial! - vemos que o recurso foi creado nos dous primeiros nodos, tamén podemos tentar crear un recurso sen disco no terceiro:

linstor resource create --diskless node3 myres

Nos nodos sempre atoparás este dispositivo como /dev/drbd1084 ou /dev/drbd/by-res/myres/0

Así é como funciona Linstor, podes obter máis información documentación oficial.

Agora falarei de como integralo con OpenNebula

Configurando OpenNebula

Non vou afondar demasiado no proceso de configuración de OpenNebula, porque Todos os pasos están detallados en documentación oficial, ao que recomendo que se refire, só falarei da integración de OpenNebula con Linstor.

linstor_un

Para resolver este problema, escribín o meu propio controlador − linstor_un, actualmente está dispoñible como complemento e debe instalarse por separado.

Toda a instalación realízase nos nodos de frontend OpenNebula e non require accións adicionais nos nodos de cálculo.

En primeiro lugar, temos que asegurarnos de que temos jq и linstor-cliente:

apt-get install jq linstor-client

Equipo linstor node list debería mostrar unha lista de nós. Todos os nodos de cálculo de OpenNebula deben engadirse ao clúster Linstor.

Descarga e instala o 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

Agora necesitamos engadilo á configuración de OpenNebula, para iso seguimos os sinxelos pasos descritos aquí.

Despois reinicia OpenNebula:

systemctl restart opennebula

E engade os nosos almacéns 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

E a tenda de imaxes:

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 mostra o número de réplicas de datos que se crearán para cada nova imaxe en OpenNebula.
  • Parámetro CLONE_MODE indica exactamente como se clonarán as imaxes ao crear novas máquinas virtuais, snapshot - creará unha instantánea da imaxe e despregará unha máquina virtual a partir da instantánea, copy - fará unha copia completa da imaxe para cada máquina virtual.
  • В BRIDGE_LIST recoméndase especificar todos os nós que se utilizarán para realizar operacións de clonación de imaxes.

Para obter unha lista completa das opcións admitidas, consulte README proxecto.

Isto completa a configuración, agora podes descargar algún dispositivo do oficial Mercado OpenNebula e crear máquinas virtuais a partir del.

Ligazón do proxecto:
https://github.com/OpenNebula/addon-linstor_un

Fonte: www.habr.com

Engadir un comentario