
Vor nicht allzu langer Zeit prÀsentierten die LINBIT-Leute ihre neue SDS-Lösung - Linstor. Dies ist ein völlig kostenloser Speicher, der auf bewÀhrten Technologien basiert: DRBD, LVM, ZFS. Linstor kombiniert Einfachheit und eine gut gestaltete Architektur, die StabilitÀt und beeindruckende Ergebnisse ermöglicht.
Heute möchte ich Ihnen etwas mehr darĂŒber erzĂ€hlen 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 erstellen, die problemlos in Ihrer eigenen Infrastruktur bereitgestellt werden kann.
Linstor Architektur
Linstor ist weder ein Dateisystem noch ein Block-Repository an sich. Linstor ist ein Orchestrator, der eine Abstraktionsschicht bereitstellt, die die Volume-Erstellung in LVM oder ZFS automatisiert und diese mit DRBD9 repliziert.
Klischees brechen
Aber warte, DRBD? "Warum automatisieren und wie kann es ĂŒberhaupt funktionieren?"
Erinnern Sie sich an die Vergangenheit, als DRBD8 durchweg beliebt war. Die Standardverwendung beinhaltete die Erstellung eines groĂen BlockgerĂ€ts und das Schneiden in viele kleine StĂŒcke unter Verwendung des gleichen LVM. Eine Art Mdadm RAID-1, jedoch mit Replikation ĂŒber das Netzwerk.
Dieser Ansatz ist nicht ohne Nachteile, und daher haben sich mit dem Aufkommen von DRBD9 die Prinzipien der Speicherkonstruktion geĂ€ndert. Jetzt wird fĂŒr jede virtuelle Maschine ein separates DRBD-GerĂ€t erstellt.
Der Ansatz mit unabhĂ€ngigen BlockgerĂ€ten ermöglicht es Ihnen, den Speicherplatz im Cluster besser zu nutzen, und fĂŒgt eine Reihe zusĂ€tzlicher Funktionen hinzu. Beispielsweise können Sie fĂŒr jedes dieser GerĂ€te die Anzahl der Replikate, ihren Standort und die individuellen Einstellungen bestimmen. Sie sind einfach zu erstellen / löschen, SchnappschĂŒsse zu erstellen, die GröĂe zu Ă€ndern, die VerschlĂŒsselung zu aktivieren und vieles mehr. Es ist erwĂ€hnenswert, dass DRBD9 auch das Quorum unterstĂŒtzt, wodurch Split-Brain-Situationen vermieden werden.
Ressourcen und Backends
Beim Erstellen eines neuen BlockgerÀts platziert Linstor die erforderliche Anzahl von Replikaten auf verschiedenen Knoten im Cluster. Wir werden jedes dieser Replikate als DRBD-Ressource bezeichnen.
Es gibt zwei Arten von Ressourcen:
- Datenressource - ist ein DRBD-GerÀt, das sich auf einem Knoten in einem LVM- oder ZFS-Pool befindet.
Im Moment gibt es UnterstĂŒtzung fĂŒr mehrere Backends und ihre Anzahl wĂ€chst stĂ€ndig. LVM, ThinLVM und ZFS werden unterstĂŒtzt. Mit den letzten beiden können Sie SchnappschĂŒsse erstellen und verwenden. - Diskless-Ressource - ist ein DRBD-GerĂ€t, das sich auf einem Knoten ohne Backend befindet. Wenn es jedoch wie ein normales BlockgerĂ€t behandelt werden kann, werden alle Lese- / SchreibvorgĂ€nge an Datenressourcen umgeleitet. Das nĂ€chste Ăquivalent zu plattenlosen Ressourcen ist die iSCSI-LUN.
Jede DRBD-Ressource kann bis zu 8 Replikate haben, und nur eine davon kann standardmĂ€Ăig aktiv sein - PrimĂ€r , der Rest ist SekundĂ€r und ihre Verwendung ist unmöglich, bis mindestens eine PrimĂ€r vorhanden ist, dh sie werden einfach repliziert Daten zwischen Ihnen.
Wenn ein DRBD-GerÀt in das System eingebunden wird, wird es automatisch primÀr , sodass selbst eine plattenlose Ressource in der DRBD-Terminologie primÀr sein kann.
Warum brauchen wir Linstor?
Linstor vertraut alle kernintensiven Aufgaben dem Kernel an und ist im Wesentlichen eine regulÀre Java-Anwendung, mit der die Erstellung von DRBD-Ressourcen einfach automatisiert werden kann.
DarĂŒber hinaus ist jede von ihm erstellte Ressource ein unabhĂ€ngiger DRBD-Cluster, 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. Er kommuniziert auch mit Satelliten, ĂŒberprĂŒft den freien Speicherplatz auf ihnen und sendet Aufgaben zum Erstellen und Löschen neuer Ressourcen. Es wird in einer einzelnen Instanz ausgefĂŒhrt und verwendet eine Datenbank, die entweder intern (H2) oder extern (PostgreSQL, MySQL, MariaDB) sein kann.
- Linstor-Satellit - Wird auf allen Speicherknoten installiert und stellt dem Controller Informationen zum freien Speicherplatz zur VerfĂŒgung. AuĂerdem werden vom Controller empfangene Aufgaben ausgefĂŒhrt, um neue Volumes und DRBD-GerĂ€te darĂŒber zu erstellen und zu löschen.
Linstor arbeitet mit folgenden SchlĂŒsselkonzepten:
- Der Knoten ist ein physischer Server, auf dem DRBD-Ressourcen erstellt und verwendet werden.
- Speicherpool - LVM- oder ZFS-Pool, der auf einem Knoten erstellt wurde, in dem DRBD-Ressourcen abgelegt werden. Ein plattenloser Pool ist ebenfalls möglich - dies ist ein Pool, in dem nur plattenlose Ressourcen gehostet werden.
- Ressourcendefinition - Eine Ressourcendefinition ist im Wesentlichen ein 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 - Eine erstellte Instanz eines BlockgerÀts. Jede Ressource muss sich auf einem bestimmten Knoten und in einem Speicherpool befinden.
Installieren Sie Linstor
Ich empfehle Ubuntu als System zu verwenden, als Es gibt eine fertige PPA dafĂŒr:
add-apt-repository ppa:linbit/linbit-drbd9-stack apt-get update
Oder Debian, 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 update
Controller
Hier ist alles einfach:
apt-get install linstor-controller linstor-client systemctl enable linstor-controller systemctl start linstor-controller
Speicherknoten
Derzeit wird das In-Tree- DRBD8- Kernelmodul im Linux-Kernel bereitgestellt. Leider passt es nicht zu uns und wir mĂŒssen DRBD9 installieren:
apt-get install drbd-dkms
Wie die Praxis zeigt, treten die meisten Schwierigkeiten genau deshalb auf, weil das DRBD8-Modul in das System geladen wird und nicht DRBD9. GlĂŒcklicherweise ist dies leicht zu ĂŒberprĂŒfen, indem Sie Folgendes tun:
modprobe drbd cat /proc/drbd
Wenn Sie Version: 9 sehen - dann ist alles in Ordnung, wenn Version: 8 - dann ist etwas schief gelaufen und Sie mĂŒssen zusĂ€tzliche Schritte unternehmen, um die GrĂŒnde herauszufinden.
Installieren Sie nun linstor-satelliten- und drbd-utils :
apt-get install linstor-satellite drbd-utils systemctl enable linstor-satellite systemctl start linstor-satellite
Clustererstellung
Speicherpools und Knoten
Wir werden ThinLVM als Backend nehmen , as Es ist das einfachste und unterstĂŒtzt SchnappschĂŒsse.
Installieren Sie lvm2, falls Sie dies noch nicht getan haben, und erstellen Sie 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 auf der Steuerung ausgefĂŒhrt werden:
FĂŒgen Sie 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
Erstellen Sie 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/thinpool
ĂberprĂŒfen Sie nun die erstellten Pools:
linstor storage-pool list
Wenn alles richtig gemacht ist, sollten wir etwas sehen wie:
+ --------------------------------------------- -------------------------------------------------- ---- +
| StoragePool | Knoten | Fahrer | PoolName | FreeCapacity | GesamtkapazitĂ€t | UnterstĂŒtzt SchnappschĂŒsse |
| --------------------------------------------- -------------------------------------------------- ---- |
| 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
Lassen Sie uns die erstellten Ressourcen ĂŒberprĂŒfen:
linstor volume list
+ --------------------------------------------- -------------------------------------------------- --- +
| Knoten | Ressource | StoragePool | VolumeNr | MinorNr | GerÀtename | Zugewiesen | InUse | Staat |
| --------------------------------------------- -------------------------------------------------- --- |
| 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 plattenlose Ressource zu erstellen:
linstor resource create --diskless node3 myres
Auf den Knoten finden Sie dieses GerÀt immer als /dev/drbd1084
oder /dev/drbd/by-res/myres/0
So funktioniert Linstor. Weitere Informationen finden Sie in der offiziellen Dokumentation .
Jetzt werde ich darĂŒber sprechen, wie man es in OpenNebula integriert
Konfigurieren Sie OpenNebula
Ich werde nicht tief in den Prozess der Einrichtung von OpenNebula einsteigen, as Alle Schritte sind in der offiziellen Dokumentation ausfĂŒhrlich beschrieben. Ich empfehle Ihnen, sich an sie zu wenden. Ich werde Ihnen nur die Integration von OpenNebula in Linstor erlĂ€utern.
linstor_un
Um dieses Problem zu lösen, habe ich meinen eigenen Treiber geschrieben - linstor_un. Derzeit ist er als Plug-In verfĂŒgbar und muss separat installiert werden.
Die gesamte Installation wird auf den OpenNebula-Knoten des Frontends ausgefĂŒhrt und erfordert keine zusĂ€tzlichen Aktionen auf den Rechenknoten.
ZunĂ€chst mĂŒssen wir sicherstellen, dass wir jq und linstor-client haben :
apt-get install jq linstor-client
Der Befehl linstor node list
sollte die Knoten linstor node list
. Alle Rechenknoten von OpenNebula 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 der OpenNebula-Konfiguration hinzufĂŒgen. Dazu fĂŒhren wir die hier beschriebenen einfachen Schritte aus .
Starten Sie dann OpenNebula neu:
systemctl restart opennebula
Und fĂŒgen Sie unser Datenspeichersystem hinzu:
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 Bildspeicherung:
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
- Der Parameter
AUTO_PLACE
zeigt die Anzahl der Datenreplikate an, die fĂŒr jedes neue Image in OpenNebula erstellt werden. - Der Parameter
CLONE_MODE
gibt an, wie die Images beim Erstellen neuer virtueller Maschinen geklont werden. snapshot
- erstellt einen Snapshot des Images und stellt eine virtuelle Maschine aus Snapshot bereit. copy
- erstellt eine vollstĂ€ndige Kopie des Images fĂŒr jede virtuelle Maschine. BRIDGE_LIST
empfiehlt, alle Knoten anzugeben, die zum AusfĂŒhren von BRIDGE_LIST
verwendet werden.
Eine vollstĂ€ndige Liste der unterstĂŒtzten Parameter finden Sie im README- Projekt.
Nachdem dieses Setup abgeschlossen ist, können Sie jetzt eine Appliance vom offiziellen OpenNebula Marketplace herunterladen und daraus virtuelle Maschinen erstellen.
Link zum Projekt