Dies ist eine alte Version des Dokuments!


DNBD3 (Seite im Aufbau)

Das 'Distributed Network Block Device 3' ist ein neuartiges, verteiltes, blockbasiertes Speichersystem. Dateien werden nicht als ganzes, sondern blockweise gelesen und verteilt. Dies ermöglicht beim Einsatz eines DNBD3-Proxys einfaches Caching häufig angefragter Blöcke und eine sehr effiziente Übertragung. Je nach Konfiguration des Proxys können wahlweise vollständige Inhalte, also komplette VM-Abbilder, oder lediglich angefragte Blöcke repliziert werden. Mehrere DNBD3-Proxies können zudem problemlos im Verbund eingesetzt werden. Für das netzwerkbasierte System bwLehrpool ergeben sich durch die Verwendung von DNBD3 eine Reihe von Vorteilen gegenüber herkömmlichen Speicherlösungen.

DNBD3 wird von der Universität Freiburg weiterentwickelt und dort bereits seit Jahren unter anderem für bwLehrpool sowie bwHPCbwForCluster NEMO produktiv eingesetzt. Die aktuelle Version bwLehrpools enthält die entsprechenden Schnittstellen, um auch anderen Hochschulen die DNBD3-Nutzung unter bwLehrpool zu ermöglichen.

Die bwLehrpool-Clients beziehen alle benötigten Daten über Netzwerk. Der Satellitenserver liefert im Kilobytebereich Veranstaltungs-Metadaten und im Megabytebereich (~300MB) das grundlegende Minilinux aus; die Virtuellen Maschinen (~Gigabyte) werden in der Regel von einem separaten Storageserver (NFS/CIFS) bezogen. Die Bootdauer der Clients hängt somit maßgeblich von zwei Faktoren ab.

NFS- bzw. CIFS-basierter Aufbau
  • Der Leserate des Satelliten- bzw. Storageservers
  • Der Netzanbindung zwischen Server und Clients

Nebenstehende Grafik zeigt schematisch den üblichen Aufbau.

DNBD3 bietet speziell bei schlecht angebundenen Poolräumen Vorteile, wenn zeitgleich eine große Anzahl an Rechnern eine VM anfordert. Durch DNBD3 kann die anfallende Last verteilt und damit eine Reduktion der Bootdauer erzielt werden. In einer ersten Stufe werden lediglich die Virtuellen Maschinen über DNBD3 ausgeliefert. In zukünftigen Versionen kann auch das MiniLinux darüber verteilt werden.

Funktionsweise

Im Verbund eingesetzte Proxy-Server können angefragte Blöcke automatisch von anderen Proxy-Servern replizieren. [Hintergrundreplikation?]

Die Clients ermitteln selbstständig den ihnen in Hinblick auf Verbindungsgeschwindigkeit u.a. am nächsten liegenden Proxyserver. Fällt ein Proxy-Server aus, verwenden die Clients automatisch einen anderen Server.

Anwendungsbeispiel

Aufbau mit möglichem Flaschenhals
Nebenstehende Grafiken zeigen ein gängiges Problem. Raum A ist über einen 10GBit-Switch angebunden. Die Clients sind somit sehr schnell mit Metadaten, MiniLinux sowie der gestarteten VM versorgt. Raum B dagegen ist nur mit einem 100MBit-Switch ans Netzwerk angeschlossen. Daraus resultiert eine deutlich verminderte Bootgeschwindigkeit der Clients. Sowohl MiniLinux, als auch VMs müssen über den 100MBit-Flaschenhals ausgeliefert werden.

Mit Hilfe eines DNBD3-Servers bzw. DNBD3-Proxys lässt sich dieses Problem beheben. Die Ausgangslage bleibt die gleiche, jedoch wird anstatt eines NFS/CIFS-Storagesystems nun DNBD3 verwendet. Zusätzlich zum DNBD3-Server wurde im schwach angebundenen Raum B ein zusätzlicher DNBD3-Proxy installiert. Clients in diesem Raum erhalten VMs nun nicht mehr über den zentralen Server, sondern über den Proxy. Jeder Client nimmt eine Metrikmessung vor, um den schnellsten Server zu bestimmen. Ist die angeforderte VM noch nicht auf dem Proxy-Server vorhanden, wird diese automatisch im Hintergrund auf diesen repliziert. Der erste Start einer VM ist daher genauso langsam wie bisher. Nachfolgende Anfragen können jedoch direkt vom Proxy behandelt werden, so dass der bisherige Flaschenhals, die schlechte Anbindung des Raums, entfällt.
DNBD3-Proxy: Mitigierter Flaschenhals
Voraussetzung ist natürlich, dass innerhalb des Raumes die Anbindung zwischen den Clients und dem Proxy-Server besser als die Anbindung des Raumes selbst ist.

