Worüber wir sprechen werden:So stellen Sie schnell gemeinsam genutzten Speicher für zwei Server bereit, basierend auf drbd + ocfs2-Lösungen.
Für wen wird es nützlich sein:Das Lernprogramm ist nützlich für Systemadministratoren und alle, die eine Speicherimplementierungsmethode auswählen oder eine Lösung ausprobieren möchten.
Welche Entscheidungen haben wir abgelehnt und warum?
Oft sind wir mit einer Situation konfrontiert, in der wir einen gemeinsamen Speicher in einem kleinen Webcluster mit guter Lese- / Schreibleistung implementieren müssen. Wir haben verschiedene Optionen für die Implementierung eines gemeinsamen Repositorys für unsere Projekte ausprobiert, aber wenig konnte uns für mehrere Indikatoren sofort zufriedenstellen. Lassen Sie uns nun erklären, warum.
- Glusterfs passte nicht zu unserer Lese- und Schreibleistung, es gab Probleme beim gleichzeitigen Lesen einer großen Anzahl von Dateien, es gab eine hohe Belastung für die CPU. Das Problem beim Lesen von Dateien könnte gelöst werden, indem sie direkt im Baustein beantragt werden. Dies ist jedoch nicht immer zutreffend und im Allgemeinen falsch.
- Ceph gefiel die übermäßige Komplexität nicht, die bei Projekten mit 2 bis 4 Servern schädlich sein kann, insbesondere wenn das Projekt anschließend gewartet wird. Auch hier gibt es schwerwiegende Leistungseinschränkungen, die Sie dazu zwingen, separate Speichercluster wie bei glusterfs zu erstellen.
- Die Verwendung eines NFS-Servers zum Implementieren von gemeinsam genutztem Speicher führt zu Fehlertoleranzproblemen.
- s3 ist eine ausgezeichnete und beliebte Lösung für eine Reihe von Aufgaben, aber es ist kein Dateisystem, das den Umfang einschränkt.
- lsyncd. Wenn wir bereits über "Nicht-Dateisysteme" gesprochen haben, lohnt es sich, diese beliebte Lösung zu betrachten. Es ist nicht nur nicht für den bidirektionalen Austausch geeignet (aber wenn Sie es wirklich wollen, können Sie es auch), es funktioniert auch nicht stabil bei einer großen Anzahl von Dateien. Eine schöne Ergänzung zu allem wird sein, dass es Single-Threaded ist. Der Grund liegt in der Architektur des Programms: Es verwendet inotify, um die Arbeitsobjekte zu überwachen, die beim Start und beim erneuten Scannen hängen bleiben. Rsync wird als Übertragungsmedium verwendet.
Tutorial: Bereitstellen von gemeinsam genutztem Speicher basierend auf drbd + ocfs2
Eine der bequemsten Lösungen für uns war eine Reihe von
ocfs2 + drbd . Jetzt zeigen wir Ihnen, wie Sie gemeinsam genutzten Speicher für zwei Server basierend auf einer Datenbank mit Lösungen schnell bereitstellen können. Aber zuerst ein wenig zu den Komponenten:
DRBD ist das Standard-Linux-Speichersystem, mit dem Daten zwischen Serverblöcken repliziert werden können. Die Hauptanwendung ist das Erstellen fehlertoleranter Speicher.
OCFS2 ist ein Dateisystem, das die gemeinsame Nutzung desselben Speichers durch mehrere Systeme ermöglicht. In der Distribution von Linux enthalten und ist ein Kernelmodul und Userspace-Tools für die Arbeit mit FS. OCFS2 kann nicht nur über DRBD, sondern auch über iSCSI mit mehreren Verbindungen verwendet werden. In unserem Beispiel verwenden wir DRBD.
Alle Aktionen werden auf dem Ubuntu-Server 18.04 in einer minimalen Konfiguration ausgeführt.
Schritt 1. DRBD konfigurieren:
In der Datei /etc/drbd.d/drbd0.res beschreiben wir unser virtuelles Blockgerät / dev / drbd0:
resource drbd0 { syncer { rate 1000M; } net { allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } startup { become-primary-on both; } on drbd1 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.192:7789; } on drbd2 { meta-disk internal; device /dev/drbd0; disk /dev/vdb1; address 10.10.10.193:7789; } }
Meta-Disk intern - Verwenden Sie dieselben Blockgeräte zum Speichern von Metadaten
device / dev / drbd0 - Verwenden Sie / dev / drbd0 als Pfad zum drbd-Volume.
disk / dev / vdb1 - benutze / dev / vdb1
Syncer {Rate 1000M; } - Verwenden Sie die Gigabit-Kanalbandbreite
allow-two-primaries - eine wichtige Option, um Änderungen auf zwei primären Servern zu akzeptieren
after-sb-0pri, after-sb-1pri, after-sb-2pri - Optionen, die für die Aktionen des Knotens verantwortlich sind, wenn Splitbrain erkannt wird. Weitere Informationen finden Sie in der Dokumentation.
auf beiden primär werden - setzt beide Knoten auf primär.
In unserem Fall haben wir zwei absolut identische VMs mit einer dedizierten virtuellen Netzwerkbandbreite von 10 Gigabit.
In unserem Beispiel lauten die Netzwerknamen zweier Clusterknoten drbd1 und drbd2. Für einen ordnungsgemäßen Betrieb müssen Sie die Namen und IP-Adressen der Knoten in / etc / hosts zuordnen.
10.10.10.192 drbd1 10.10.10.193 drbd2
Schritt 2. Konfigurieren Sie die Knoten:Auf beiden Servern führen wir aus:
drbdadm create-md drbd0

