Stocarea LINSTOR și integrarea sa cu OpenNebula

Stocarea LINSTOR și integrarea sa cu OpenNebula

Nu cu mult timp în urmă, băieții de la LINBIT și-au prezentat noua soluție SDS - Linstor. Aceasta este o stocare complet gratuită bazată pe tehnologii dovedite: DRBD, LVM, ZFS. Linstor combină simplitatea și arhitectura bine proiectată, ceea ce vă permite să obțineți stabilitate și rezultate destul de impresionante.

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

Linstor în combinație cu OpenNebula vă permite să construiți un nor rapid și fiabil care poate fi implementat cu ușurință pe propria infrastructură.

Arhitectura Linstor

Linstor nu este nici un sistem de fișiere, nici un bloc de stocare în sine, Linstor este un orchestrator care oferă un strat de abstractizare care vă permite să automatizați crearea de volume în LVM sau ZFS și să le replicați folosind DRBD9.

Încălcarea stereotipurilor

Dar stai, DRBD? — De ce să-l automatizezi și cum poate funcționa?

Să ne amintim de trecut, când DRBD8 era foarte popular. Utilizarea sa standard a implicat crearea unui dispozitiv bloc mare și tăierea lui în mai multe bucăți mici folosind același LVM. Un fel de mdadm RAID-1 dar cu replicare în rețea.

Această abordare nu este lipsită de dezavantaje și, prin urmare, odată cu apariția DRBD9, principiile proiectării stocării s-au schimbat; acum este creat un dispozitiv DRBD separat pentru fiecare mașină virtuală.

Abordarea cu dispozitive bloc independente permite o mai bună utilizare a spațiului din cluster și, de asemenea, adaugă o serie de caracteristici suplimentare. De exemplu, pentru fiecare astfel de dispozitiv puteți determina numărul de replici, locația acestora și setările individuale. Sunt ușor de creat/șters, de a face instantanee, de a redimensiona, de a activa criptarea și multe altele. Este de remarcat faptul că DRBD9 acceptă, de asemenea, cvorum, ceea ce vă permite să evitați situațiile cu creier divizat.

Resurse și backend-uri

La crearea unui nou dispozitiv bloc, Linstor plasează numărul necesar de replici pe diferite noduri din cluster. Vom numi fiecare astfel de replică o resursă DRBD.

Există două tipuri de resurse:

  • Resursa de date — sunt un dispozitiv DRBD situat pe un nod dintr-un pool LVM sau ZFS.
    În acest moment există suport pentru mai multe backend-uri și numărul acestora este în continuă creștere. Există suport pentru LVM, ThinLVM și ZFS. Ultimele două vă permit să creați și să utilizați instantanee.
  • Resursa fara disc — este un dispozitiv DRBD plasat pe un nod fără backend, dar care îi permite să fie tratat ca un dispozitiv bloc obișnuit; toate operațiunile de citire/scriere vor fi redirecționate către resursele de date. Cel mai apropiat analog de resursele fără disc este iSCSI LUN.

Fiecare resursă DRBD poate avea până la 8 replici și doar una dintre ele poate fi activă implicit - Primar, toți ceilalți vor fi Secundar iar utilizarea lor va fi imposibilă atâta timp cât există cel puțin un Primar, adică vor reproduce pur și simplu datele între ei.

Prin instalarea unui dispozitiv DRBD în sistem, acesta devine automat Primar, astfel chiar și o resursă fără disc, în terminologia DRBD, poate fi Primară.

Deci de ce ai nevoie de Linstor?

Prin încredințarea tuturor sarcinilor care necesită resurse intensive nucleului, Linstor este în esență o aplicație Java obișnuită care vă permite să automatizați cu ușurință crearea resurselor DRBD.
Mai mult, fiecare resursă creată de el va fi un cluster DRBD independent care operează independent, indiferent de starea planului de control și a altor resurse DRBD.

Linstor este format din doar două componente:

  • Linstor-controller - Controlerul principal, care oferă un API pentru crearea și gestionarea resurselor. De asemenea, comunică cu sateliții, verificând spațiul liber de pe aceștia și trimite sarcini pentru a crea și șterge noi resurse. Se rulează într-o singură instanță și utilizează o bază de date, care poate fi fie internă (H2) fie externă (PostgreSQL, MySQL, MariaDB)
  • Linstor-satelit — Instalat pe toate nodurile de stocare și oferă controlerului informații despre spațiul liber și, de asemenea, efectuează sarcini primite de la controler pentru a crea și șterge noi volume și dispozitive DRBD deasupra acestora.

