Cluster-Speicher fĂŒr kleine Web-Cluster auf Basis von drbd+ocfs2

WorĂŒber wir sprechen werden:
Wie man schnell einen gemeinsamen Speicher fĂŒr zwei Server auf Basis von drbd+ocfs2 bereitstellt.

FĂŒr wen es nĂŒtzlich sein wird:
Das Tutorial wird fĂŒr Systemadministratoren und alle, die eine Speicherlösung implementieren oder ausprobieren möchten, von Nutzen sein.

Von welchen Lösungen wir Abstand genommen haben und warum

HĂ€ufig stehen wir vor der Situation, dass wir auf einem kleinen Web-Cluster einen gemeinsamen Speicher mit guter Lese- und Schreibgeschwindigkeit realisieren mĂŒssen. Wir haben verschiedene AnsĂ€tze fĂŒr die Implementierung eines gemeinsamen Speichers fĂŒr unsere Projekte ausprobiert, aber nur wenige konnten uns in mehreren Kriterien gleichzeitig zufriedenstellen. Jetzt werden wir erklĂ€ren, warum.

  • Glusterfs hat uns in Bezug auf die Lese- und Schreibgeschwindigkeit nicht ĂŒberzeugt, es gab Probleme mit dem gleichzeitigen Lesen einer großen Anzahl von Dateien und die CPU-Last war hoch. Das Problem beim Lesen von Dateien konnte gelöst werden, indem man direkt auf die Bricks zugreift, aber das ist nicht immer sinnvoll und im Allgemeinen nicht korrekt.

  • Ceph fiel uns aufgrund der ĂŒbermĂ€ĂŸigen KomplexitĂ€t negativ auf, die in Projekten mit 2-4 Servern, insbesondere wenn das Projekt spĂ€ter gewartet wird, schĂ€dlich sein kann. DarĂŒber hinaus gibt es ernsthafte LeistungsbeschrĂ€nkungen, die es erforderlich machen, separate Storage-Cluster wie bei Glusterfs zu erstellen.

  • Die Verwendung eines NFS-Servers zur Implementierung eines gemeinsamen Speichers wirft Fragen zur Ausfallsicherheit auf.

  • S3 ist eine hervorragende, beliebte Lösung fĂŒr einen bestimmten Aufgabenbereich, aber es ist auch kein Dateisystem, was den Anwendungsbereich einschrĂ€nkt.

  • Lsyncd. Wenn wir bereits ĂŒber „Nicht-Dateisysteme“ sprechen, sollten wir auch diese beliebte Lösung erwĂ€hnen. Abgesehen davon, dass es nicht fĂŒr bidirektionalen Austausch geeignet ist (aber wenn man wirklich möchte, kann es funktionieren), funktioniert es auch nicht stabil bei einer großen Anzahl von Dateien. Ein angenehmes Merkmal ist, dass es einflusslos arbeitet. Der Grund liegt in der Programmarchitektur: Sie verwendet Inotify zur Überwachung von Arbeitsobjekten, die beim Start und beim Rescanning angehĂ€ngt werden. Als Übertragungsmedium wird Rsync verwendet.

Tutorial: So richten Sie einen gemeinsamen Speicher auf Basis von drbd+ocfs2 ein

Eine der bequemsten Lösungen fĂŒr uns war die Kombination ocfs2+drbd. Jetzt erklĂ€ren wir, wie man schnell einen gemeinsamen Speicher fĂŒr zwei Server auf Basis von Lösung Daten aufbauen kann. Aber zuerst einige Informationen zu den Komponenten:

DRBD — ein Speichersystem, das standardmĂ€ĂŸig mit Linux geliefert wird und die Replikation von Daten zwischen Servern in Blöcken ermöglicht. Die Hauptanwendung besteht im Aufbau von ausfallsicheren Speichern.

OCFS2 — ein Dateisystem, das die gemeinsame Nutzung desselben Speichers durch mehrere Systeme ermöglicht. Es ist Bestandteil der Linux-Distribution und besteht aus einem Kernelmodul und einem Userspace-Tool zur Arbeit mit dem FS. OCFS2 kann nicht nur ĂŒber DRBD, sondern auch ĂŒber iSCSI mit mehrfacher Verbindung verwendet werden. In unserem Beispiel verwenden wir DRBD.

Alle Aktionen werden auf Ubuntu Server 18.04 in minimaler Konfiguration durchgefĂŒhrt.

Schritt 1. Konfigurieren von DRBD:

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 internal — die gleichen BlockgerĂ€te zur Speicherung von Metadaten verwenden
device /dev/drbd0 — /dev/drbd0 als Pfad zu DRBD verwenden.
disk /dev/vdb1 — /dev/vdb1 verwenden
syncer { rate 1000M; } — eine Gigabit-KapazitĂ€t des Kanals verwenden
allow-two-primaries — eine wichtige Option, die Änderungen auf zwei PrimĂ€rservern zulĂ€sst
after-sb-0pri, after-sb-1pri, after-sb-2pri — Optionen, die das Verhalten des Knotens bei Erkennung von Split-Brain steuern. Weitere Informationen finden Sie in der Dokumentation.
become-primary-on both — setzt beide Knoten auf primĂ€r.

In unserem Fall haben wir zwei identische VMs mit einem dedizierten virtuellen Netzwerk, das eine Bandbreite von 10 Gigabit bietet.

In unserem Beispiel sind die Netzwerknamen der beiden Clusterknoten drbd1 und drbd2. Um richtig zu funktionieren, mĂŒssen Sie in /etc/hosts die Namen und IP-Adressen der Knoten zuordnen.

10.10.10.192 drbd1
10.10.10.193 drbd2

Schritt 2. Konfigurieren der Knoten:

Auf beiden Servern fĂŒhren wir aus:

drbdadm create-md drbd0

Cluster-Speicher fĂŒr kleine Web-Cluster auf Basis von drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Wir erhalten folgendes:

Cluster-Speicher fĂŒr kleine Web-Cluster auf Basis von drbd+ocfs2

Jetzt kann die Synchronisation gestartet werden. Auf dem ersten Knoten muss Folgendes ausgefĂŒhrt werden:

drbdadm primary --force drbd0

Wir ĂŒberprĂŒfen den Status:

cat /proc/drbd

Cluster-Speicher fĂŒr kleine Web-Cluster auf Basis von drbd+ocfs2

Perfekt, die Synchronisation hat begonnen. Wir warten auf das Ende und sehen folgendes Bild:

Cluster-Speicher fĂŒr kleine Web-Cluster auf Basis von drbd+ocfs2

Schritt 3. Synchronisation auf dem zweiten Knoten starten:

drbdadm primary --force drbd0

Wir erhalten folgendes:

Cluster-Speicher fĂŒr kleine Web-Cluster auf Basis von drbd+ocfs2

Jetzt können wir in drbd von beiden Servern schreiben.

Schritt 4. Installation und Konfiguration von 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

Dies muss in /etc/ocfs2/cluster.conf beiden Knoten geschrieben werden.

Erstellen Sie ein FS auf drbd0 auf einem beliebigen Knoten:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Hier haben wir ein FS mit dem Label testVol auf drbd0 erstellt, unter Verwendung der Standardparameter.

Cluster-Speicher fĂŒr kleine Web-Cluster auf Basis von drbd+ocfs2

In /etc/default/o2cb mĂŒssen folgende Werte gesetzt werden (wie in unserer Konfigurationsdatei):

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

und auf jedem Knoten ausgefĂŒhrt werden:

o2cb register-cluster ocfs2cluster

Danach aktivieren wir und fĂŒgen allen benötigten Unit-Elementen den Autostart hinzu:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Ein Teil davon wird bereits wÀhrend der Konfiguration gestartet.

Schritt 5. FĂŒgen Sie die EinhĂ€ngepunkte in fstab auf beiden Knoten 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 das FS beim Start nicht eingehĂ€ngt wird (ich bevorzuge es, Netzwerkspeicher ĂŒber systemd einzuhĂ€ngen) und heartbeat=local, was die Verwendung des Heartbeat-Dienstes auf jedem Knoten bedeutet. Es gibt auch ein globales Heartbeat, das besser fĂŒr grĂ¶ĂŸere Cluster geeignet ist.

Danach kann es eingehĂ€ngt werden /media/shared und die Synchronisation des Inhalts ĂŒberprĂŒft werden.

Fertig! Als Ergebnis erhalten wir ein mehr oder weniger ausfallsicheres SpeichergerÀt mit Skalierungsmöglichkeiten und anstÀndiger Leistung.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster