For ikke lenge siden presenterte gutta fra LINBIT sin nye SDS-løsning – Linstor. Dette er en helt gratis lagring basert på utprøvde teknologier: DRBD, LVM, ZFS. Linstor kombinerer enkelhet og godt designet arkitektur, som lar deg oppnå stabilitet og ganske imponerende resultater.
I dag vil jeg gjerne snakke om det litt mer detaljert og vise hvor enkelt det kan integreres med OpenNebula ved hjelp av linstor_un - en ny driver som jeg utviklet spesielt for dette formålet.
Linstor i kombinasjon med OpenNebula lar deg bygge en rask og pålitelig sky som enkelt kan distribueres på din egen infrastruktur.
Linstor arkitektur
Linstor er verken et filsystem eller blokklagring i seg selv, Linstor er en orkestrator som gir et abstraksjonslag som lar deg automatisere opprettingen av volumer i LVM eller ZFS og replikere dem ved hjelp av DRBD9.
Å bryte stereotypier
Men vent, DRBD? — Hvorfor automatisere det og hvordan kan det i det hele tatt fungere?
La oss huske fortiden, da DRBD8 var veldig populær. Standardbruken innebar å lage en stor blokkenhet og kutte den i mange små biter ved å bruke samme LVM. En slags mdadm RAID-1 men med replikering over nettverket.
Denne tilnærmingen er ikke uten sine ulemper, og derfor, med bruken av DRBD9, har prinsippene for lagringsdesign endret seg; nå opprettes en separat DRBD-enhet for hver virtuell maskin.
Tilnærmingen med uavhengige blokkenheter gir bedre utnyttelse av plassen i klyngen, og legger også til en rekke tilleggsfunksjoner. For hver slik enhet kan du for eksempel bestemme antall replikaer, deres plassering og individuelle innstillinger. De er enkle å lage/slette, ta øyeblikksbilder, endre størrelse, aktivere kryptering og mye mer. Det er verdt å merke seg at DRBD9 også støtter quorum, som lar deg unngå splittede hjernesituasjoner.
Ressurser og backends
Når du oppretter en ny blokkenhet, plasserer Linstor det nødvendige antallet replikaer på forskjellige noder i klyngen. Vi vil kalle hver slik replika en DRBD-ressurs.
Det er to typer ressurser:
- Dataressurs — er en DRBD-enhet plassert på en node i en LVM- eller ZFS-pool.
For øyeblikket er det støtte for flere backends, og antallet vokser stadig. Det er støtte for LVM, ThinLVM og ZFS. De to siste lar deg lage og bruke øyeblikksbilder. - Diskløs ressurs — er en DRBD-enhet plassert på en node uten backend, men som lar den behandles som en vanlig blokkenhet; alle lese-/skriveoperasjoner vil bli omdirigert til dataressurser. Den nærmeste analoge til diskløse ressursene er iSCSI LUN.
Hver DRBD-ressurs kan ha opptil 8 replikaer, og bare én av dem kan være aktiv som standard - primær, vil alle andre være det Sekundær og bruken av dem vil være umulig så lenge det er minst én Primær, det vil si at de ganske enkelt vil replikere data mellom seg.
Ved å installere en DRBD-enhet i systemet, blir den automatisk primær, og dermed kan til og med en diskløs ressurs, i DRBD-terminologi, være Primær.
Så hvorfor trenger du Linstor?
Ved å overlate alle ressurskrevende oppgaver til kjernen, er Linstor i hovedsak en vanlig Java-applikasjon som lar deg enkelt automatisere opprettelsen av DRBD-ressurser.
Dessuten vil hver ressurs opprettet av ham være en uavhengig DRBD-klynge som opererer uavhengig, uavhengig av tilstanden til kontrollplanet og andre DRBD-ressurser.
Linstor består av kun to komponenter:
- Linstor-kontroller - Hovedkontrolleren, som gir et API for å opprette og administrere ressurser. Den kommuniserer også med satellitter, sjekker ledig plass på dem, og sender oppgaver for å opprette og slette nye ressurser. Den kjører i en enkelt forekomst og bruker en database, som enten kan være intern (H2) eller ekstern (PostgreSQL, MySQL, MariaDB)
- Linstor-satellitt — Installert på alle lagringsnoder og gir kontrolleren informasjon om ledig plass, og utfører også oppgaver mottatt fra kontrolleren for å opprette og slette nye volumer og DRBD-enheter på toppen av dem.
Linstor opererer med følgende nøkkelkonsepter:
- Node — en fysisk server der DRBD-ressurser vil bli opprettet og brukt.
- Oppbevaringsbasseng — LVM- eller ZFS-pool opprettet på noden der DRBD-ressurser vil være plassert. En diskløs pool er også mulig - dette er en pool der bare diskløse ressurser vil være plassert.
- Ressursdefinisjon — Definisjonen av en ressurs er i hovedsak en prototype som beskriver navnet og alle dets egenskaper.
- Volumdefinisjon — Volumdefinisjon. Hver ressurs kan bestå av flere volumer, hvert volum må ha en størrelse.
- Ressurs — En opprettet forekomst av en blokkenhet, hver ressurs må plasseres på en spesifikk node og i en eller annen lagringspool.
Linstor installasjon
Jeg anbefaler å bruke Ubuntu som et system, fordi... finnes for henne
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update
Eller Debian, hvor Linstor kan installeres fra det offisielle depotet for 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
Alt er enkelt her:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller
Lagringsnoder
Linux-kjernen leveres for øyeblikket med en kjernemodul i treet DRBD8, dessverre passer det ikke oss og vi må installere DRBD9:
apt-get install drbd-dkms
Som praksis viser, oppstår de fleste vanskeligheter nettopp fordi DRBD8-modulen er lastet inn i systemet, og ikke DRBD9. Heldigvis er dette enkelt å sjekke ved å kjøre:
modprobe drbd
cat /proc/drbd
Hvis du ser versjon: 9 - det betyr at alt er bra hvis versjon: 8 - Det betyr at noe gikk galt og at du må ta flere skritt for å finne ut årsakene.
La oss nå installere linstor-satellitt и drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite
Lag en klynge
Lagringsbassenger og noder
Som en backend vil vi ta ThinLVM, fordi det er det enkleste og støtter øyeblikksbilder.
Satt lvm2, hvis du ikke allerede har gjort det, la oss lage en ThinLVM-pool på alle lagringsnodene våre:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool
Alle ytterligere handlinger kan utføres direkte på kontrolleren:
La oss legge til nodene våre:
linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13
La oss lage lagringsbassenger:
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
La oss nå sjekke de opprettede bassengene:
linstor storage-pool list
Hvis alt er gjort riktig, bør vi se noe sånt som:
+-------------------------------------------------------- -------------------------------------------------- ----+ | StoragePool | Node | Driver | Poolnavn | Fri kapasitet | Total kapasitet | Støtter Øyeblikksbilder | |------------------------------------------------ - -------------------------------------------------- - ---| | data | node1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sant | | data | node2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sant | | data | node3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sant | +-------------------------------------------------------- -------------------------------------------------- ----+
DRBD-ressurser
La oss nå prøve å lage vår nye DRBD-ressurs:
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2
La oss sjekke de opprettede ressursene:
linstor resource list
+-------------------------------------------------------- -------------------------------------------------- ---+ | Node | Ressurs | StoragePool | VolumeNr | MinorNr | Enhetsnavn | Tildelt | InUse | Stat | |------------------------------------------------ - -------------------------------------------------- - --| | node1 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Ubrukt | Oppdatert | | node2 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Ubrukt | Oppdatert | +-------------------------------------------------------- -------------------------------------------------- ---+
Flott! — vi ser at ressursen ble opprettet på de to første nodene, vi kan også prøve å lage en diskløs ressurs på den tredje:
linstor resource create --diskless node3 myres
På noder vil du alltid finne denne enheten som /dev/drbd1084
eller /dev/drbd/by-res/myres/0
Slik fungerer Linstor kan du få mer informasjon fra
Nå skal jeg fortelle deg hvordan du integrerer det med OpenNebula
Sette opp OpenNebula
Jeg vil ikke gå for dypt inn i OpenNebula-oppsettprosessen, fordi... alle trinn er beskrevet i detalj i
linstor_un
For å løse dette problemet skrev jeg min egen driver -
Hele installasjonen utføres på frontend OpenNebula-nodene og krever ikke ytterligere handlinger på beregningsnodene.
Først av alt må vi sørge for at vi har det jq и linstor-klient:
apt-get install jq linstor-client
Lag linstor node list
skal vise en liste over noder. Alle OpenNebula-beregningsnoder må legges til Linstor-klyngen.
Last ned og installer plugin:
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
Nå må vi legge den til OpenNebula-konfigurasjonen, for å gjøre dette følger vi de enkle trinnene beskrevet
Start deretter OpenNebula på nytt:
systemctl restart opennebula
Og legg til våre 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 bildebutikken:
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 antall datareplikaer som vil bli opprettet for hvert nytt bilde i OpenNebula. - Parameter
CLONE_MODE
indikerer nøyaktig hvordan bilder vil bli klonet når nye virtuelle maskiner opprettes,snapshot
- vil lage et øyeblikksbilde av bildet og distribuere en virtuell maskin fra øyeblikksbildet,copy
— vil lage en fullstendig kopi av bildet for hver virtuell maskin. - В
BRIDGE_LIST
Det anbefales å spesifisere alle noder som skal brukes til å utføre bildekloningsoperasjoner.
For en fullstendig liste over støttede parametere, se
Dette fullfører oppsettet, nå kan du laste ned noe apparat fra den offisielle
Prosjektlink:
Kilde: www.habr.com