Datenreplikation mittels ausfallsicherer Speicherlösungen: OCFS2 / DRBD im Performance-Vergleich >> (Teil 3 von 3)

Dies ist Teil 3 des Artikels “Datenreplikation mittels ausfallsicherer Speicherlösungen: OCFS2 / DRBD im Performance-Vergleich”. In Teil 1 wurde ein Überblick der eingesetzten Technologien gegeben (speziell DRBD), sowie die grundlegende Architektur der hier näher beschriebenen Systeme erklärt. In Teil 2 wurde DRBD installiert und konfiguriert. Abschliessend geht es in diesem Artikel um die Cluster Konfiguration sowie der Ergebnisse der Performance-Benchmarks.

Cluster-Konfiguration

Auf beiden Knoten sollte die gleiche OCFS2 Version installiert werden:

Das Cluster sollte noch offline sein, da bisher noch keines erstellt wurde:

Das Cluster, hier mit dem Name drbdclust, wird nur auf dem ersten Knoten erstellt:

Dieser Befehl erstellt die Datei /etc/ocfs2/cluster.conf , falls sie noch nicht existiert.
Verifiziere, dass das Cluster angelegt wurde:

Nun müssen die beiden Knoten dem Cluster hinzugefügt werden. Beides geschieht erst nur auf dem ersten Knoten. Hier müssen sowohl der lokale Hostname verwendet werden, als auch die IP Adresse aus eben dem dedizierten Netzwerk, über das die Kommunikation des Clusters stattfinden soll.

Die Konfiguration wurde auch in die Datei /etc/ocfs2/cluster.conf  geschrieben. Diese Datei muss nun auf den zweiten Knoten kopiert werden.

Cluster Stack Konfiguration

Die Cluster Stack Konfiguration wird mit dem Befehl o2cb.init configure  gestartet. Die hier fett dargestellten Werte weichen von der Default-Einstellung ab.

Dieser Schritt wird auf beiden Knoten ausgeführt.
Das Cluster Stack ist bisher noch offline:

Registriere nun das Cluster mit dem Cluster Stack:

Die beiden Dienste werden über systemctl  gestartet und aktiviert:

Das Cluster sollte nun online sein:

Zwei Kernelparameter müssen konfiguriert werden, damit o2cb einwandfrei funktioniert. Diese werden in /etc/sysctl.conf  gesetzt:

Mit kernel.panic_on_oops = 1  wird absichtlich ein Kernel Panic bei einem oops ausgelöst: d.h. das System muss neu gestartet werden, verhindert damit jedoch, dass der Cluster in einem undefinierten Zustand hängen bleibt. kernel.panic = 30  definiert die Zeit in Sekunden, nachdem der Kernel Panic ausgelöst wird.

Mit sysctl -p  wird die Konfiguration neu geladen.

Dateisystem erstellen und mounten

Als letztes muss noch das OCFS2 Dateisystem erstellt und gemountet werden.

Das Formatieren darf nur auf dem ersten Knoten ausgeführt werden.

Die Details und Features des Volumes sieht man mit:

Um das Volume zu mounten, muss zuerst ein Mount-Punkt angelegt werden, z.B. /mnt/drbd . Danach kann gemountet werden:

Um das Volume nach einem Neustart automatisch zu mounten, muss es in die Kategorie /etc/fstab  eingetragen werden:

Nachdem auf beiden Knoten die Volumes gemountet wurden, sollten auch beide Knoten mit mounted.ocfs  zu sehen sein:

Benchmark Tool

Um die Performance zu ermitteln, wurde das Benchmark Tool fio verwendet. Fio ist durch den Einsatz einer Vielzahl von Parametern sehr flexibel und es können mit seiner Hilfe beliebige IO-Muster definiert werden.

Die Konfiguration von Fio wird über Options-Parameter vorgenommen. Der folgende Befehl wurde für alle Benchmarks verwendet:

Wichtig: Die hier gewählten Werte und Parameter zielen nicht darauf ab, eine maximale Performance (IOPS) zu erreichen. Vielmehr soll das Verhalten einer typischen Datenbank simuliert werden. Geringere IOPS Werte werden in Kauf genommen.

