LINSTOR-Speicher und seine Integration mit OpenNebula

LINSTOR-Speicher und seine Integration mit OpenNebula

Vor nicht allzu langer Zeit stellten die Jungs von LINBIT ihre neue SDS-Lösung vor – Linstor. Dies ist ein völlig kostenloser Speicher, der auf bewährten Technologien basiert: DRBD, LVM, ZFS. Linstor vereint Einfachheit und gut durchdachte Architektur, wodurch Sie Stabilität und beeindruckende Ergebnisse erzielen können.

Heute möchte ich etwas mehr darüber sprechen und zeigen, wie einfach es mit linstor_un – einem neuen Treiber, den ich speziell für diesen Zweck entwickelt habe – in OpenNebula integriert werden kann.

Mit Linstor in Kombination mit OpenNebula können Sie eine schnelle und zuverlässige Cloud aufbauen, die problemlos auf Ihrer eigenen Infrastruktur bereitgestellt werden kann.

Linstor-Architektur

Linstor ist weder ein Dateisystem noch ein Blockspeicher an sich. Linstor ist ein Orchestrator, der eine Abstraktionsschicht bereitstellt, um die Erstellung von Volumes in LVM oder ZFS zu automatisieren und sie mithilfe von DRBD9 zu replizieren.

Wir brechen Klischees

Aber warte, DRBD? - Warum sollte man es automatisieren und wie kann es überhaupt funktionieren?

Erinnern wir uns an die Vergangenheit, als DRBD8 sehr beliebt war. Seine Standardverwendung bestand darin, ein großes Blockgerät zu erstellen und es unter Verwendung desselben LVM in viele kleine Stücke zu schneiden. Eine Art mdadm RAID-1, aber mit Netzwerkreplikation.

Dieser Ansatz ist nicht ohne Nachteile, und daher haben sich mit der Einführung von DRBD9 die Prinzipien des Speicheraufbaus geändert, nun wird für jede virtuelle Maschine ein separates DRBD-Gerät erstellt.

Der unabhängige Blockgeräte-Ansatz ermöglicht eine bessere Raumausnutzung im Cluster und fügt außerdem eine Reihe zusätzlicher Funktionen hinzu. Für jedes dieser Geräte können Sie beispielsweise die Anzahl der Replikate, deren Standort und individuelle Einstellungen bestimmen. Sie lassen sich einfach erstellen/löschen, Snapshots erstellen, ihre Größe ändern, Verschlüsselung aktivieren und vieles mehr. Es ist erwähnenswert, dass DRBD9 auch ein Quorum aufrechterhält, wodurch Split-Brain-Situationen vermieden werden.

Ressourcen und Backends

Beim Erstellen eines neuen Blockgeräts platziert Linstor die erforderliche Anzahl an Replikaten auf verschiedenen Knoten im Cluster. Wir nennen jedes dieser Replikate eine DRBD-Ressource.

Es gibt zwei Arten von Ressourcen:

  • Datenressource – stellt ein DRBD-Gerät dar, das sich auf einem Knoten in einem LVM- oder ZFS-Pool befindet.
    Derzeit werden mehrere Backends unterstützt und ihre Zahl wächst stetig. Es gibt Unterstützung für LVM, ThinLVM und ZFS. Mit den letzten beiden können Sie Snapshots erstellen und verwenden.
  • Festplattenlose Ressource – ist ein DRBD-Gerät, das auf einem Knoten ohne Backend gehostet wird, aber da es wie ein normales Blockgerät behandelt werden kann, werden alle Lese-/Schreibvorgänge auf Datenressourcen umgeleitet. Das nächste Analogon zu festplattenlosen Ressourcen ist iSCSI LUN.

Jede DRBD-Ressource kann bis zu 8 Replikate haben und nur eines davon kann standardmäßig aktiv sein primär, der Rest wird sein Sekundär und ihre Verwendung wird unmöglich sein, solange es mindestens einen Primärserver gibt, das heißt, sie werden einfach Daten untereinander replizieren.

Durch die Integration eines DRBD-Geräts in das System wird es automatisch aktiviert primär, daher kann sogar eine plattenlose Ressource in der DRBD-Terminologie primär sein.

