LINSTOR-lagring og dets integrasjon med OpenNebula

LINSTOR-lagring og dets integrasjon med OpenNebula

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 klar PPA:

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 offisiell dokumentasjon.

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 offisiell dokumentasjon, som jeg anbefaler deg å kontakte, vil jeg bare fortelle deg om integreringen av OpenNebula med Linstor.

linstor_un

For å løse dette problemet skrev jeg min egen driver - linstor_un, den er for øyeblikket tilgjengelig som en plugin og må installeres separat.

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 her.

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 README prosjekt.

Dette fullfører oppsettet, nå kan du laste ned noe apparat fra den offisielle OpenNebula Marketplace og lage virtuelle maskiner fra den.

Prosjektlink:
https://github.com/OpenNebula/addon-linstor_un

Kilde: www.habr.com

Legg til en kommentar