Emmagatzematge LINSTOR i la seva integració amb OpenNebula

Emmagatzematge LINSTOR i la seva integració amb OpenNebula

No fa molt, els nois de LINBIT van presentar la seva nova solució SDS: Linstor. Es tracta d'un emmagatzematge totalment gratuït basat en tecnologies provades: DRBD, LVM, ZFS. Linstor combina la senzillesa i una arquitectura ben dissenyada, la qual cosa us permet aconseguir estabilitat i resultats força impressionants.

Avui m'agradaria parlar-ne amb una mica més de detall i mostrar la facilitat amb què es pot integrar amb l'OpenNebula mitjançant linstor_un, un nou controlador que vaig desenvolupar específicament per a aquest propòsit.

Linstor en combinació amb OpenNebula us permet crear un núvol ràpid i fiable que es pot desplegar fàcilment a la vostra pròpia infraestructura.

Arquitectura Linstor

Linstor no és ni un sistema de fitxers ni un emmagatzematge de blocs per se, Linstor és un orquestrador que proporciona una capa d'abstracció que permet automatitzar la creació de volums en LVM o ZFS i replicar-los mitjançant DRBD9.

Trencar estereotips

Però espera, DRBD? — Per què automatitzar-lo i com pot funcionar?

Recordem el passat, quan DRBD8 era molt popular. El seu ús estàndard implicava crear un dispositiu de bloc gran i tallar-lo en molts trossos petits, utilitzant el mateix LVM. Una mena de mdadm RAID-1 però amb replicació a la xarxa.

Aquest enfocament no està exempt de inconvenients i, per tant, amb l'arribada de DRBD9, els principis del disseny d'emmagatzematge han canviat; ara es crea un dispositiu DRBD independent per a cada màquina virtual.

L'enfocament amb dispositius de bloc independents permet una millor utilització de l'espai al clúster i també afegeix una sèrie de funcions addicionals. Per exemple, per a cada dispositiu, podeu determinar el nombre de rèpliques, la seva ubicació i la configuració individual. Són fàcils de crear/suprimir, fer instantànies, canviar la mida, habilitar el xifratge i molt més. Val la pena assenyalar que DRBD9 també admet quòrum, que us permet evitar situacions de divisió del cervell.

Recursos i backends

Quan es crea un dispositiu de bloc nou, Linstor col·loca el nombre necessari de rèpliques en diferents nodes del clúster. Anomenarem a cada una d'aquestes rèpliques un recurs DRBD.

Hi ha dos tipus de recursos:

  • Recurs de dades — són un dispositiu DRBD situat en un node d'un grup LVM o ZFS.
    En aquests moments hi ha suport per a diversos backends i el seu nombre està en constant creixement. Hi ha suport per a LVM, ThinLVM i ZFS. Els dos últims us permeten crear i utilitzar instantànies.
  • Recurs sense disc — és un dispositiu DRBD col·locat en un node sense un backend, però que permet tractar-lo com un dispositiu de bloc normal; totes les operacions de lectura/escriptura es redirigiran als recursos de dades. L'analògic més proper als recursos sense disc és iSCSI LUN.

Cada recurs DRBD pot tenir fins a 8 rèpliques, i només una d'elles pot estar activa per defecte: Primary, tots els altres ho seran Secundari i el seu ús serà impossible sempre que hi hagi almenys un Primària, és a dir, simplement replicaran dades entre ells.

En instal·lar un dispositiu DRBD al sistema, es converteix automàticament en Primary, per tant, fins i tot un recurs sense disc, en terminologia DRBD, pot ser primari.

Aleshores, per què necessiteu Linstor?

En confiar totes les tasques intensives en recursos al nucli, Linstor és essencialment una aplicació Java normal que us permet automatitzar fàcilment la creació de recursos DRBD.
A més, cada recurs creat per ell serà un clúster DRBD independent que funciona de manera independent, independentment de l'estat del pla de control i altres recursos DRBD.

Linstor consta només de dos components:

  • Linstor-controlador - El controlador principal, que proporciona una API per crear i gestionar recursos. També es comunica amb satèl·lits, comprovant l'espai lliure en ells, i envia tasques per crear i eliminar nous recursos. S'executa en una sola instància i utilitza una base de dades, que pot ser interna (H2) o externa (PostgreSQL, MySQL, MariaDB)
  • Linstor-satèl·lit — S'instal·la a tots els nodes d'emmagatzematge i proporciona al controlador informació sobre l'espai lliure, i també realitza tasques rebudes del controlador per crear i eliminar nous volums i dispositius DRBD a sobre d'ells.

Linstor opera amb els conceptes clau següents:

  • Node — un servidor físic en el qual es crearan i utilitzaran els recursos DRBD.
  • Piscina d'emmagatzematge — Agrupació LVM o ZFS creada al node en què s'ubicaran els recursos DRBD. També és possible una agrupació sense disc: aquesta és una agrupació en la qual només es trobaran recursos sense disc.
  • Definició de recursos — La definició d'un recurs és essencialment un prototip que descriu el nom i totes les seves propietats.
  • Definició de volum — Definició del volum. Cada recurs pot constar de diversos volums, cada volum ha de tenir una mida.
  • Recurs — Una instància creada d'un dispositiu de bloc, cada recurs s'ha de col·locar en un node específic i en alguna agrupació d'emmagatzematge.

