LINSTOR-opslag en de integratie met OpenNebula

LINSTOR-opslag en de integratie met OpenNebula

Niet zo lang geleden presenteerden de jongens van LINBIT hun nieuwe SDS-oplossing - Linstor. Dit is een volledig vrij opslagoplossing die gebruikmaakt van bewezen technologieƫn: DRBD, LVM, ZFS. Linstor combineert eenvoud met een goed doordachte architectuur, wat zorgt voor stabiliteit en indrukwekkende prestaties.

Vandaag wil ik er iets dieper op ingaan en laten zien hoe eenvoudig het is om te integreren met OpenNebula met behulp van linstor_un - de nieuwe driver die ik speciaal voor dit doel heb ontwikkeld.

Linstor in combinatie met OpenNebula maakt het mogelijk om een snelle en betrouwbare cloud te bouwen die probleemloos op je eigen infrastructuur kan worden uitgerold.

De architectuur van Linstor

Linstor is op zichzelf geen bestandssysteem of blokopslag; Linstor is een orchestrator die een abstractielaag biedt die het mogelijk maakt om volumes te automatiseren in LVM of ZFS en deze te repliceren met behulp van DRBD9.

Stereotypen doorbreken

Maar wacht eens, DRBD? - Waarom zou je dat automatiseren en hoe zou dat überhaupt kunnen werken?

Laten we terugdenken aan het verleden, toen DRBD8 volop in gebruik was. De standaardgebruik waarvoor het bedoeld was, hield in dat je ƩƩn groot blokapparaat maakte en dit opdeelde in veel kleine stukjes, met behulp van hetzelfde LVM. Een soort mdadm RAID-1, maar met replicatie via het netwerk.

Deze aanpak heeft zijn tekortkomingen, en daarom zijn met de komst van DRBD9 de principes van opslagoplossingen veranderd; nu wordt er voor elke virtuele machine een apart DRBD-apparaat gemaakt.

De aanpak met onafhankelijke blokapparaten maakt een betere benutting van de ruimte in de cluster mogelijk en voegt bovendien een aantal extra mogelijkheden toe. Zo kan voor elk van deze apparaten het aantal replicaties, hun locatie en individuele instellingen worden gedefinieerd. Ze zijn eenvoudig te maken/verwijderen, snapshots te maken, de grootte aan te passen, versleuteling in te schakelen en nog veel meer. Het is vermeldenswaard dat DRBD9 ook quorum ondersteunt, wat helpt om split-brain situaties te voorkomen.

Hulpmiddelen en backends

Bij het maken van een nieuw blokapparaat plaatst Linstor het vereiste aantal replicaties op verschillende knooppunten in de cluster. Elke replicatie noemen we een DRBD-hulpbron.

Er zijn twee soorten hulpbronnen:

  • Data-hulpbron — zijn DRBD-apparaten die zijn geplaatst op een knooppunt in een LVM of ZFS-pool.
    Momenteel is er ondersteuning voor meerdere backends en dit aantal neemt voortdurend toe. Ondersteuning is er voor LVM, ThinLVM en ZFS. De laatste twee maken het mogelijk om snapshots te maken en te gebruiken.
  • Schijfloze resource — is een DRBD-apparaat dat op een node zonder backend is geplaatst, maar waarmee kan worden omgegaan als met een normaal blokapparaat. Alle lees-/schrijfbewerkingen worden doorgeleid naar data-resources. De dichtstbijzijnde analogon aan schijfloze resources is een iSCSI LUN.

Elke DRBD-resource kan tot 8 replica's hebben, en slechts ƩƩn daarvan kan standaard actief zijn — Primair, alle andere zullen Secundair zijn en hun gebruik zal onmogelijk zijn zolang er ten minste ƩƩn Primair is, dat wil zeggen dat ze simpelweg gegevens tussen elkaar zullen repliceren.

Door een DRBD-apparaat in het systeem te mounten, wordt het automatisch Primair, zodat zelfs een schijfloze resource, in de terminologie van DRBD, Primair kan zijn.

Waarom is Linstor nodig?

Door alle resource-intensievere taken aan de kernel toe te vertrouwen, is Linstor in wezen een gewoon Java-toepassing die het mogelijk maakt om eenvoudig het aanmaken van DRBD-resources te automatiseren.
Bij deze zal elke door hem gecreƫerde resource een onafhankelijke DRBD-cluster zijn die zelfstandig werkt, ongeacht de status van de control-plane en andere DRBD-resources.

Linstor bestaat uit slechts twee componenten:

  • Linstor-controller — De belangrijkste controller die API biedt voor het creĆ«ren en beheren van resources. Het communiceert ook met satellieten, controleert de beschikbare ruimte op hen en stuurt opdrachten voor het creĆ«ren en verwijderen van nieuwe resources. Wordt in een enkele instantie uitgevoerd en gebruikt een database die zowel intern (H2) als extern (PostgreSQL, MySQL, MariaDB) kan zijn.
  • Linstor-satellite — Wordt geĆÆnstalleerd op alle storage-nodes en biedt de controller informatie over beschikbare ruimte, en voert taken uit die van de controller zijn ontvangen voor het creĆ«ren en verwijderen van nieuwe volumes en DRBD-apparaten erbovenop.