Vorbereitung und Konfiguration

DNBD3 Verwaltungsseite

Zur Aktivierung DNBD3s wählen Sie im Webinterface den entsprechenden Menüpunkt und klicken auf 'DNDB3 ein-/ausschalten'. Setzen Sie das Häkchen bei 'DNBD3 aktivieren', und gehen anschließend auf Speichern. Im Prinzip war es das schon. Neustartende Clients werden ab sofort die VMs über das DNBD3 Protokoll erhalten.

Sie können DNBD3 entweder exklusiv oder mit Fallback auf NFS/CIFS verwenden (Häkchen bei 'NFS-Fallback aktivieren' setzen). Im exklusiven Modus wird der Zugriff der Clients auf den kompletten VM-Speicher verhindert bzw. erschwert. Die Clients benötigen bei exklusivem Zugriff keine Berechtigungen auf den konfigurierten Share. Wenn Sie den Fallback-Modus nutzen, werden für die Clients weiterhin Leseberechtigungen benötigt.

Sie haben bisher nur einen Proxy, nämlich den Satellitenserver selbst. Unabhängig vom tatsächlichen Speicherort der VMS (intern, NFS, CIFS) laufen nun alle Clientzugriffe über den Satellitenserver. Falls Ihr NFS beispielsweise mit 10 GBit, der Satellitenserver jedoch nur mit 1 GBit angebunden ist, haben Sie nun einen neuen Flaschenhals geschaffen. Es ist daher dringend zu empfehlen, weitere Proxy-Server anzulegen und den Satellitenserver nach Möglichkeit ebenfalls mit 10 GBit anzubinden.

Zur Bereitstellung zusätzlicher Proxy-Server haben Sie zwei Möglichkeiten:

  1. Sie installieren auf einem bestehenden Linux-Server DNBD3 und fügen diesen als 'Externen Server' hinzu. Sie sind dann selbst für Konfiguration, Updates, Neustarts usw. verantwortlich.
  2. Sie nutzen einen dedizierten Rechner, binden diesen in bwLehrpool ein und lassen diesen mindestens einmal bwLehrpool booten, damit er dem System bekannt ist. Anschließend klicken Sie auf 'Automatisch konfigurierten Proxy hinzufügen' und fügen diesen Rechner über die Suche hinzu. Der so konfigurierte Rechner ist nicht als Arbeitsstation nutzbar und startet sich regelmäßig neu, um eventuelle MiniLinux-Updates zu erhalten. Sie müssen nur dafür sorgen, dass der Rechner läuft und innerhalb des Poolraums nicht unabsichtlich ausgeschaltet wird.
Automatisch konfigurierten Proxy hinzufügen

Zur Speicherung replizierter VMs auf dem Proxy-Server müssen Sie auf der Festplatte des Proxy-Servers eine persistente ID45-Partition einrichten. Im Gegensatz zur ID44-Partition, die Sie bereits von den bwLehrpool Arbeitsstationen kennen, wird diese nicht bei jedem Neustart formatiert.

Serverliste

Serverliste

Nachdem Sie einen oder mehrere Rechner als Proxy-Server hinzugefügt haben, sehen Sie in der Serverliste verschiedene Informationen: Belegter Speicher, Anzahl der derzeit verbundenen Clients, Laufzeit, übertragene Daten usw. Unter anderem können Sie über die entsprechenden Symbolbuttons die Verwendung auf bestimmte Orte beschränken, DNBD3-Server neustarten, Einstellungen setzen oder Server entfernen.

Sie erhalten außerdem detailierte Informationen, wenn Sie auf die IP Adresse eines Proxy klicken.

Proxy Detailansicht

Raumbeschränkung

Zugriff auf bestimmte Räume beschränken

Sie können die Verwendung der Proxys auf bestimmte Räume/Orte beschränken. Klicken Sie dazu auf das entsprechende Icon in der Spalte 'Orte'. Dort können Sie festlegen, aus welchen Räumen Clients diesen Proxy verwenden dürfen. Durch die Einschränkung vermeiden Sie nicht nur die Verwendung des Servers von anderen Standorten aus, sondern auch, dass dieser überhaupt in Betracht gezogen wird. Es enfällt daher die sonst notwendige Metrikmessung, die ebenfalls eine gewisse Netzwerklast verursachen kann. Falls Sie also einen Proxy in einem schlecht angebundenen Gebäude installieren, kann es sinnvoll sein, dass dieser Proxy nur Clients innerhalb dieses Gebäudes versorgt.zuerst

Im Beispiel rechts verwenden nur Clients aus dem Gebäude der Chemie sowie der Fakultät für Biologie den Proxy. Die schlechte Netzwerkverbindung zwischen beispielsweise KG2 und der Biologie wird somit nicht zusätzlich durch Metrikmessungen belastet.

Wird ein Proxy auf einen oder mehrere Räume beschränkt, werden Clients aus anderen Räumen diesen Proxy nicht verwenden. Technisch ist der Zugriff aus anderen Räumen jedoch trotzdem noch möglich. Sie können zusätzlich die Option 'Zugriff auf zugewiesene Räume beschränken' in den allgemeinen Einstellungen des Proxys aktivieren. Dadurch wird der Zugriff aus anderen Räumen per Paketfilter komplett verhindert.

Hardwareempfehlung

DNBD3-Proxys können problemlos auf normaler Desktop-Hardware ausgeführt werden. Es ist nicht notwendig, spezielle Serverhardware einzusetzen. Sinnvoll ist jedoch die Austattung mit einer dedizierten Netzwerkkarte, möglichst viel Arbeitsspeicher und einer großen Festplatte, um entsprechend viele VMs vorhalten zu können.

Beim Starten einer normalen Windows-VM werden i.d.R. etwa ~1GB an Daten übertragen. Werden in einem Raum erfahrungsgemäß nur wenige unterschiedliche VMs gestartet, können alle Daten im RAM des Proxys vorgehalten werden. Die Leseleistung der Festplatte ist in diesem Fall sekundär. Je mehr Arbeitsspeicher vorhanden ist, umso mehr Blöcke können direkt im RAM vorgehalten und bei erneuter Anfrage sofort übertragen werden.

Übersicht:

  • Normale Desktophardware
  • Dedizierte 10GBit-Netzwerkkarte
  • 8-32GB RAM
  • Große Festplatte, um möglichst viele VMs cachen zu können

Es wäre auch möglich, eine Kombination aus SSD und HDD zu verwenden. Mit Hilfe von 'bcache' kann ein hochperformanter Speichercache realisiert werden. Auch hier sind normale Desktop-Speichermedien völlig ausreichend. Diese Konstellation müssen Sie jedoch selbst einrichten. Eine Integration als 'automatischer DNBD3-Proxy' ist in diesem Fall nicht möglich. Wir empfehlen daher im Zweifelsfall eher eine ausreichende Dimensionierung des Arbeitsspeichers und den Verzicht auf SSDs.

dnbd3-Proxy-Installation

Falls Sie einen eigenen Rechner als dnbd3-Proxy abstellen wollen, müssen Sie dnbd3 zur Installation aus den Quellen kompilieren. Für eine Minimalinstallation benötigen Sie nur den Server-Part.

Gruppe und User

Es ist wie immer vorzuziehen, den dnbd3-Proxy unter einem unprivilegierten User laufen zu lassen. Erzeugen Sie daher eine Gruppe dnbd3 und einen User dnbd3. Der User dnbd3 benötigt kein Shell-Login und kein Homeverzeichnis:

groupadd dnbd3
useradd -g dnbd3 -s /bin/false -d /nonexistent -M dnbd3

Kompilieren des dnbd3-Servers

Achten Sie darauf, daß Sie libjansson (libjansson4) und libjansson-devel benötigen. Installieren Sie diese vorher. Zudem benötigen Sie einen c-Compiler (gcc), make sowie cmake (ccmake), außerdem zum Download git.

Quellcode und Vorbedingungen

Besorgen Sie sich anschließend den Quellcode mit

git clone git://git.openslx.org/dnbd3.git

Konfiguration

Wechseln sie in das nach dem git-Befehl vorhandene Verzeichnis dnbd3, erzeugen darin ein Verzeichnis build und wechseln in dieses:

cd dnbd3
mkdir build
cd build
Minimal, nur Server

Führen Sie dort, also im build-Verzeichnis, den Befehl

ccmake ..

aus. Nach der Meldung 'Empty cache' drücken Sie 'c' zum Konfigurieren. Sie werden zwar wahrscheinlich von einer Fehlermeldung a la „CMake Error at CMakeLists.txt:91 (message): Aborting.“ begrüßt, ignorieren Sie diese und drücken 'e'. Anschließend sollten Sie einige Optionen sehen:

BUILD_FUSE_CLIENT               *ON                                                                                                                 
BUILD_KERNEL_MODULE             *ON                                                                                                                 
BUILD_SERVER                    *ON
...

