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
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
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
linstor_un
For at løse dette problem skrev jeg min egen driver -
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
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
Dette fuldender opsætningen, nu kan du downloade nogle apparater fra den officielle
Projekt link:
Kilde: www.habr.com