
Vor nicht allzu langer Zeit haben die Leute von LINBIT ihre neue SDS-Lösung â Linstor â vorgestellt. Dies ist ein vollstĂ€ndig offenes Speichersystem, das auf bewĂ€hrten Technologien basiert: DRBD, LVM, ZFS. Linstor kombiniert Benutzerfreundlichkeit mit einer durchdachten Architektur, die StabilitĂ€t und beeindruckende Ergebnisse ermöglicht.
Heute möchte ich etwas genauer darauf eingehen und zeigen, wie einfach es ist, es mit OpenNebula zu integrieren, indem ich linstor_un verwende â einen neuen Treiber, den ich speziell fĂŒr diesen Zweck entwickelt habe.
Linstor in Kombination mit OpenNebula ermöglicht den Aufbau einer schnellen und zuverlÀssigen Cloud, die problemlos auf eigener Infrastruktur bereitgestellt werden kann.
Die Architektur von Linstor
Linstor selbst ist weder ein Dateisystem noch ein Blockspeicher. Linstor ist ein Orchestrator, der eine Abstraktionsschicht bereitstellt, um die Erstellung von Volumes in LVM oder ZFS zu automatisieren und diese mit DRBD9 zu replizieren.
Mythen brechen
Aber halt, DRBD? â Warum sollte man es automatisieren, und wie funktioniert das ĂŒberhaupt?
Erinnern wir uns an die Zeit, als DRBD8 beliebt war. Seine Standardnutzung bestand darin, ein groĂes BlockgerĂ€t zu erstellen und dieses mithilfe von LVM in viele kleine Teile aufzuteilen. Eine Art mdadm RAID-1, aber mit Netzwerk-Replikation.
Dieser Ansatz hat einige Nachteile, weshalb mit der EinfĂŒhrung von DRBD9 die Prinzipien der Speicherkonzeption geĂ€ndert wurden. Jetzt wird fĂŒr jede virtuelle Maschine ein separates DRBD-GerĂ€t erstellt.
Der Ansatz mit unabhĂ€ngigen BlockgerĂ€ten ermöglicht eine bessere Ausnutzung des Raums im Cluster und bietet zudem eine Reihe zusĂ€tzlicher Möglichkeiten. Zum Beispiel kann fĂŒr jedes dieser GerĂ€te die Anzahl der Replikate, deren Standort und individuelle Einstellungen definiert werden. Sie lassen sich einfach erstellen/entfernen, Snapshots machen, die GröĂe Ă€ndern, VerschlĂŒsselung aktivieren und vieles mehr. Es ist bemerkenswert, dass DRBD9 auch Quorum unterstĂŒtzt, was Split-Brain-Situationen vermeiden hilft.
Ressourcen und Backends
Beim Erstellen eines neuen BlockgerÀts platziert Linstor die erforderliche Anzahl von Replikaten auf verschiedenen Knoten im Cluster. Jede dieser Replikate nennen wir DRBD-Ressource.
Ressourcen gibt es in zwei Typen:
- Datenressource â sind DRBD-GerĂ€te, die in einem LVM- oder ZFS-Pool auf einem Knoten bereitgestellt werden.
Derzeit werden mehrere Backends unterstĂŒtzt, und ihre Anzahl wĂ€chst kontinuierlich. Es gibt UnterstĂŒtzung fĂŒr LVM, ThinLVM und ZFS. Letztere ermöglichen das Erstellen und Verwenden von Snapshots. - Diskless-Ressource â ist ein DRBD-GerĂ€t, das auf einem Knoten ohne Backend bereitgestellt wird, es handelt sich jedoch um ein gewöhnliches BlockgerĂ€t, bei dem alle Lese-/Schreiboperationen auf die Datenressourcen umgeleitet werden. Der nĂ€chste Analog zu Diskless-Ressourcen ist ein iSCSI LUN.
Jede DRBD-Ressource kann bis zu 8 Replikate haben, und nur eines davon kann standardmĂ€Ăig aktiv sein â Primary, alle anderen werden als Secondary eingestuft und können erst verwendet werden, wenn mindestens ein Primary vorhanden ist, das heiĂt, sie replizieren einfach die Daten untereinander.
Wenn das DRBD-GerÀt im System gemountet wird, wird es automatisch zu Primary, sodass sogar eine Diskless-Ressource in der Terminologie von DRBD als Primary fungieren kann.
Warum ist Linstor notwendig?
Indem es alle ressourcenintensiven Aufgaben dem Kern anvertraut, ist Linstor im Wesentlichen eine herkömmliche Java-Anwendung, die es ermöglicht, die Erstellung von DRBD-Ressourcen mĂŒhelos zu automatisieren.
Jede erstellte Ressource wird ein unabhÀngiger DRBD-Cluster sein, der eigenstÀndig funktioniert, unabhÀngig vom Zustand des Control-Plans und anderer DRBD-Ressourcen.
Linstor besteht aus zwei Komponenten:
- Linstor-Controller â Der Hauptcontroller, der eine API zur Erstellung und Verwaltung von Ressourcen bereitstellt. Er kommuniziert auch mit den Satelliten, um den verfĂŒgbaren Speicherplatz zu ĂŒberprĂŒfen, und gibt AuftrĂ€ge zur Erstellung und Löschung neuer Ressourcen aus. Wird als Einzelinstanz gestartet und nutzt eine Datenbank, die sowohl intern (H2) als auch extern (PostgreSQL, MySQL, MariaDB) sein kann.
- Linstor-Satellite â Wird auf allen Storage-Nodes installiert und liefert dem Controller Informationen ĂŒber den freien Speicherplatz. AuĂerdem fĂŒhrt er die vom Controller erhaltenen Aufgaben zur Erstellung und Löschung neuer Volumes und DRBD-GerĂ€te durch.
Linstor operiert mit den folgenden SchlĂŒsselbegriffen:
- Knoten â Ein physischer Server, auf dem DRBD-Ressourcen erstellt und genutzt werden.
- Storage-Pool â Ein LVM- oder ZFS-Pool, der auf dem Knoten erstellt wird, in dem DRBD-Ressourcen platziert werden. Auch ein diskless-Pool ist möglich â ein Pool, der nur diskless-Ressourcen enthĂ€lt.
- Ressourcendefinition â Die Ressourcendefinition ist im Wesentlichen ein Prototyp, der den Namen und all seine Eigenschaften beschreibt.
- Volumendefinition â Die Volumendefinition. Jede Ressource kann aus mehreren Volumen bestehen, und jedes Volumen muss eine GröĂe haben.
- Ressource â Eine erstellte Instanz eines BlockgerĂ€ts, jede Ressource muss auf einem bestimmten Knoten und in einem Speicherpool platziert sein.
Installation von Linstor
Ich empfehle die Verwendung von Ubuntu, da es dafĂŒr ein :
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get updateAlternativ können Sie Debian verwenden, wo Linstor aus dem offiziellen Repository fĂŒr Proxmox 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 updateController
Hier ist alles einfach:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controllerStorage-Knoten
Der Linux-Kernel enthĂ€lt derzeit ein in-tree Kernel-Modul DRBD8, leider ist es nicht geeignet, und wir mĂŒssen DRBD9 installieren.:
apt-get install drbd-dkmsWie die Erfahrung zeigt, entstehen die meisten Schwierigkeiten genau dann, wenn das Modul DRBD8 und nicht DRBD9 in das System geladen werden. GlĂŒcklicherweise lĂ€sst sich das leicht ĂŒberprĂŒfen mit:
modprobe drbd
cat /proc/drbdWenn Sie sehen version: 9 â bedeutet alles ist in Ordnung, wenn Version: 8 â bedeutet, dass etwas schiefgelaufen ist und Sie weitere MaĂnahmen zur Ursachenforschung ergreifen mĂŒssen.
Jetzt installieren wir linstor-satellite und drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satelliteErstellung eines Clusters
Speicherpools und Knoten
Als Backend verwenden wir ThinLVM, da es am einfachsten ist und Snapshots unterstĂŒtzt.
Installieren Sie lvm2, falls Sie das noch nicht gemacht haben, und lassen Sie uns einen ThinLVM-Pool auf allen unseren Storage-Knoten erstellen:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpoolAlle weiteren Schritte können direkt auf dem 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.13Erstellen wir Speicherpools:
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/thinpoolJetzt ĂŒberprĂŒfen wir die erstellten Pools:
linstor storage-pool listWenn alles richtig gemacht wurde, sollten wir etwas wie Folgendes sehen:
+-------------------------------------------------------------------------------------------------------+ | Speicherpool | Knoten | Treiber | Poolname | FreikapazitĂ€t | GesamtkapazitĂ€t | UnterstĂŒtztSnapshots | |-------------------------------------------------------------------------------------------------------| | daten | knoten1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | true | | daten | knoten2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | true | | daten | knoten3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | true | +-------------------------------------------------------------------------------------------------------+
DRBD-Ressourcen
Lassen Sie uns jetzt versuchen, unsere neue DRBD-Ressource zu erstellen:
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2ĂberprĂŒfen wir die erstellten Ressourcen:
linstor resource list +------------------------------------------------------------------------------------------------------+ | Knoten | Ressource | Speicherpool | VolumenNr | MinorNr | GerÀteName | Zugewiesen | InBenutzung | Status | |------------------------------------------------------------------------------------------------------| | knoten1 | myres | daten | 0 | 1084 | /dev/drbd1084 | 52 KiB | Unbenutzt | Aktuell | | knoten2 | myres | daten | 0 | 1084 | /dev/drbd1084 | 52 KiB | Unbenutzt | Aktuell | +------------------------------------------------------------------------------------------------------+
Ausgezeichnet! â wir sehen, dass die Ressource auf den ersten beiden Knoten erstellt wurde. Wir können auch versuchen, eine diskless-Ressource auf dem dritten zu erstellen:
linstor resource create --diskless knoten3 myresAuf den Knoten finden Sie immer dieses GerÀt wie /dev/drbd1084 oder /dev/drbd/by-res/myres/0
So funktioniert Linstor, weitere Informationen können Sie aus .
Jetzt werde ich erklÀren, wie man es mit OpenNebula integriert
Konfiguration von OpenNebula
Ich werde nicht tief in den Konfigurationsprozess von OpenNebula eintauchen, da alle Schritte detailliert in , auf die ich Ihnen empfehle zuzugreifen, beschrieben sind. Ich werde nur ĂŒber die Integration von OpenNebula mit Linstor sprechen.
linstor_un
Um diese Aufgabe zu lösen, habe ich einen eigenen Treiber geschrieben â , der momentan als Plugin verfĂŒgbar ist und separat installiert werden muss.
Die gesamte Installation erfolgt auf den Frontend OpenNebula-Knoten und erfordert keine zusÀtzlichen Schritte auf den Compute-Knoten.
Zuerst mĂŒssen wir sicherstellen, dass wir jq und linstor-client:
apt-get install jq linstor-clientDer Befehl linstor node list sollte eine Liste der Knoten ausgeben. Alle Compute-Knoten von OpenNebula sollten 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-masterJetzt mĂŒssen wir es zur OpenNebula-Konfiguration hinzufĂŒgen. Dazu fĂŒhren wir die beschriebenen einfachen Schritte aus. .
AnschlieĂend starten wir OpenNebula neu:
systemctl restart opennebulaUnd fĂŒgen unsere Datenspeicher hinzu, das 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.confUnd den Speicher fĂŒr Bilder:
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_PLACEzeigt die Anzahl der Daten-Replikate an, die fĂŒr jedes neue Abbild in OpenNebula erstellt werden. - Parameter
CLONE_MODEgibt an, wie die Abbilder beim Erstellen neuer virtueller Maschinen geklont werden.snapshotâ erstellt einen Snapshot des Abbildes und entwickelt die virtuelle Maschine aus dem Snapshot.copyâ erstellt ein vollstĂ€ndiges Abbild fĂŒr jede virtuelle Maschine. - In
BRIDGE_LISTEs wird empfohlen, alle Knoten anzugeben, die fĂŒr die DurchfĂŒhrung von Clone-Operationen verwendet werden.
Die vollstĂ€ndige Liste der unterstĂŒtzten Parameter finden Sie in der des Projekts bekanntgaben.
Damit ist die Konfiguration abgeschlossen, jetzt können Sie ein Appliance aus dem offiziellen laden und virtuelle Maschinen daraus erstellen.
Link zum Projekt:
Quelle: habr.com