Linstor operează cu următoarele concepte cheie:

  • Nod — un server fizic pe care vor fi create și utilizate resursele DRBD.
  • Bazin de depozitare — Pool LVM sau ZFS creat pe nodul în care vor fi localizate resursele DRBD. Este posibil și un pool fără disc - acesta este un pool în care vor fi localizate doar resursele fără disc.
  • Definiția resurselor — Definiția unei resurse este în esență un prototip care descrie numele și toate proprietățile sale.
  • Definirea volumului — Definirea volumului. Fiecare resursă poate consta din mai multe volume, fiecare volum trebuie să aibă o dimensiune.
  • Resursă — O instanță creată a unui dispozitiv bloc, fiecare resursă trebuie plasată pe un anumit nod și într-un pool de stocare.

Instalare Linstor

Recomand să folosiți Ubuntu ca sistem, deoarece... exista pentru ea gata PPA:

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

operator de date cu caracter personal,

Totul este simplu aici:

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

Noduri de stocare

Nucleul Linux este livrat în prezent cu un modul de nucleu în arbore DRBD8, din pacate nu ne convine si trebuie sa instalam DRBD9:

apt-get install drbd-dkms

După cum arată practica, majoritatea dificultăților apar tocmai pentru că modulul DRBD8 este încărcat în sistem, și nu DRBD9. Din fericire, acest lucru este ușor de verificat rulând:

modprobe drbd
cat /proc/drbd

Dacă vezi Versiune: 9 - înseamnă că totul este bine dacă Versiune: 8 - înseamnă că ceva a mers prost și trebuie să faci pași suplimentari pentru a afla motivele.

Acum hai să instalăm linstor-satelit и drbd-utils:

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

Creați un cluster

Pool-uri și noduri de stocare

Ca backend vom lua ThinLVM, deoarece este cel mai simplu și acceptă instantanee.
Set lvm2, dacă nu ați făcut-o deja, 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 suplimentare 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 pool-uri de stocare:

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 este făcut corect, atunci ar trebui să vedem ceva de genul:

+------------------------------------------------- -------------------------------------------------- ----+ | PoolPool | Nodul | Șofer | PoolName | Capacitate liberă | Capacitate totală | Suporta Instantanee | |------------------------------------------------ ------------------------------------------------- ---| | date | nodul1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | adevărat | | date | nodul 2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | adevărat | | date | nodul3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | adevărat | +------------------------------------------------- -------------------------------------------------- ----+

resurse DRBD

Acum să încercăm să creăm noua noastră 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 

+------------------------------------------------- -------------------------------------------------- ---+ | Nodul | Resursa | PoolPool | VolumNr | MinorNr | DeviceName | Alocate | InUse | Stat | |------------------------------------------------ ------------------------------------------------- --| | nodul1 | myres | date | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nefolosit | UpToDate | | nodul 2 | myres | date | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nefolosit | UpToDate | +------------------------------------------------- -------------------------------------------------- ---+

Grozav! — vedem că resursa a fost creată pe primele două noduri, putem încerca și 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

Acesta este modul în care funcționează Linstor, de la care puteți obține mai multe informații documentație oficială.

Acum vă voi spune cum să îl integrați cu OpenNebula

Configurarea OpenNebula

Nu voi intra prea adânc în procesul de configurare a OpenNebula, pentru că... toți pașii sunt descriși în detaliu în documentație oficială, pe care vă recomand să îl contactați, vă voi spune doar despre integrarea OpenNebula cu Linstor.

linstor_un

Pentru a rezolva această problemă, am scris propriul meu driver - linstor_un, este disponibil în prezent ca plugin și trebuie instalat separat.

Întreaga instalare se realizează pe nodurile OpenNebula front-end și nu necesită acțiuni suplimentare asupra nodurilor de calcul.

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

apt-get install jq linstor-client

Echipă linstor node list ar trebui să afișeze o listă de noduri. Toate nodurile de calcul OpenNebula trebuie adăugate la clusterul Linstor.

Descărcați și instalați 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 la configurația OpenNebula, pentru a face acest lucru urmează pașii simpli descriși aici.

Apoi reporniți OpenNebula:

systemctl restart opennebula

Și adăugați depozitele noastre de date, 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 magazinul de imagini:

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 afișează numărul de replici de date care vor fi create pentru fiecare imagine nouă în OpenNebula.
  • Parametru CLONE_MODE indică exact cum vor fi clonate imaginile la crearea de noi mașini virtuale, snapshot — va crea un instantaneu al imaginii și va implementa o mașină virtuală din instantaneu, copy — va face o copie completă a imaginii pentru fiecare mașină virtuală.
  • В BRIDGE_LIST Este recomandat să specificați toate nodurile care vor fi folosite pentru a efectua operațiuni de clonare a imaginii.

Pentru o listă completă a parametrilor acceptați, consultați README proiect.

Acest lucru completează configurarea, acum puteți descărca unele aplicații de la oficial Piața OpenNebula și creați mașini virtuale din el.

Link proiect:
https://github.com/OpenNebula/addon-linstor_un

Sursa: www.habr.com

Adauga un comentariu