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:

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:

  1. Prüfen Sie noch einmal, ob die Konfigurationsdateien auf beiden Nodes identisch sind.

  2. 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

    Listing 19.11    Partition mit Nullen überschreiben

  3. Führen Sie auf beiden Nodes den Befehl drbdadm create-md mydrbd als root-Benutzer aus.

  4. 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.