19.4 Shared Storage mit DRBD
DRBD steht für Distributed Replicated Block Device und wird gern als RAID-1 übers Netz bezeichnet. Jeder der beiden Clusterknoten besitzt eine DRBD-Partition, die von einem speziellen Block Device repräsentiert wird, etwa /dev/drbd0. Von diesen Block Devices ist eines aktiv (primary) und das andere passiv (secondary). Alle Daten, die auf die aktive Partition geschrieben werden, spiegelt DRBD über das Netz auf die passive Partition. Ein solcher Replikationsverbund wird als DRBD-Ressource bezeichnet. Konfiguriert wird DRBD in der Konfigurationsdatei /etc/drbd.conf. Diese lädt bzw. inkludiert aber nur die Dateien unterhalb von /etc/drbd.d/. Daher legen wir die Konfiguration auch dort ab.
19.4.1 Grundlegende Konfiguration
In der Konfigurationsdatei /etc/drbd.d/global_common.conf finden Sie, wie ihr Name schon andeutet, die Abschnitte global und common:
global {
usage-count yes; ### im Standard auf 'no'
}
common {
[…]
}
Listing 19.8 Die Konfigurationsdatei »global_common.conf«
Für jede Ressource, die Sie benutzen möchten, legen Sie eine Datei unter /etc/drbd.d/ an. Der Dateiname muss auf .res enden. Ansonsten sind Sie in der Namensgebung frei. Es empfiehlt sich aber, den Namen der definierten Ressource auch als Dateinamen zu benutzen – in diesem Fall verwenden wir mydrbd.res:
resource mydrbd {
net {
cram-hmac-alg sha1;
shared-secret "geheim";
}
on node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.0.0.1:7789;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.0.0.2:7789;
meta-disk internal;
}
}
Listing 19.9 Die Konfigurationsdatei »mydrbd.res«
[+] Die Konfigurationsdateien müssen auf beiden Clusterknoten identisch sein. Kopieren Sie diese daher am besten mit Copy&Paste oder übertragen Sie die Dateien via SSH.
19.4.2 Die wichtigsten Konfigurationsoptionen
In den Konfigurationsdateien aus unserem Beispiel sind alle zum Betrieb einer DRBD-Ressource benötigten Parameter enthalten, auch wenn sich natürlich noch mehr konfigurieren ließe. Diese Parameter haben folgende Bedeutung:
-
usage-count yes
Die DRBD-Entwickler möchten gern wissen, wie oft ihre Software installiert wurde. Wenn diese Option auf yes gesetzt ist, nimmt Ihre DRBD-Installation an der Zählung teil. Beim ersten Start erhalten Sie folgende Meldung:--== Thank you for participating in the global usage survey ==--
The server's response is:
you are the 3948th user to install this versionListing 19.10 DRBD-Online-Umfrage
Wenn Sie an der Zählung nicht teilnehmen möchten, was den Betrieb nicht beeinträchtigt, dann belassen Sie den Parameter auf no.
-
resource mydrbd
An dieser Stelle vergeben Sie den Namen für Ihre DRBD-Ressource. -
cram-hmac-alg sha1; shared-secret "geheim"
Dieses shared secret benutzen die Knoten, um sich gegenseitig zu authentifizieren. Falls Sie mehrere Ressourcen verwalten, sollten Sie für jede Ressource ein anderes shared secret nutzen. Sie verhindern so, dass – vielleicht durch einen Tipp- oder Kopierfehler – eine neue Ressource einer bereits bestehenden in die Kommunikation pfuscht. -
on <HOSTNAME>
Diese Zeile leitet die knotenspezifische Konfiguration ein. Hier wird der Kurzname des Knotens verwendet, wie er in der /etc/hosts eingetragen ist. Bei CentOS wird standardmäßig als Hostname der FQDN verwendet. Achten Sie daher darauf, hier den korrekten Wert anzugeben – am einfachsten ermitteln Sie diesen mit dem Programm hostname. -
device
Der Name des DRBD-Block-Device. Sie verwenden ihn, wie Sie in den folgenden Beispielen sehen werden, für Dateisystemoperationen wie etwa das Formatieren. -
disk
Hier wird die Plattenpartition definiert, auf die DRBD physisch zugreift. DRBD übernimmt die Verwaltung dieser Partition vollständig. Sie als Admin arbeiten nur noch mit dem device (/dev/drbd0) oder dem Ressourcennamen (mydrbd) und führen keine Low-Level-Operationen auf der disk aus. -
address
Dies ist die IP-Adresse des Knotens und der Port, über den die Kommunikation mit dem Nachbarknoten abgewickelt wird. -
meta-disk
Darüber wird festgelegt, dass das DRBD-Block-Device eine reguläre Partition ist und nicht etwa von LVM verwaltet wird, da hierfür weitere Konfigurationen notwendig wären.
19.4.3 Die DRBD-Ressource in Betrieb nehmen
Bevor Sie Ihre DRBD-Ressource in Betrieb nehmen, sollten Sie die nachstehende Checkliste durchgehen, damit Ihnen die DRBD-Konfiguration auf Anhieb gelingt:
-
Prüfen Sie noch einmal, ob die Konfigurationsdateien auf beiden Nodes identisch sind.
-
Die Plattenpartitionen, die Sie für DRBD nutzen, dürfen nicht formatiert sein – sie müssen aber partitioniert sein! Prüfen Sie auf beiden Knoten, ob dort vielleicht noch ein Filesystem angelegt ist. In diesem Fall können Sie es mit dem folgenden Befehl zerstören:[ 23 ]
dd if=/dev/zero of=/dev/sdb1 bs=1M count=128
-
Führen Sie auf beiden Nodes den Befehl drbdadm create-md mydrbd als root-Benutzer aus.
-
Starten Sie mit systemctl restart drbd auf beiden Knoten den DRBD-Dienst neu.
Lassen Sie sich nun mit dem Befehl cat /proc/drbd den DRBD-Status anzeigen.
Immer den Überblick behalten
Lassen Sie sich in zwei separaten Terminals immer die aktuelle Ausgabe von cat /proc/drbd beider Knoten anzeigen. Durch Eingabe von
watch "cat /proc/drbd"
wird der Befehl alle zwei Sekunden ausgeführt und das Ergebnis angezeigt – so behalten Sie immer den Überblick, in welchem Status sich Ihre DRBD-Devices befinden.
CentOS: Fehler zur Drucklegung
Leider wird unter CentOS /proc/drbd nicht korrekt befüllt. Nutzen Sie dafür alternativ die Ausgabe von drbdadm status.
Die Ausgabe sieht in dieser Phase auf beiden Knoten so aus:
root@node2:~# cat /proc/drbd
version: 8.4.7 (api:1/proto:86-101)
srcversion: 0904DF2CCF7283ACE07D07A
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:984
Listing 19.12 Ausgabe von »cat /proc/drbd«
Secondary/Secondary bedeutet, dass Sie noch keiner der beiden Seiten die aktive Rolle (primary) zugewiesen haben. Inconsistent heißt, dass die Knoten noch nicht synchronisiert wurden und somit noch nicht den gleichen Datenbestand haben.
Um zu testen, ob sich die Knoten miteinander synchronisieren lassen, geben Sie auf Node1 die folgenden Befehle ein:
$ drbdadm up mydrbd
$ drbdadm primary mydrbd
Listing 19.13 Knoten miteinander synchronisieren, Node1 ist »primary«.
Dieser Befehl synchronisiert die beiden DRBD-Devices miteinander, wobei Node1 die primary"=Rolle zugewiesen wird. Sein Datenbestand wird also auf Node2 übertragen. Da beide Seiten noch kein Filesystem haben, wird hier nur Datenschrott synchronisiert, aber für einen Funktionstest ist das ausreichend. Während der Synchronisation sieht cat /proc/drbd auf Node1 so aus:
[…]
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:3356672 nr:0 dw:0 dr:3358800 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:50[…]
[=======>............] sync'ed: 40.1% (4908/8188)M
finish: 0:02:03 speed: 40,580 (39,028) K/sec
Listing 19.14 Node1 wird »primary« und überschreibt Daten auf Node2.
Sie sehen, dass Node1 nun primary-Status hat. Der Zustand des Datenbestands ist UpToDate für Node1 und Inconsistent für Node2, da die Synchronisation noch nicht abgeschlossen ist.
Die Synchronisierung kann je nach Größe der Partition und Geschwindigkeit der Datenverbindung zwischen den beiden Knoten eine Zeit lang dauern. Ist der Vorgang abgeschlossen, sieht die Ausgabe von cat /proc/drbd wie folgt aus:
[…]
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:984 nr:0 dw:0 dr:984 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Listing 19.15 Synchronisation abgeschlossen, Node1 ist »primary«.
Der Datenbestand auf beiden Nodes hat jetzt den Zustand UpToDate. Falls die Synchronisation abgeschlossen ist, aber immer noch Secondary/Secondary angezeigt wird, können Sie Node1 mit dem folgenden Befehl in den Primary-Status versetzen:
$ drbdadm primary mydrbd --force
Listing 19.16 Primary-Status erzwingen
Nachdem der Funktionstest erfolgreich verlaufen ist, können Sie das Device jetzt formatieren. Legen Sie auf Node1 mit dem folgenden Befehl ein Ext4-Dateisystem an:
$ mkfs.ext4 /dev/drbd0
Listing 19.17 Dateisystem anlegen
Es muss natürlich nicht unbedingt Ext4 sein: Jedes andere gängige Dateisystem funktioniert ebenfalls. Sie können /dev/drbd0 nun mounten. Da auf dem DRBD-Device später die Daten eines Webangebots liegen sollen, nennen Sie den zugehörigen Mountpunkt /srv/www-data:
#fuehren Sie diesen Befehl als Root-Benutzer auf beiden Knoten aus:
mkdir /srv/www-data
#fuehren Sie diesen Befehl nur auf Node1 aus:
mount /dev/drbd0 /srv/www-data
Listing 19.18 Mountpunkt erstellen und DRBD-Device einbinden
[+] Beachten Sie, dass Sie ein DRBD-Device nur auf dem Knoten mounten können, auf dem es den Status primary hat.
Damit Sie später, wenn Sie das Hochverfügbarkeits-Setup testen, etwas Inhalt auf dem Dateisystem haben, legen Sie nun dort eine kleine HTML-Datei ab. Zum Testen reicht schon die klassische Ausgabe von »Hello World«:
<html>
<head>
<title>HA-Test</title>
</head>
<body>
<h1>Hello World!</h1>
Dies ist eine Testseite.
</body>
</html>
Listing 19.19 Einfache HTML-Datei
Legen Sie die Datei unter dem Namen index.html im Verzeichnis /srv/www-data ab. Damit ist die Grundkonfiguration von DRBD abgeschlossen. Unmounten Sie das Filesystem wieder, denn Mounts und Unmounts sollen bald vom Clusterressourcenmanager übernommen werden, dessen Konfiguration als Nächstes an der Reihe ist.