Folgende Block Devices wurden einem Benchmark unterzogen (jeweils HDD und SSD):

  • Block device mit ext4 Dateisystem
  • Block device mit OCFS2 Dateisystem
  • DRBD mit OCFS2 Dateisystem: Um die Auswirkung von DRBD in Betracht zu ziehen, wurde ein O2CB Cluster mit zwei Hosts konfiguriert. DRBD wurde im primary/primary Mode konfiguriert, so dass beide Hosts gleichzeitig IO-Operationen auf dem DRBD Device durchführen konnten.

Die Auswahl des Block Devices wird über den Parameter --filename  gesteuert. Hier kann entweder direkt ein Block Device genannt werden oder es wird über den Pfad zur angegebenen Datei definiert.

Erklärung der Parameter (laut: https://media.readthedocs.org/pdf/fio/latest/fio.pdf):

Parameter Erklärung
size=10g Größe der Testdatei
time_based Unabhängig von der angegebenen Dateigröße, soll der Benchmark über eine definierte Zeit laufen.
runtime=180 Laufzeit des Benchmarks in Sekunden.
direct=1 Es wird kein Cache verwendet sondern die Funktion O_DIRECT.
rw=randrw Gemischter, zufälliger Workload.
refill_buffers Mit dieser Option kann der SSD Kompressionseffekt umgangen werden. Die Schreibpuffer werden nach jedem IO-Submit mit neuem Inhalt befüllt.
norandommap Für IO werden zufällige Blöcke ausgewählt, unabhängig der IO-Historie.
randrepeat=0 Der Seed-Startwert für den Zufallszahlengenerator wird nicht gesetzt, somit ist das erzeugte Muster nicht vorhersehbar.
ioengine=libaio libaio ermöglicht asynchrone Zugriffe und damit parallele IO-Requests aus Applikations-Ebene. Die Parallelität wird mit der IO-Tiefe (iodepth) dann festgelegt.
iodepth=16 Anzahl der parallelen IO-Requests.
numjobs=16 Anzahl der Prozesse, die den Benchmark ausführen. Hier 16 damit jeder parallele IO-Request in einem eigenen Prozess läuft.
bs=8k Datenblock Größe. Oracle empfiehlt eine Datenblock-Größe von 8kB für RAC.
rwmixread=70 Definiert das Verhältnis von Lese- zu Schreiboperationen bei einem gemischten Workload. Hier 70% lesen.

Benchmark Ergebnisse

Die mit fio ermittelten IOPS Werte werden nun als Faktor relativ zueinander verglichen und dargestellt. Dabei wird zwischen Lese- und Schreiboperationen unterschieden. Ferner wird nach drei unterschiedlichen Dateisystemen ext4, natives OCFS2 (ohne darunterliegendes DRBD) und OCFS2 mit darunterliegendem DRBD klassifiziert. Außerdem wurden sämtliche Benchmarks auf den von ProfitBricks angebotenen redundanten HDD- und SSD-Speichern durchgeführt.

Leseperformance

Lesen ext4 OCFS2 (ohne DRBD) OCFS2 (mit DRBD)
HDD lesen 1 0,9987991594 0,9985990193
SSD lesen 7,004903432 7,30511358 7,30511358

Read Performance OCFS2

Bemerkenswert ist hier der Performancegewinn beim Einsatz von OCFS2 gegenüber ext4 als Dateisystem; er kommt vor allem bei den schnellen SSD-Fesstplatten zum Tragen. Dabei spielt es keine Rolle, ob OCFS2 direkt auf einem Block Device aufsetzt oder ob ein DRBD darunter liegt. Da beim Lesezugriff immer nur der lokale Knoten relevant ist, wird hier auch mit keinen Einbußen gerechnet.

Die Lesegeschwindigkeit von OCFS2 mit DRBD auf SSD Platten ist sogar um 4,29% höher als bei ext4.

Schreibperformance

Schreiben ext4 OCFS2 (ohne DRBD) OCFS2 (mit DRBD)
HDD schreiben 1 0,9988339552 0,9986007463
SSD schreiben 7,484841418 7,301772388 7,284048507

Write Performance OCFS2Bei der Performance von Schreiboperationen scheint OCFS2 generell etwas hinter ext4 zu rangieren. Der Einsatz von DRBD zeigt aber auch hier keinen nennenswerten negativen Einfluss auf die Schreibgeschwindigkeit in ein OCFS2 Dateisystem. Obwohl die Daten über das Netzwerk repliziert werden, liegt die Performance-Einbuße beim Einsatz von SSD-Speichern bei 2,68% gegenüber ext4: ein wirklich vernachlässigbarer Wert und in der Praxis nicht spürbar.

Zusammenfassung: DRBD und OCFS2

Wie in diesem 3-teiligem Artikel gezeigt werden konnte, eignet sich das Linux Kernel-Modul DRBD hervorragend als Shared Storage-Lösung auf Block Device-Ebene. In Verbindung mit dem Cluster-Dateisystem OCFS2 und dem Cluster Stack o2cb kann somit eine von Oracle unterstützte populäre Storage-Lösung kostengünstig und hochperformant betrieben werden; diese eignet sich sogar für den Einsatz eines darüber liegenden Oracle RAC.

Nicht nur die Performance bei diesem Setup kann zu 100% überzeugen. Auch die von ProfitBricks eingesetzte Infiniband-Netzwerktechnologie, mittels der die Synchronisation der zwei DRBD-Knoten geschieht, erweist sich als äußerst leistungsstark. Die replizierten Daten werden performant übertragen und zugleich auch wieder performant geschrieben.

Das Dateisystem OCFS2 überzeugt im Vergleich zu ext4. Überraschend ist die höhere Lesegeschwindigkeit von OCFS2 zu ext4, unabhängig davon, ob darunter ein DRBD verwendet wird.

Sämtliche eingesetzten Softwarepakete, Module und Tools haben einen reifen Versionsstand und werden seit vielen Jahren unterstützt und weiterentwickelt. Linbit, der Entwickler hinter DRBD seit 1999, bietet über die Community Version hinaus auch eine Enterprise Version inkl. Support, Consulting und Training an. Somit ist dieses Setup auch für eine Produktivumgebung einsetzbar. Laut Linbit kommt DRBD bei einer Reihe großer, namhafter Unternehmen zum Einsatz, darunter Netflix, Cisco, T-Mobile, IngDiBa und viele weitere.

Wir von ProfitBricks freuen uns sehr, den Einsatz von DRBD auf unserer IaaS Cloud Platform mit bestem Wissen und Gewissen empfehlen zu können.

Weitere Insights

Während des Benchmarks wurden noch weitere Szenarien durchgespielt. Unter anderem wurde getestet, ob die Auswahl der Verfügbarkeitszone einer VM und der Volumes (nur HDD), die Performance in die eine oder andere Richtung beeinflusst.
Die Resultate zeigten, dass die Auswahl der Verfügbarkeitszone keinerlei Auswirkung auf die Performance hat. Dies rührt von der Infiniband Architektur her, die eine einheitliche Performance und niedrige Latenzzeiten zu allen Komponenten innerhalb eines Clusters ermöglicht.

Externe Quellen

Fio
http://www.storagereview.com/fio_flexible_i_o_tester_synthetic_benchmark
https://media.readthedocs.org/pdf/fio/latest/fio.pdf
https://wiki.mikejung.biz/Benchmarking#Fio_Test_Options_and_Examples
https://www.thomas-krenn.com/de/wiki/Fio_Grundlagen

DRBD
https://www.suse.com/documentation/sle_ha/book_sleha/data/sec_ha_ocfs_create.html
https://www.linbit.com/en/benchmarking-drbd/
https://docs.linbit.com/doc/users-guide-84/s-replication-protocols/

OCFS2
http://www.oracle.com/us/technologies/linux/ocfs-best-practices-2133130.pdf
https://oss.oracle.com/projects/ocfs-tools/dist/documentation/v1.4/mkfs.ocfs.html

Oracle
https://www.lisenet.com/2016/o2cb-cluster-with-dual-primary-drbd-and-ocfs2-on-oracle-linux-7/
https://linux.oracle.com/switch/centos/

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *