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.