LINSTOR storage og dets integration med OpenNebula

LINSTOR storage og dets integration med OpenNebula

For ikke så længe siden præsenterede gutterne fra LINBIT deres nye SDS-løsning - Linstor. Dette er et helt gratis lager baseret på gennemprøvede teknologier: DRBD, LVM, ZFS. Linstor kombinerer enkelhed og veldesignet arkitektur, som giver dig mulighed for at opnå stabilitet og ganske imponerende resultater.

I dag vil jeg gerne fortælle lidt mere om det og vise, hvor nemt det kan integreres med OpenNebula ved hjælp af linstor_un - en ny driver, som jeg udviklede specifikt til dette formål.

Linstor i kombination med OpenNebula giver dig mulighed for at bygge en hurtig og pålidelig sky, der nemt kan implementeres på din egen infrastruktur.

Linstor arkitektur

Linstor er hverken et filsystem eller bloklager i sig selv, Linstor er en orkestrator, der giver et abstraktionslag til at automatisere oprettelsen af ​​volumener i LVM eller ZFS og replikere dem ved hjælp af DRBD9.

At bryde stereotyper

Men vent, DRBD? - Hvorfor automatisere det, og hvordan kan det overhovedet fungere?

Lad os huske fortiden, da DRBD8 var meget populær. Dens standardbrug betød at skabe en stor blokenhed og skære den i mange små stykker ved at bruge den samme LVM. En slags mdadm RAID-1 men med netværksreplikering.

Denne tilgang er ikke uden ulemper, og derfor har principperne for lagerkonstruktion ændret sig med fremkomsten af ​​DRBD9, nu er der oprettet en separat DRBD-enhed for hver virtuel maskine.

Den uafhængige blokenhedstilgang tillader bedre udnyttelse af pladsen i klyngen og tilføjer også en række yderligere funktioner. For hver sådan enhed kan du f.eks. bestemme antallet af replikaer, deres placering og individuelle indstillinger. De er nemme at oprette/slette, tage snapshots, ændre størrelse, aktivere kryptering og mere. Det er værd at bemærke, at DRBD9 også opretholder et quorum, som undgår split-brain situationer.

Ressourcer og backends

Når du opretter en ny blokenhed, placerer Linstor det nødvendige antal replikaer på forskellige noder i klyngen. Vi vil kalde hver sådan replika for en DRBD-ressource.

Ressourcer er af to typer:

  • Dataressource - repræsentere en DRBD-enhed placeret på en node i en LVM- eller ZFS-pool.
    I øjeblikket er der understøttelse af flere backends, og deres antal vokser konstant. Der er understøttelse af LVM, ThinLVM og ZFS. De sidste to giver dig mulighed for at oprette og bruge snapshots.
  • Diskløs ressource - er en DRBD-enhed, der hostes på en node uden en backend, men tillader den at blive behandlet som en almindelig blokenhed, vil alle læse-/skriveoperationer blive omdirigeret til dataressourcer. Den nærmeste analoge til diskløse ressourcer er iSCSI LUN.

Hver DRBD-ressource kan have op til 8 replikaer, og kun én af dem kan være aktiv som standard - Primær, vil resten være Sekundær og deres brug vil være umulig, så længe der er mindst én primær, det vil sige, at de simpelthen vil replikere data indbyrdes.

Ved at montere en DRBD-enhed i systemet bliver den automatisk Primær, således at selv en diskløs ressource, i DRBD-terminologi, kan være Primær.

Så hvorfor har vi brug for Linstor?

Ved at overlade alle ressourcekrævende opgaver til kernen, er Linstor i bund og grund en almindelig Java-applikation, der giver dig mulighed for nemt at automatisere oprettelsen af ​​DRBD-ressourcer.
Samtidig vil hver ressource skabt af ham være en uafhængig DRBD-klynge, der fungerer uafhængigt, uanset tilstanden af ​​kontrolplanet og andre DRBD-ressourcer.

Linstor består kun af to komponenter:

  • linstor-controller - Hovedcontrolleren, som giver en API til oprettelse og styring af ressourcer. Den kommunikerer også med satellitter, tjekker ledig plads på dem og sender jobs for at oprette og slette nye ressourcer. Kører i en enkelt instans og bruger en database, der enten kan være intern (H2) eller ekstern (PostgreSQL, MySQL, MariaDB)
  • linstor-satellit - Installeret på alle lagernoder og giver controlleren information om ledig plads, og udfører også opgaver modtaget fra controlleren for at oprette og slette nye volumener og DRBD-enheder oven på dem.

Linstor arbejder med følgende nøglebegreber:

  • Node — en fysisk server, hvorpå DRBD-ressourcer vil blive oprettet og brugt.
  • opbevaringspool - LVM- eller ZFS-pulje oprettet på den node, hvori DRBD-ressourcer vil blive placeret. En diskløs pool er også mulig - dette er en pulje, hvori kun diskløse ressourcer vil blive placeret.
  • ressourcedefinition - Definition af en ressource, faktisk er det en prototype, der beskriver navnet og alle dets egenskaber.
  • volumen definition — Volumendefinition. Hver ressource kan bestå af flere bind, hvert bind skal have en størrelse.
  • Resource - Oprettet en instans af en blokenhed, hver ressource skal placeres på en specifik node og i en eller anden lagerpool.

Installation af Linstor

Jeg anbefaler at bruge Ubuntu som et system, fordi. eksisterer for hende færdiglavet PPA:

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

Eller Debian, hvor Linstor kan installeres fra det officielle Proxmox-lager:

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

Alt er simpelt her:

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

Opbevaring noder

Linux-kernen leveres i øjeblikket med et in-tree-kernemodul DRBD8, det passer os desværre ikke, og vi skal installere DRBD9:

apt-get install drbd-dkms

Som praksis viser, opstår de fleste af vanskelighederne netop med det faktum, at DRBD8-modulet er indlæst i systemet, og ikke DRBD9. Heldigvis er dette nemt at kontrollere ved at køre:

modprobe drbd
cat /proc/drbd

Hvis du ser version: 9 - alt er fint, hvis version: 8 - det betyder, at noget gik galt, og du skal tage yderligere skridt for at finde ud af årsagerne.

Lad os nu installere linstor-satellit и drbd-utils:

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

Opret en klynge

Opbevaringspools og noder

Som backend vil vi tage Tynd LVM, fordi det er det enkleste og understøtter snapshots.
Indstil lvm2, hvis du ikke allerede har gjort det, og lad os oprette en ThinLVM-pulje på alle vores lagernoder:

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

Alle yderligere handlinger kan udføres direkte på controlleren:

Lad os tilføje vores noder:

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

Lad os skabe opbevaringspuljer:

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

Lad os nu tjekke de oprettede puljer:

linstor storage-pool list

Hvis alt er gjort korrekt, bør vi se noget som:

+------------------------------------------------ -------------------------------------------------- ----+ | StoragePool | node | chauffør | poolnavn | fri kapacitet | samlet kapacitet | Understøtter Snapshots | |------------------------------------------------ -------------------------------------------------- ----| | data | node1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sandt | | data | node2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sandt | | data | node3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sandt | +------------------------------------------------ -------------------------------------------------- ----+

DRBD ressourcer

Lad os nu prøve at oprette vores nye DRBD-ressource:

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

Lad os tjekke de oprettede ressourcer:

linstor resource list 

+------------------------------------------------ -------------------------------------------------- ---+ | node | ressource | StoragePool | VolumeNr | MindreNr | Enhedsnavn | Tildelt | i brug | stat | |------------------------------------------------ -------------------------------------------------- ---| | node1 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Ubrugt | UpToDate | | node2 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Ubrugt | UpToDate | +------------------------------------------------ -------------------------------------------------- ---+

Store! - vi ser, at ressourcen blev oprettet på de første to noder, vi kan også prøve at oprette en diskløs ressource på den tredje:

linstor resource create --diskless node3 myres

På noder vil du altid finde denne enhed som /dev/drbd1084 eller /dev/drbd/by-res/myres/0

Sådan fungerer Linstor, kan du få mere information fra officiel dokumentation.

Nu vil jeg tale om, hvordan man integrerer det med OpenNebula

Opsætning af OpenNebula

Jeg vil ikke gå for dybt ind i OpenNebula-opsætningsprocessen, fordi Alle trin er detaljeret i officiel dokumentation, som jeg anbefaler dig at henvise til, vil jeg kun tale om integrationen af ​​OpenNebula med Linstor.

linstor_un

For at løse dette problem skrev jeg min egen driver - linstor_un, den er i øjeblikket tilgængelig som et plugin og skal installeres separat.

Hele installationen udføres på frontend OpenNebula-knuderne og kræver ikke yderligere handlinger på beregningsknuderne.

Først og fremmest skal vi sikre os, at vi har jq и linstor-klient:

apt-get install jq linstor-client

Team linstor node list skal vise en liste over noder. Alle OpenNebula-beregningsknuder skal tilføjes til Linstor-klyngen.

Download og installer pluginnet:

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

Nu skal vi tilføje det til OpenNebula-konfigurationen, for dette følger vi de enkle trin, der er beskrevet her.

Genstart derefter OpenNebula:

systemctl restart opennebula

Og tilføj vores datalagre, system:

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

Og billedbutikken:

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

  • Parameter AUTO_PLACE viser antallet af datareplikaer, der vil blive oprettet for hvert nyt billede i OpenNebula.
  • Parameter CLONE_MODE angiver præcis, hvordan billeder vil blive klonet, når der oprettes nye virtuelle maskiner, snapshot - vil oprette et snapshot af billedet og implementere en virtuel maskine fra snapshottet, copy - vil lave en fuld kopi af billedet for hver virtuel maskine.
  • В BRIDGE_LIST Det anbefales at angive alle noder, der skal bruges til at udføre billedkloningsoperationer.

For en komplet liste over understøttede muligheder, se README projekt.

Dette fuldender opsætningen, nu kan du downloade nogle apparater fra den officielle OpenNebula Marketplace og skabe virtuelle maskiner ud fra det.

Projekt link:
https://github.com/OpenNebula/addon-linstor_un

Kilde: www.habr.com

Tilføj en kommentar