Wählen Sie mit Cursor- und Entertasten so aus, daß lediglich bei BUILD_SERVER 'ON' steht, und tragen Sie bei 'CMAKE_BUILD_TYPE' „Release“ ein. Drücken Sie anschließend erneut 'c'; Sie sollten dann keine Fehlermeldung mehr sehen. Drücken Sie erneut 'e', und abschließend 'g'. ccmake sollte sich daraufhin ohne Fehler beenden. Verfahren Sie anschließend weiter wie bei „Kompilierung“ beschrieben.

Komplett (Client, Kernelmodul usw.)

Eine komplette Installation ist nicht unbedingt zu empfehlen, da die zusätzlichen Teile (Client, Kernelmodel usw.) nicht für den Betrieb eines dnbd3-Proxys notwendig sind und die zusätzlich benötigten Bibliotheken einigen Raum belegen. Falls Sie sich dennoch für eine komplette Installation entscheiden, installieren Sie zusätzlich die Pakete fuse-devel, fuse-libs, kernel-devel (Kernelsourcen) sowie kernel-headers. Führen Sie anschließend ein 'cmake ..' aus.

Kompilierung

Stoßen Sie die Kompilierung mit

make

an. Sie sollte mit „[100%] Built target dnbd3-server“ beendet werden.

Sie finden die ausführbare Datei

dnbd3-server

im gleichen Verzeichnis. Wir schlagen vor, diese in ein zu erstellendes Verzeichnis '/opt/openslx/dnbd3' zu kopieren; falls Sie sie an einem anderen Ort haben wollen, geht dies auch; Sie müssen dann allerdings darauf achten, die notwendigen Konfigurationsdateien anzupassen.

Konfiguration

Erstellen Sie ein Verzeichnis

/etc/dnbd3-server

. Erzeugen Sie in diesem drei Dateien, rpc.acl, alt-servers und server.conf. Vergleichen Sie für erweiterte Optionen die Datei dnbd3/conf/README.server.

### rpc.acl ###
# localhost
127.0.0.0/8 ALL
[IP des Satellitenservers] ALL
Die Datei rpc.acl regelt nur die Abfrage der Statusinformationen, nicht den Zugriff auf den dnbd3-proxy an sich. Eine Zugriffsregelung erfolgt vorteilhaft durch iptables. Bitte beachten Sie, daß bei Einträgen der rpc.acl keine Namensauflösung erfolgt; eine Eintragung 'localhost' würde daher nicht funktionieren. Beachten Sie auch, daß bei nicht vorhandener rpc.acl, leerer rpc.acl oder einer rpc.acl mit nicht verständlichem (namensbasiertem) Eintrag keine Kontrolle erfolgt, also der Status von überall ausgelesen werden kann.
### alt-servers ###
[IP des Satellit]
[IP anderer Proxy 1, wenn vorhanden]
[IP anderer Proxy 2, wenn vorhanden, usw.]
### server.conf ###
[dnbd3]
listenPort=5003
# Je nach Partitionierung ggf. ein anderes Verzeichnis wählen:
basePath=/tmp/dnbd3
serverPenalty=500
clientPenalty=0
isProxy=true
backgroundReplication=true
lookupMissingForProxy=true
removeMissingImages=false
uplinkTimeout=5000
clientTimeout=15000

[logging]
consoleMask=ERROR WARNING MINOR INFO

Vergessen Sie auch nicht, das in der Datei server.conf unter basePath angegebene Verzeichnis ggf. zu erstellen und dafür zu sorgen, daß der User dnbd3 schreiben kann.

Automatischer Start

Erzeugen Sie im Verzeichnis /etc/systemd/system eine Datei namens dnbd3-proxy.service des Inhalts:

[Unit]
Description=DNBD3 proxy server

[Service]
Type=forking
User=dnbd3
ExecStart=/opt/dnbd3/dnbd3-server
Restart=always
RestartSec=3
TimeoutStopSec=10
LimitNOFILE=65536

[Install]
WantedBy=network-online.target

Führen Sie anschließend die Befehle

systemctl daemon-reload

und

systemctl enable dnbd3-proxy.service

aus, damit der dnbd3-Proxy bei jedem Neustart automatisch gestartet wird. Sie können ihn selbstverständlich gleich mit

systemctl start dnbd3-proxy

starten.

Satellitenserver

Abschließend muß der neue Proxy dem zuständigen Satellitenserver mitgeteilt werden. Gehen Sie hierzu in der Webschnittstelle des Satellitenservers auf den Menupunkt DNBD3, wählen „+Externen Server hinzufügen“ und geben die IP des Proxys ein. Drücken Sie auf „Testen“, bevor Sie die IP speichern. Klicken Sie anschließend auf das Doppelpfeilsymbol neben „Serverliste“ zur Aktualisierung der Anzeige.

Drucken/exportieren