modprobe drbd drbdadm up drbd0 cat /proc/drbd
Wir bekommen folgendes:

Sie können die Synchronisierung starten. Auf dem ersten Knoten müssen Sie Folgendes tun:
drbdadm primary --force drbd0
Wir schauen uns den Status an:
cat /proc/drbd

Großartig, die Synchronisation hat begonnen. Wir warten auf das Ende und sehen das Bild:
Schritt 3. Wir beginnen die Synchronisation mit der zweiten Note: drbdadm primary --force drbd0
Wir bekommen folgendes:

Jetzt können wir von zwei Servern auf drbd schreiben.
Schritt 4. Installieren und konfigurieren Sie ocfs2.Wir werden eine ziemlich triviale Konfiguration verwenden:
cluster: node_count = 2 name = ocfs2cluster node: number = 1 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.192 name = drbd1 node: number = 2 cluster = ocfs2cluster ip_port = 7777 ip_address = 10.10.10.193 name = drbd2
Es muss auf beiden Knoten in
/etc/ocfs2/cluster.conf geschrieben werden.
Erstellen Sie FS auf drbd0 auf einem beliebigen Knoten:
mkfs.ocfs2 -L "testVol" /dev/drbd0
Hier haben wir ein Dateisystem mit der Bezeichnung testVol auf drbd0 mit den Standardeinstellungen erstellt.

In / etc / default muss / o2cb gesetzt sein (wie in unserer Konfigurationsdatei)
O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster
und auf jedem Knoten ausführen:
o2cb register-cluster ocfs2cluster
Schalten Sie danach alle benötigten Einheiten ein und fügen Sie sie zum Start hinzu:
systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2
Ein Teil davon wird bereits während des Setup-Vorgangs ausgeführt.
Schritt 5. Fügen Sie fstab auf beiden Knoten Mount-Punkte hinzu: /dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
Das Verzeichnis
/ media / shared muss im Voraus erstellt werden.
Hier verwenden wir die Optionen noauto, was bedeutet, dass der FS beim Start nicht gemountet wird (ich bevorzuge das Mounten des Netzwerk-FS über systemd) und heartbeat = local, was bedeutet, dass der Heartbeat-Dienst auf jedem Knoten verwendet wird. Es gibt auch einen globalen Herzschlag, der für große Cluster besser geeignet ist.
Als Nächstes können Sie
/ media / shared bereitstellen und die Synchronisierung des Inhalts überprüfen.
Fertig! Als Ergebnis erhalten wir einen mehr oder weniger fehlertoleranten Speicher mit Skalierbarkeit und anständiger Leistung.