DRBD, Distributed Replicated Block Device

Proxmox VE und DRBD für verteiltes Storage in kleinen Clustern.
Es werden 2 Server verwendet und es ist ohne Bedeutung, ob das VMs oder physische Server sind. Hier wird die einfachste Konfiguration des DRBD Dienstes für die Festplattenreplikation vorgestellt. Die Funktion des DRBD Dienstes kann man auch als RAID1 per Netzwerk nennen. Daten, die auf einem Server gespeichert sind, werden auch gleichzeitig auf der Festplatte des anderen Server übertragen und gespeichert. Das ist eine typische DRBD-Konfiguration der Version 8.x, aber kann man auch bei Version 9.x anwenden.

Zur Verfügung haben wir

  • 2 Server mit jeweils 2 Netzwerkkarten und mindestens 2 Festplatte bzw. Partitionen
  • Proxmox VE

Es muss man auch dazu sagen, dass die VMs die Hochverfügbar sind, nur auf dem Primary Knoten gestartet werden können.

Unser Netzwerk (Ausgangssituation)

Firmen-Netzwerk: 172.16.0.0/22
DC: 172.16.0.10
Gateway: 172.16.0.1 (Die IP-Adresse der Firewall (Router))
DNS: IP-Adresse des DNS-Servers, z.B. des DC: 172.16.0.10

Daten zum Server1
Name: pve1
Domain: mono,plan
IP: 172.16.0.101/22
Gateway: 172.16.0.1
DNS: 172.16.0.10
Zweite Netzwerkkarte für die Festplattenreplikation
IP: 192.168.99.101/24
Zweite Festplatte: /dev/sdb1

Daten zum Server2
Name: pve2
Domain: mono,plan
IP: 172.16.0.102/22
Gateway: 172.16.0.1
DNS: 172.16.0.10
Zweite Netzwerkkarte für die Festplattenreplikation
IP: 192.168.99.102/24
Zweite Festplatte: /dev/sdb1

Punkt
Proxmox VE Standardinstallation, Netzwerkdaten, z.B. wie oben.
Die Installation wird auf beiden Server durchgeführt. Wie die Standardinstallation von Proxmox VE durchgeführt wird, finden Sie im Artikel Proxmox Installation . Die Einstellung können Sie von dem Artikel Proxmox Einstellungen (Community)
Punkt
Auf beiden Servern wird noch zweite Festplatte gebraucht, z.B. /dev/sdb. Die Partitionen auf den beiden Servern auf den zweiten Festplatten müssen gleich groß sein. Im Shell-Fenster mit cfdisk /dev/sdb können wir die Partitionen erstellen.
Punkt
Auf beiden Servern installieren wir DRBD Tools.

 

root@pve1:/# apt install drbd-utils

 

root@pve2:/# apt install drbd-utils
Punkt
Auf beiden Servern haben wir eine zweite Festplatte. Auf den Festplatten erstellen wir gleich große Partition, in unserem Fall /dev/sdb1. Ich nutze hier am besten cfdisk

 

root@pve1:/# cfdisk /dev/sdb

 

root@pve2:/# cfdisk /dev/sdb
Punkt
Auf beiden Servern bearbeiten wir die Datei /etc/drbd.d/global_common.conf bzw. auf einem Server machen wir die Anpassung und dann kopieren wir die Datei auf den anderen Server z.B. mit scp.

 

startup {
        # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
        wfc-timeout 100; # Bis zu 100 Sekunden wartet auf anderen Knoten, dann geht es weiter
        degr-wfc-timeout 120;
}
...

disk {
        resync-rate 100M;
        }
...

net {
        protocol C;
....
}
Punkt
Auf beiden Servern erstellen wir eine gleiche Datei z.B. /etc/drbd.d/res_drbd.res bzw. auf einem Server erstellen wir die mit dem entsprechenden Inhalt und dann kopieren wir die auf den anderen Server z.B. mit scp.

 

resource res_drbd {
  net {
     cram-hmac-alg sha1;
     shared-secret "secret+-";
  }
  on pve1 {
     device /dev/drbd1;
     disk /dev/sdb1;
     address 192.168.99.101:7789;
     meta-disk internal;
  }
  on pve2 {
     device /dev/drbd1;
     disk /dev/sdb1;
     address 192.168.99.102:7789;
     meta-disk internal;
  }
}
Punkt
Auf beiden Servern sollten wir den Befehl name -n ausführen. Auf dieser Weise vergewissern wir uns, ob die eingetragene Namen den Servern in der res_drbd.res richtig sind.

 

root@pve1:/etc/drbd.d# uname -n

 

root@pve2:/etc/drbd.d# uname -n
Punkt
Die Replikation der Festplatten sollte durch die zweiten Netzwerkkarten stattfinden, aus diesem Grund müssen wir noch auf beiden Servern die /etc/hosts Datei bearbeiten.

127.0.0.1 localhost.localdomain localhost
192.168.99.101 pve1.mono.plan pve1
192.168.99.102 pve2.mono.plan pve2
...
Punkt
Im Anschluss initialisieren wir das *Meta Data Storage*. Dazu führen wir folgendes Kommando an beiden Servern aus. Der Dienst drdb sollte am besten nicht laufen.

 

root@pve1:~# drbdadm create-md res_drbd


Sollten Sie Probleme mit der Erstellung von *Meta Data Storage* haben, kennen Sie folgender Befehl nutzen.
VORSICHT: Der unterstehende Code macht einige/alle angegebenen Geräte-/Festplattendaten unbrauchbar!
VORSICHT: Nach dem Drücken der Entertaste werden Sie nicht gefragt, ob Sie wirklich den Befehl ausführen wollen. Wenn Sie ein Fehler bei der Angabe der Partition machen, zerstören Sie möglicherweise eine funktionieren Partition.

 

root@pve1:~# dd if=/dev/zero of=/dev/sdxx bs=1M count=128
Punkt
Der DRBD Dienst wird auf beiden Servern gestartet.

 

root@pve1:~# systemctl start drbd.service
Punkt
Jetzt machen wir den Server pve1 zum Primary Node und veranlassen die Daten zu replizieren.

 

root@pve1:~#  drbdadm -- --overwrite-data-of-peer primary res_drbd
Punkt
Mit dem folgenden Befehl können Sie die Replikationfortschritt sehen

 

root@pve1:~# watch cat /proc/drbd

 

Punkt
Jetzt wird das Dateisystem erstellt.

 

root@pve1:~# mkfs.ext4 /dev/drbd1
Punkt
Auf beiden Servern erstellen Sie einen Ordner, z.B. /data

 

root@pve1:~# mkdir /data

 

root@pve2:~# mkdir /data
Punkt
Nur auf dem Primary können wir die Partition /dev/drbd1 mounten.

 

root@pve1:~# mount -t ext4 /dev/drbd1 /data

 

Wenn die beider Server neu gestartet werden, stehen beider auf Secondary, deshalb muss man ein von denen auf Primary stellen und die DRBD-Partition mounten.

root@pvex:~# drbdadm primary res_drbd
root@pvex:~# mount -t ext4 /dev/drbd1 /data
Punkt
Auf beiden Servern, im beliebigen Browser, wird das Web-Interface von beiden Servern gestartet. In unserem Fall wäre es,
https://172.16.0.101:8006/
https://172.16.0.102:8006/

Es wird Directory Storage erstellt, z.B. so wie auf dem unteren Bild. Es wird links auf Datacenter geklickt, dann rechts auf Storage und dann noch mehr nach recht auf Add. Hier wählen wir Directory.

Auf dem Primary wird immer die gemountete Größe der /dev/drbd1 Partition angezeigt. Auf dem Secondary wird die Größe der Systemfestplatte gezeigt.

Punkt
Nur auf dem Server (Knoten) auf dem die DRBD-Partition als Primary definiert wurde und gemountet ist, werden die neue VMs erstellt. Dabei immer daran denken die Festplatten der VMs auf dem Storage data zu erstellen.

Punkt
Die Konfigurationsdateien der VMs werden von pve1 nach pve2 kopiert. Die müssen sich dann im gleichen Ordner befinden, wie auf dem pve1.

 

root@pve1:~# scp /etc/pve/qemu-server/* pve2:/etc/pve/qemu-server
Punkt
Im Web-Interface von beiden Server sehen wir die VMs. Starten können wir die nur auf einem Server, aber es müssen zwei Voraussetzungen erfühlt werden.
    • Die Ressource muss als Primary definiert werden
    • die DRBD Partition muss gemountet sein.

So einfach kann man mit der einfachsten DRBD Konfiguration die Hochverfügbarkeit erreichen. Zugegeben, bei Ausfall der Primary Knoten müssen wir manuell der anderen auf Primary hochstufen und mounten, aber immerhin haben wir den aktuellen Stand. Das ist sicherlich sehr wichtig bei Fileservern bzw. Datenbanken.

Wir können bei der DRBD Konfiguration auch Logical Volume einsetzen.
Mit Logical Volume sind wir mehr flexibel und können sogar den Festplattenspeicher im laufenden Betrieb erweitern. Bei freien Festplatten-Slots im Server haben wir die Möglichkeit den Festplattenspeicher zu erweitern. Auch im System können wir danach die DRBD Partitionen erweitern.
Wenn wir, z.B. nach dem Artikel Administration eines LVM vorgehen

  • Volume Group (vg1)
  • logical Volume (lv1)

zur Verfügung haben, dann würde unsere  /etc/drbd.d/res_drbd.res wie folgt aussehen.

 

resource res_drbd {
  net {
     cram-hmac-alg sha1;
     shared-secret "secret+-";
  }
  on pve1 {
     device /dev/drbd1;
     disk /dev/vg1/lv1;
     address 192.168.99.101:7789;
     meta-disk internal;
  }
  on pve2 {
     device /dev/drbd1;
     disk /dev/vg1/lv1;
     address 192.168.99.102:7789;
     meta-disk internal;
  }
}

Fassen wir zusammen

  • Nach dem Neustart von beiden Servern sind beide als secondary. Im Shell-Fenster können das wir folgt überprüfen.

    # drbdadm status
        oder
    # watch cat /proc/drbd

  • Ressource auf einem Knoten müssen wir als Primary hochstufen

    # drbdadm primary red_drbd.res

  • Die DRBD Partition muss gemountet werden. In unserem Fall wurde am Anfang die Partition mit ext4 Dateiformat erstellt, deshalb

    # mount -t ext4 /dev/drbd1 /data

    Jetzt kann man die VMs starten

Die VMs auf anderem Knoten ausführen

  • Auf dem primary
    - Alle VMs herunterfahren.
    - die DRBD Partition umounten.
    - abstufen auf secondary in shell-Fenster

       # drbdadm secondary res_drbd

  • auf dem Zweiten der bisher als secondary war
    - hochstufen auf primary in shell-Fenster

       # drbdadm primary res_drbd


    - mounten
    - VMs starten.