Warum brauchen wir also Linstor?

Da Linstor alle ressourcenintensiven Aufgaben dem Kernel anvertraut, handelt es sich im Wesentlichen um eine reguläre Java-Anwendung, mit der Sie die Erstellung von DRBD-Ressourcen einfach automatisieren können.
Gleichzeitig wird jede von ihm erstellte Ressource ein unabhängiger DRBD-Cluster sein, der unabhängig vom Status der Steuerebene und anderer DRBD-Ressourcen unabhängig arbeitet.

Linstor besteht nur aus zwei Komponenten:

  • Linstor-Controller – Der Hauptcontroller, der eine API zum Erstellen und Verwalten von Ressourcen bereitstellt. Es kommuniziert auch mit Satelliten, überprüft den freien Speicherplatz auf ihnen und sendet Aufträge zum Erstellen und Löschen neuer Ressourcen. Läuft in einer einzelnen Instanz und verwendet eine Datenbank, die entweder intern (H2) oder extern (PostgreSQL, MySQL, MariaDB) sein kann.
  • Linstor-Satellit – Wird auf allen Speicherknoten installiert und versorgt den Controller mit Informationen über den freien Speicherplatz und führt außerdem vom Controller empfangene Aufgaben aus, um neue Volumes und darauf befindliche DRBD-Geräte zu erstellen und zu löschen.

Linstor arbeitet mit den folgenden Schlüsselkonzepten:

  • Knoten – ein physischer Server, auf dem DRBD-Ressourcen erstellt und verwendet werden.
  • Speicherpool – Auf dem Knoten erstellter LVM- oder ZFS-Pool, in dem DRBD-Ressourcen platziert werden. Auch ein plattenloser Pool ist möglich – dabei handelt es sich um einen Pool, in dem nur plattenlose Ressourcen platziert werden.
  • Ressourcendefinition - Definition einer Ressource, eigentlich handelt es sich um einen Prototyp, der den Namen und alle seine Eigenschaften beschreibt.
  • Volumendefinition — Volumendefinition. Jede Ressource kann aus mehreren Volumes bestehen, jedes Volume muss eine Größe haben.
  • Ressource – Wenn eine Instanz eines Blockgeräts erstellt wird, muss jede Ressource auf einem bestimmten Knoten und in einem Speicherpool platziert werden.

Installation von Linstor

Ich empfehle die Verwendung von Ubuntu als System, weil. existiert für sie fertiges PPA:

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

Oder Debian, wo Linstor aus dem offiziellen Proxmox-Repository installiert werden kann:

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 ist alles einfach:

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

Speicherknoten

Der Linux-Kernel wird derzeit mit einem In-Tree-Kernelmodul ausgeliefert DRBD8Leider passt es nicht zu uns und wir müssen es installieren DRBD9:

apt-get install drbd-dkms

Wie die Praxis zeigt, entstehen die meisten Schwierigkeiten gerade dadurch, dass das DRBD8-Modul in das System geladen wird und nicht DRBD9. Glücklicherweise lässt sich dies leicht überprüfen, indem Sie Folgendes ausführen:

modprobe drbd
cat /proc/drbd

Wenn du siehst Version: 9 - Alles ist in Ordnung, wenn Version: 8 - Es bedeutet, dass etwas schief gelaufen ist und Sie zusätzliche Schritte unternehmen müssen, um die Gründe herauszufinden.

Jetzt lasst uns installieren Linstor-Satellit и drbd-utils:

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

Erstellen Sie einen Cluster

Speicherpools und Knoten

Als Backend nehmen wir ThinLVM, Weil Es ist das einfachste und unterstützt Snapshots.
Setzen lvm2, falls Sie dies noch nicht getan haben, und erstellen wir einen ThinLVM-Pool auf allen unseren Speicherknoten:

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

Alle weiteren Aktionen können direkt am Controller durchgeführt werden:

Fügen wir unsere Knoten hinzu:

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

Lassen Sie uns Speicherpools erstellen:

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

Schauen wir uns nun die erstellten Pools an:

linstor storage-pool list

Wenn alles richtig gemacht wurde, sollten wir etwa Folgendes sehen:

+------------------------------------------------- -------------------------------------------------- ----+ | Speicherpool | Knoten | Fahrer | Poolname | freie Kapazität | Gesamtkapazität | Unterstützt Snapshots | |------------------------------------------------- -------------------------------------------------- ----| | Daten | Knoten1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | wahr | | Daten | Knoten2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | wahr | | Daten | Knoten3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | wahr | +------------------------------------------------- -------------------------------------------------- ----+

DRBD-Ressourcen

Versuchen wir nun, unsere neue DRBD-Ressource zu erstellen:

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

Schauen wir uns die erstellten Ressourcen an:

linstor resource list 

+------------------------------------------------- -------------------------------------------------- ---+ | Knoten | Ressource | Speicherpool | BandNr | MinorNr | Gerätename | Zugewiesen | im Einsatz | Zustand | |------------------------------------------------- -------------------------------------------------- ---| | Knoten1 | myres | Daten | 0 | 1084 | /dev/drbd1084 | 52 KiB | Unbenutzt | UpToDate | | Knoten2 | myres | Daten | 0 | 1084 | /dev/drbd1084 | 52 KiB | Unbenutzt | UpToDate | +------------------------------------------------- -------------------------------------------------- ---+

Großartig! - Wir sehen, dass die Ressource auf den ersten beiden Knoten erstellt wurde. Wir können auch versuchen, auf dem dritten Knoten eine Ressource ohne Festplatte zu erstellen:

linstor resource create --diskless node3 myres

Auf Knoten finden Sie dieses Gerät immer als /dev/drbd1084 oder /dev/drbd/by-res/myres/0

So funktioniert Linstor, weitere Informationen erhalten Sie hier amtliche Dokumentation.

Jetzt werde ich darüber sprechen, wie man es in OpenNebula integriert

OpenNebula einrichten

Ich werde nicht zu tief auf den OpenNebula-Einrichtungsprozess eingehen, weil Alle Schritte sind in detailliert beschrieben amtliche Dokumentation, auf die ich Ihnen empfehle, werde ich nur auf die Integration von OpenNebula mit Linstor eingehen.

linstor_un

Um dieses Problem zu lösen, habe ich meinen eigenen Treiber geschrieben - linstor_un, es ist derzeit als Plugin verfügbar und muss separat installiert werden.

Die gesamte Installation wird auf den Frontend-OpenNebula-Knoten durchgeführt und erfordert keine zusätzlichen Aktionen auf den Rechenknoten.

Zunächst müssen wir sicherstellen, dass wir das haben jq и Linstor-Client:

apt-get install jq linstor-client

Team linstor node list sollte eine Liste von Knoten anzeigen. Alle OpenNebula-Rechenknoten müssen dem Linstor-Cluster hinzugefügt werden.

Laden Sie das Plugin herunter und installieren Sie es:

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

Jetzt müssen wir es zur OpenNebula-Konfiguration hinzufügen. Dazu folgen wir den beschriebenen einfachen Schritten hier.

Starten Sie dann OpenNebula neu:

systemctl restart opennebula

Und fügen Sie unsere Datenspeicher hinzu, 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

Und der Bilderspeicher:

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 Zeigt die Anzahl der Datenreplikate an, die für jedes neue Bild in OpenNebula erstellt werden.
  • Parameter CLONE_MODE gibt genau an, wie Bilder beim Erstellen neuer virtueller Maschinen geklont werden. snapshot - erstellt einen Snapshot des Images und stellt eine virtuelle Maschine aus dem Snapshot bereit, copy - erstellt für jede virtuelle Maschine eine vollständige Kopie des Images.
  • В BRIDGE_LIST Es wird empfohlen, alle Knoten anzugeben, die zum Durchführen von Image-Klonvorgängen verwendet werden.

Eine vollständige Liste der unterstützten Optionen finden Sie unter README das Projekt.

Damit ist die Einrichtung abgeschlossen. Jetzt können Sie einige Appliances von der offiziellen Website herunterladen OpenNebula-Marktplatz und daraus virtuelle Maschinen erstellen.

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

Source: habr.com

Kommentar hinzufügen