Instal·lació de Linstor

Recomano utilitzar Ubuntu com a sistema, perquè... existeix per a ella PPA llest:

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

O Debian, on es pot instal·lar Linstor des del dipòsit 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

Controller

Tot aquí és senzill:

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

Nodes d'emmagatzematge

Actualment, el nucli de Linux s'envia amb un mòdul de nucli dins de l'arbre DRBD8, malauradament no ens convé i hem d'instal·lar-lo DRBD9:

apt-get install drbd-dkms

Com mostra la pràctica, la majoria de les dificultats sorgeixen precisament perquè el mòdul DRBD8 es carrega al sistema, i no DRBD9. Afortunadament, això és fàcil de comprovar executant:

modprobe drbd
cat /proc/drbd

Si veus versió: 9 - vol dir que tot està bé si versió: 8 - vol dir que alguna cosa ha anat malament i cal fer passos addicionals per esbrinar-ne els motius.

Ara instal·lem linstor-satèl·lit и drbd-utils:

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

Creeu un clúster

Agrupacions d'emmagatzematge i nodes

Prenem com a backend ThinLVM, perquè és el més senzill i admet instantànies.
Instal·lar lvm2, si encara no ho heu fet, creem un grup ThinLVM a tots els nostres nodes d'emmagatzematge:

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

Totes les accions addicionals es poden realitzar directament al controlador:

Afegim els nostres nodes:

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

Creem agrupacions d'emmagatzematge:

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

Ara comprovem els grups creats:

linstor storage-pool list

Si tot està fet correctament, hauríem de veure alguna cosa com:

+------------------------------------------------- -------------------------------------------------- ----+ | Piscina d'emmagatzematge | Node | Conductor | PoolName | Capacitat lliure | Capacitat total | Admet instantànies | |------------------------------------------------- -------------------------------------------------- ---| | dades | node1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | veritat | | dades | node2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | veritat | | dades | node3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | veritat | +------------------------------------------------- -------------------------------------------------- ----+

Recursos DRBD

Ara intentem crear el nostre nou recurs DRBD:

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

Comprovem els recursos creats:

linstor resource list 

+------------------------------------------------- -------------------------------------------------- ---+ | Node | Recurs | Piscina d'emmagatzematge | VolumNr | MenorNr | DeviceName | Assignat | InUse | Estat | |------------------------------------------------- -------------------------------------------------- --| | node1 | myres | dades | 0 | 1084 | /dev/drbd1084 | 52 KiB | No utilitzat | Actualitzat | | node2 | myres | dades | 0 | 1084 | /dev/drbd1084 | 52 KiB | No utilitzat | Actualitzat | +------------------------------------------------- -------------------------------------------------- ---+

Genial! — veiem que el recurs es va crear als dos primers nodes, també podem intentar crear un recurs sense disc al tercer:

linstor resource create --diskless node3 myres

Als nodes sempre trobareu aquest dispositiu com /dev/drbd1084 o /dev/drbd/by-res/myres/0

Així és com funciona Linstor, podeu obtenir més informació documentació oficial.

Ara us explicaré com integrar-lo amb OpenNebula

Configuració d'OpenNebula

No aprofundiré massa en el procés de configuració d'OpenNebula, perquè... tots els passos es descriuen detalladament a documentació oficial, amb el qual us recomano que contacteu, només us parlaré de la integració d'OpenNebula amb Linstor.

linstor_un

Per resoldre aquest problema, vaig escriure el meu propi controlador: linstor_un, actualment està disponible com a connector i s'ha d'instal·lar per separat.

Tota la instal·lació es porta a terme als nodes de la interfície OpenNebula i no requereix accions addicionals als nodes de càlcul.

En primer lloc, hem d'assegurar-nos que ho tenim jq и linstor-client:

apt-get install jq linstor-client

Equip linstor node list hauria de mostrar una llista de nodes. Tots els nodes de càlcul de l'OpenNebula s'han d'afegir al clúster Linstor.

Baixeu i instal·leu el connector:

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

Ara hem d'afegir-lo a la configuració de l'OpenNebula, per fer-ho seguim els senzills passos descrits aquí.

A continuació, reinicieu OpenNebula:

systemctl restart opennebula

I afegiu els nostres magatzems de dades, 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

I la botiga d'imatges:

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àmetre AUTO_PLACE mostra el nombre de rèpliques de dades que es crearan per a cada imatge nova a OpenNebula.
  • Paràmetre CLONE_MODE indica exactament com es clonaran les imatges en crear noves màquines virtuals, snapshot — crearà una instantània de la imatge i desplegarà una màquina virtual a partir de la instantània, copy — farà una còpia completa de la imatge per a cada màquina virtual.
  • В BRIDGE_LIST Es recomana especificar tots els nodes que s'utilitzaran per realitzar operacions de clonació d'imatges.

Per obtenir una llista completa dels paràmetres compatibles, vegeu README projecte.

Això completa la configuració, ara podeu descarregar algun aparell des de l'oficial OpenNebula Marketplace i crear-ne màquines virtuals.

Enllaç del projecte:
https://github.com/OpenNebula/addon-linstor_un

Font: www.habr.com

Afegeix comentari