Stocare LINSTOR și integrarea sa cu OpenNebula

Stocare LINSTOR și integrarea sa cu OpenNebula

Nu mult timp în urmă, echipa de la LINBIT a prezentat noua sa soluție SDS - Linstor. Este un stocare complet liberă, bazată pe tehnologii dovedite: DRBD, LVM, ZFS. Linstor combină simplitatea cu o arhitectură bine gândită, ceea ce permite obținerea unei stabilități și a unor rezultate destul de impresionante.

Astăzi aș dori să vorbesc despre el mai în detaliu și să arăt cât de simplu poate fi integrat cu OpenNebula folosind linstor_un - un nou driver pe care l-am dezvoltat special pentru acest scop.

Linstor, împreună cu OpenNebula, permite construirea unei cloudu rapide și de încredere, care poate fi implementat fără probleme pe infrastructura proprie.

Arhitectura Linstor

Linstor nu este nici un sistem de fișiere, nici un stocare bloc în sine; Linstor este un orchestrator care oferă un strat de abstracție ce permite automatizarea creării de volume în LVM sau ZFS și replicarea lor cu ajutorul DRBD9.

Spargem stereotipurile

Dar așteaptă, DRBD? — De ce să-l automatizăm și cum poate funcționa asta?

Să ne amintim de trecut, când DRBD8 era foarte popular. Utilizarea standard implica crearea unei singure unități mari de stocare bloc și împărțirea acesteia în multe bucăți mici, folosind același LVM. O variantă de RAID-1 cu mdadm, dar cu replicare în rețea.

Această abordare nu este lipsită de dezavantaje, așa că odată cu venirea DRBD9, principiile de construire a stocării s-au schimbat; acum se creează un dispozitiv DRBD separat pentru fiecare mașină virtuală.

Abordarea cu dispozitive bloc independente permite o mai bună utilizare a spațiului în cluster și adaugă o serie de posibilități suplimentare. De exemplu, pentru fiecare astfel de dispozitiv se poate defini numărul de replici, amplasarea acestora și setările individuale. Este ușor să le creăm/ștergem, să facem snapshot-uri, să schimbăm dimensiunea, să activăm criptarea și multe altele. Merită remarcat faptul că DRBD9 suportă, de asemenea, votul, care ajută la evitarea situațiilor de split-brain.

Resurse și backend-uri

Când se creează un nou dispozitiv bloc, Linstor distribuie numărul necesar de replici pe diferite noduri din cluster. Fiecare astfel de replică o vom numi resursă DRBD.

Resursele sunt de două tipuri:

  • Resursă de date — reprezintă un dispozitiv DRBD plasat pe un nod într-un pool LVM sau ZFS.
    În prezent, există suport pentru mai multe back-end-uri, iar numărul acestora este în continuă creștere. Există suport pentru LVM, ThinLVM și ZFS. Ultimele două permit crearea și utilizarea snapshot-urilor.
  • Resursă fără disk — reprezintă un dispozitiv DRBD situat pe un nod fără back-end, dar care permite interacțiunea cu acesta ca și cum ar fi un dispozitiv de bloc obișnuit, toate operațiile de citire/scriere vor fi redirecționate către resursele de date. Cel mai apropiat omolog al resurselor fără disk este iSCSI LUN.

Fiecare resursă DRBD poate avea până la 8 replici, iar doar una dintre ele poate fi activă în mod implicit — Primar, toate celelalte vor fi Secundar și utilizarea lor va fi imposibilă atâta timp cât există măcar un Primar, adică ele vor replica pur și simplu datele între ele.

Montând un dispozitiv DRBD în sistem, acesta devine automat Primar, astfel încât chiar și resursa fără disk, în terminologia DRBD, poate fi Primar.

Deci, de ce este necesar Linstor?

Fidând toate sarcinile consumatoare de resurse nucleului, Linstor reprezintă, de fapt, o aplicație Java obișnuită care permite automatizarea fără efort a creării resurselor DRBD.
În plus, fiecare resursă creată de el va fi un cluster DRBD independent, care funcționează de sine stătător, indiferent de starea control-plane și a celorlalte resurse DRBD.

Linstor este compus din doar două componente:

  • Linstor-controller — Controlerul principal, care oferă API pentru crearea și gestionarea resurselor. De asemenea, comunică cu sateliții, verificând spațiul liber disponibil și trimite sarcini pentru crearea și ștergerea de noi resurse. Se rulează într-un singur exemplar și folosește o bază de date, care poate fi fie internă (H2), fie externă (PostgreSQL, MySQL, MariaDB).
  • Linstor-satellite — Este instalat pe toate nodurile de stocare și furnizează controlerului informații despre spațiul liber, precum și execută sarcinile primite de la controler pentru a crea și șterge volume noi și dispozitive DRBD deasupra lor.