Linstor werkt met de volgende kernbegrippen:

  • Node — fysieke server waarop DRBD-resources zullen worden gemaakt en gebruikt.
  • Storage Pool — LVM of ZFS pool die op een node is gemaakt waarin DRBD-resources worden geplaatst. Een schijfloze pool is ook mogelijk — dit is een pool waarin alleen schijfloze resources worden geplaatst.
  • Resource Definitie — Definitie van de hulpbron, in wezen is dit een prototype dat de naam en al zijn eigenschappen beschrijft.
  • Volume Definitie — Definitie van een volume. Elke hulpbron kan uit meerdere volumes bestaan, elk volume moet een grootte hebben.
  • Hulpbron — Een gecreĆ«erde instantie van een blokapparaat, elke hulpbron moet op een bepaalde node worden geplaatst en in een opslagpool.

Installatie van Linstor

Als systeem raad ik aan om Ubuntu te gebruiken, omdat hiervoor een kant-en-klaar PPA beschikbaar is.:

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

Of Debian, waar Linstor kan worden geïnstalleerd uit de officiële repository voor 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

Hier is het eenvoudig:

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

Storage-nodes

Op dit moment wordt er een in-tree kernelmodule in de Linux-kern geleverd, DRBD8, helaas is deze niet geschikt voor ons en moeten we DRBD9:

apt-get install drbd-dkms

Zoals de praktijk laat zien, ontstaan de meeste problemen precies omdat de DRBD8-module in het systeem geladen is, en niet DRBD9. Gelukkig is dit gemakkelijk te controleren door:

modprobe drbd
cat /proc/drbd

Als je ziet version: 9 — dan is alles in orde, als version: 8 — dan is er iets mis gegaan en moet je aanvullende stappen ondernemen om de oorzaken te achterhalen.

Laten we nu linstor-satellite en drbd-utils:

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

Cluster maken

Storage pools en nodes

Als backend nemen we ThinLVM, omdat dit het eenvoudigste is en snapshots ondersteunt.
Installeer lvm2, als je dit nog niet hebt gedaan, laten we een ThinLVM pool aanmaken op al onze storage-nodes:

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

Alle verdere handelingen kunnen rechtstreeks op de controller worden uitgevoerd:

Laten we onze nodes toevoegen:

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

Laten we storage pools aanmaken:

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

Laten we nu de aangemaakte pools controleren:

linstor storage-pool list

Als alles goed is uitgevoerd, zouden we iets moeten zien zoals:

+-------------------------------------------------------------------------------------------------------+
| StoragePool | Node  | Driver   | PoolName          | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------------|
| data        | node1 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node2 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node3 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
+-------------------------------------------------------------------------------------------------------+

DRBD-resources

Laten we nu proberen onze nieuwe DRBD-resource te creƫren:

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

Laten we de gemaakte resources controleren:

linstor resource list 

+------------------------------------------------------------------------------------------------------+
| Node  | Resource | StoragePool | VolumeNr | MinorNr | DeviceName    | Allocated  | InUse  |    State |
|------------------------------------------------------------------------------------------------------|
| node1 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
| node2 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
+------------------------------------------------------------------------------------------------------+

Uitstekend! — we zien dat de resource is aangemaakt op de eerste twee nodes, we kunnen ook proberen een diskless-resource op de derde te creĆ«ren:

linstor resource create --diskless node3 myres

Op de nodes vind je dit apparaat altijd als /dev/drbd1084 of /dev/drbd/by-res/myres/0

Zo werkt Linstor, je kunt meer informatie krijgen uit de officiƫle documentatie.

Nu zal ik uitleggen hoe je het kunt integreren met OpenNebula

Configuratie van OpenNebula

Ik zal niet te diep ingaan op het configureren van OpenNebula, omdat alle stappen gedetailleerd zijn beschreven in de officiƫle documentatie, waar ik je dan ook aanraad om naar te verwijzen, ik zal alleen de integratie van OpenNebula met Linstor uitleggen.

linstor_un

Voor deze taak heb ik mijn eigen driver geschreven — linstor_un, op dit moment is deze beschikbaar als een plugin en moet apart worden geĆÆnstalleerd.

De installatie vindt plaats op de frontend OpenNebula-nodes en vereist geen verdere acties op de compute-nodes.

Allereerst moeten we ervoor zorgen dat we hebben jq en linstor-client:

apt-get install jq linstor-client

Opdracht linstor node list moet de lijst met nodes weergeven. Alle compute-nodes van OpenNebula moeten aan de Linstor-cluster zijn toegevoegd.

Laten we de plugin downloaden en installeren:

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 moeten we het aan de OpenNebula-configuratie toevoegen. Hiervoor volgen we de eenvoudige stappen die zijn beschreven hier.

Daarna herstarten we OpenNebula:

systemctl restart opennebula

En we voegen onze datastores toe, systeem:

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

En de opslag van afbeeldingen:

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 geeft het aantal data-replicas aan dat zal worden aangemaakt voor elke nieuwe afbeelding in OpenNebula.
  • Parameter CLONE_MODE geeft aan hoe afbeeldingen zullen worden gekloond bij het aanmaken van nieuwe virtuele machines, snapshot — maakt een snapshot van de afbeelding en draait de virtuele machine uit dat snapshot, copy — maakt een volledige kopie van de afbeelding voor elke virtuele machine.
  • In BRIDGE_LIST het is aan te raden om alle knooppunten op te geven die zullen worden gebruikt voor het uitvoeren van kloningsoperaties.

Een volledige lijst van ondersteunde parameters is te vinden in README van het project.

Hiermee is de configuratie voltooid, nu kunnen we een appliance downloaden uit de officiƫle OpenNebula Marketplace en virtuele machines uit deze appliance maken.

Link naar het project:
https://github.com/OpenNebula/addon-linstor_un

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster