Installation und Konfiguration von DRBD für die Replikation von Netzwerk-Dateisystemen unter Debian 8

DRDB mit OCFS2-Dateisystem

Im vorherigen Szenario gibt es ein kleines Problem: Wenn Sie beide Dateisysteme mounten, können Sie die Änderungen nicht sehen, bis Sie die Partition neu mounten, und das kann in einigen Situationen ein Problem sein, also können Sie anstelle von ext4 das ocfs2-Dateisystem verwenden.

Stellen Sie zunächst sicher, dass /dev/drbd1 nicht gemountet ist, so dass Sie aus Sicherheitsgründen auf beiden Servern laufen:

umount /var/www

Jetzt installieren wir die ocfs2-Utilities auf beiden Knoten, um unser verteiltes Dateisystem zu erstellen:

apt-get install ocfs2-tools

Danach können wir das ocfs2-Dateisystem mit dem Befehl erstellen:

root@mysql1:/var/www# mkfs -t ocfs2 -N 2 -L ocfs2_drbd1 /dev/drbd1

Die Ausgabe sollte etwas Ähnliches sein:

root@mysql1:/var/www# mkfs -t ocfs2 -N 2 -L ocfs2_drbd1 /dev/drbd1
mkfs.ocfs2 1.6.4
Cluster stack: classic o2cb
/dev/drbd1 is mounted; will not make a ocfs2 volume here!
root@mysql1:/var/www# cd
root@mysql1:~# umount /var/www/
root@mysql1:~# mkfs -t ocfs2 -N 2 -L ocfs2_drbd1 /dev/drbd1
mkfs.ocfs2 1.6.4
Cluster stack: classic o2cb
Label: ocfs2_drbd1
Features: sparse backup-super unwritten inline-data strict-journal-super xattr
Block size: 4096 (12 bits)
Cluster size: 4096 (12 bits)
Volume size: 5368508416 (1310671 clusters) (1310671 blocks)
Cluster groups: 41 (tail covers 20431 clusters, rest cover 32256 clusters)
Extent allocator size: 4194304 (1 groups)
Journal size: 67108864
Node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 2 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful

Nun nutzen wir die nativen Funktionen von ocfs2, um das verteilte Dateisystem zu verwalten.

Beginnen wir mit der Bearbeitung von /etc/ocfs2/cluster.conf auf dem Knoten boths und fügen Sie folgendes hinzu:

node:
ip_port = 7777
ip_address = 192.168.152.100
number = 0
name = mysql1.local.vm
cluster = ocfs2
node:
ip_port = 7777
ip_address = 192.168.152.110
number = 1
name = mysql2.local.vm
cluster = ocfs2
cluster:
node_count = 2
name = ocfs2

Wir müssen den ocfs2-Dienst neu starten. Führen Sie auf beiden Knoten diesen Befehl aus:

/etc/init.d/o2cb restart

Und überprüfen Sie, ob der Status in Ordnung ist:

root@mysql1:~# /etc/init.d/o2cb status
* o2cb.service - LSB: Load O2CB cluster services at system boot.
Loaded: loaded (/etc/init.d/o2cb)
Active: active (exited) since Wed 2016-10-05 16:10:20 CEST; 23s ago
Process: 2767 ExecStop=/etc/init.d/o2cb stop (code=exited, status=0/SUCCESS)
Process: 2793 ExecStart=/etc/init.d/o2cb start (code=exited, status=0/SUCCESS)
Oct 05 16:10:20 mysql1.local.vm systemd[1]: Starting LSB: Load O2CB cluster services at system boot....
Oct 05 16:10:20 mysql1.local.vm o2cb[2793]: Loading filesystem "configfs": OK
Oct 05 16:10:20 mysql1.local.vm o2cb[2793]: Loading stack plugin "o2cb": OK
Oct 05 16:10:20 mysql1.local.vm o2cb[2793]: Loading filesystem "ocfs2_dlmfs": OK
Oct 05 16:10:20 mysql1.local.vm o2cb[2793]: Creating directory '/dlm': OK
Oct 05 16:10:20 mysql1.local.vm o2cb[2793]: Mounting ocfs2_dlmfs filesystem at /dlm: OK
Oct 05 16:10:20 mysql1.local.vm o2cb[2793]: Setting cluster stack "o2cb": OK
Oct 05 16:10:20 mysql1.local.vm o2cb[2793]: Starting O2CB cluster ocfs2: OK
Oct 05 16:10:20 mysql1.local.vm systemd[1]: Started LSB: Load O2CB cluster services at system boot..

Und jetzt kannst du die Magie anwenden und die Festplatte auf beiden Servern mounten:

root@mysql1:~# mount -t ocfs2 /dev/drbd1 /var/www/
root@mysql2:~# mount -t ocfs2 /dev/drbd1 /var/www/

Und versuchen Sie, die Datei auf beiden Servern zu erstellen:

root@mysql1:~# touch /var/www/mysql1.txt
root@mysql2:~# touch /var/www/mysql2.txt

Sie können überprüfen, ob Sie beide Dateien sehen:

root@mysql1:~# ls -al /var/www/
totale 4
drwxr-xr-x 3 root root 3896 ott 5 16:20 .
drwxr-xr-x 12 root root 4096 ott 5 12:25 ..
drwxr-xr-x 2 root root 3896 ott 5 15:55 lost+found
-rw-r--r-- 1 root root 0 ott 5 16:20 mysql1.txt
-rw-r--r-- 1 root root 0 ott 5 16:20 mysql2.txt
root@mysql2:~# ls -al /var/www/
totale 4
drwxr-xr-x 3 root root 3896 ott 5 16:20 .
drwxr-xr-x 12 root root 4096 ott 5 12:26 ..
drwxr-xr-x 2 root root 3896 ott 5 15:55 lost+found
-rw-r--r-- 1 root root 0 ott 5 16:20 mysql1.txt
-rw-r--r-- 1 root root 0 ott 5 16:20 mysql2.txt

Leistung

Sie können einige Leistungstests durchführen, um die Geschwindigkeit der Konfiguration zu überprüfen. In meinem Fall bekomme ich diese Ergebnisse mit einer virtuellen Maschine auf meinem PC. Auf einem echten Server wird die Geschwindigkeit viel höher sein.

Zuerst installieren Sie ioping, um die Leistung anhand von Zufallswerten zu testen.

apt-get install ioping

Führen Sie dann den Test aus:

root@mysql1:cd /var/www
root@mysql1:/var/www# ioping -R .
--- . (ocfs2 /dev/drbd1) ioping statistics ---
49.3 k requests completed in 3.00 s, 17.1 k iops, 66.7 MiB/s
min/avg/max/mdev = 43 us / 58 us / 8.41 ms / 64 us

66,7 MiB/s bei einem Zufallswert ist ein sehr gutes Ergebnis!

Und eine sequentielle Lesung:

root@mysql1:/var/www# dd if=/dev/zero of=test bs=64k count=32k conv=fdatasync
32768+0 record dentro
32768+0 record fuori
2147483648 byte (2,1 GB) copiati, 34,1095 s, 63,0 MB/s

Fazit

Dieses Tutorial könnte die Grundlage für ein Mirror-Setup von ISPConfig sein, verschiedene drdb-Ressourcen für /var/wwww und /var/vmail erstellen, sollte sehr schnell funktionieren.

Best Practices

  • Verwenden Sie für ein Dateisystem mit hohem Datenaufkommen mindestens eine dedizierte Netzwerkkarte.
  • Für Netzwerk-Failover-Bond-Togheter mindestens 2 Netzwerkschnittstellen.
  • DRBD hat viele Möglichkeiten, die Konfiguration und die Leistung von Knoten zu optimieren.

Das könnte Dich auch interessieren …