Linstor operează cu următoarele concepte cheie:

  • Node — server fizic pe care vor fi create și utilizate resursele DRBD.
  • Pool de stocare — pool LVM sau ZFS, creat pe nod unde vor fi plasate resursele DRBD. De asemenea, este posibil un pool fără disk — acesta este un pool în care vor fi plasate doar resurse fără disk.
  • Definirea resursei — Definirea resursei, în esență, aceasta este un prototip care descrie numele și toate proprietățile sale.
  • Definiția volumului — Definirea volumului. Fiecare resursă poate consta din mai multe volume, fiecare volum trebuie să aibă o dimensiune.
  • Resursa — Instanța creată a unui dispozitiv bloc, fiecare resursă trebuie să fie plasată pe un anumit nod și într-un anumit storage pool.

Instalarea Linstor

Ca sistem, recomand utilizarea Ubuntu, deoarece există un PPA gata făcut:

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

Sau Debian, unde Linstor poate fi instalat din depozitul oficial pentru 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

Aici totul este simplu:

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

Noduri de stocare

În prezent, în nucleul Linux este inclus un modul in-tree al nucleului DRBD8, din păcate, acesta nu ne este util și trebuie să instalăm DRBD9:

apt-get install drbd-dkms

După cum arată practica, cele mai multe dificultăți apar din cauza faptului că în sistem este încărcat modul DRBD8, nu DRBD9. Din fericire, este ușor de verificat prin executarea:

modprobe drbd
cat /proc/drbd

Dacă vedeți version: 9 — înseamnă că totul este în ordine, dacă version: 8 — înseamnă că ceva nu a mers bine și trebuie să luați măsuri suplimentare pentru a stabili cauzele.

Acum să instalăm linstor-satellite și drbd-utils:

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

Crearea clusterului

Storage pools și noduri

Ca backend, vom folosi ThinLVM, deoarece este cel mai simplu și suportă snapshooturi.
Instalați lvm2, dacă nu ați făcut-o deja, și să creăm un pool ThinLVM pe toate nodurile noastre de stocare:

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

Toate acțiunile ulterioare pot fi efectuate direct pe controler:

Să adăugăm nodurile noastre:

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

Să creăm storage pools:

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

Acum să verificăm pool-urile create:

linstor storage-pool list

Dacă totul a fost realizat corect, ar trebui să vedem ceva de genul:

+-------------------------------------------------------------------------------------------------------+
| StoragePool | Node  | Driver   | PoolName          | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------------|
| data        | node1 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node2 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node3 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
+-------------------------------------------------------------------------------------------------------+

Resurse DRBD

Acum să încercăm să creăm noul nostru resurs DRBD:

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

Să verificăm resursele create:

linstor resource list 

+------------------------------------------------------------------------------------------------------+
| Node  | Resource | StoragePool | VolumeNr | MinorNr | DeviceName    | Allocated  | InUse  |    State |
|------------------------------------------------------------------------------------------------------|
| node1 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
| node2 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
+------------------------------------------------------------------------------------------------------+

Excelent! — vedem că resursa a fost creată pe primele două noduri, de asemenea putem încerca să creăm o resursă fără disc pe al treilea:

linstor resource create --diskless node3 myres

Pe noduri veți găsi întotdeauna acest dispozitiv ca /dev/drbd1084 sau /dev/drbd/by-res/myres/0

Așa funcționează Linstor, puteți obține mai multe informații din documentația oficială.

Acum vă voi povesti despre cum să-l integrați cu OpenNebula

Configurarea OpenNebula

Nu voi intra foarte mult în procesul de configurare OpenNebula, deoarece toate pașii sunt detaliat descriși în documentația oficială, la care vă recomand să consultați, voi vorbi doar despre integrarea OpenNebula cu Linstor.

linstor_un

Pentru a rezolva această problemă, am scris un driver propriu — linstor_un, în prezent acesta este disponibil sub formă de plugin și trebuie instalat separat.

Toată instalarea se desfășoară pe nodurile frontend OpenNebula și nu necesită acțiuni suplimentare pe nodurile compute.

În primul rând, trebuie să ne asigurăm că avem jq și linstor-client:

apt-get install jq linstor-client

Comanda linstor node list ar trebui să afiseze lista nodurilor. Toate nodurile compute OpenNebula trebuie să fie adăugate în clusterul Linstor.

Să descărcăm și să instalăm pluginul:

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

Acum trebuie să-l adăugăm în configurația OpenNebula, pentru aceasta vom urma pașii simpli descriși aici.

După care vom reporni OpenNebula:

systemctl restart opennebula

Și vom adăuga stocările noastre, sistemul:

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 stocarea imaginilor:

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

  • Parametru AUTO_PLACE arată numărul de replici de date care vor fi create pentru fiecare nouă imagine în OpenNebula.
  • Parametru CLONE_MODE indică modul în care vor fi clonată imaginile la crearea de noi mașini virtuale, snapshot — va crea un snapshot al imaginii și va desfășura mașina virtuală din snapshot, copy — va face o copie completă a imaginii pentru fiecare mașină virtuală.
  • În BRIDGE_LIST se recomandă să specificați toate nodurile care vor fi utilizate pentru efectuarea operațiunilor de clonare a imaginilor.

Lista completă a parametrilor suportati este prezentată în README a proiectului.

Cu aceasta, configurația este finalizată, acum putem încărca un appliance din oficialul OpenNebula Marketplace și să creăm mașini virtuale din aceasta.

Linkul către proiect:
https://github.com/OpenNebula/addon-linstor_un

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster