In diesem Beitrag befassen wir uns mit den Vor- und Nachteilen von Cephfs und NFS als verteilte Dateispeichersysteme für die Einrichtung eines Docker-Clusters auf Bare-Metal-Servern und zeigen Ihnen, wie Sie mit beiden Systemen arbeiten können.
Wenn die DevOps-Engineers von K&C einen Docker-Cluster aufbauen, um die Entwicklungsumgebung auf einem physischen (Bare-Metal-)Server zu virtualisieren, stellt sich oft die Frage Cephfs vs. NFS (Ceph filesystem vs. Network File System). Welches der beiden verteilten Dateispeichersysteme soll für die Speicherung persistenter Daten verwendet werden, die auf allen Servern des Clusters verfügbar sein sollen? Ohne ein verteiltes Dateispeichersystem ist das gesamte Konzept von Docker-Containern gefährdet, da der Cluster nur dann im Hochverfügbarkeitsmodus funktioniert, wenn er von einem verteilten Dateispeichersystem unterstützt wird, wie es sowohl von CEPHfs als auch von NFS vertreten wird.
Jede Anwendung, die auf dem Arbeitsknoten des Clusters platziert ist, sollte auch Zugang zu unserem Datenspeicher haben und im Falle eines Ausfalls, Verlusts oder der Nichtverfügbarkeit eines der Server im Datenspeicher-Cluster weiterarbeiten.
NFS oder CephFS?
Dass eine persistente Speicherlösung notwendig ist, ist klar. Die Frage ist also eher, CephFS oder NFS?
Was ist NFS?
Das NFS – Network File System ist eines der am häufigsten verwendeten Datenspeichersysteme, das unsere Mindestanforderungen erfüllt. Es bietet transparenten Zugriff auf Dateien und Server-Dateisysteme. Und es ermöglicht jeder Client-Anwendung, die mit einer lokalen Datei arbeiten kann, auch mit einer NFS-Datei zu arbeiten, ohne dass eine Programmänderung erforderlich ist.
NFS Server-Schema
Aus dem obigen Schema können Sie ersehen, dass der NFS-Server Daten enthält, die jedem Server im Cluster zur Verfügung stehen. Das Schema eignet sich gut für Projekte mit geringem Datenvolumen und ohne die Notwendigkeit einer Hochgeschwindigkeitsein- und -ausgabe.
Welche Probleme können bei der Arbeit mit NFS auftreten?
Potenzielles NFS Problem #1
Die gesamte Last geht an die Festplatte, die sich auf dem NFS-Server befindet und die von allen anderen Servern des Clusters aufgerufen wird, um Lese- und Aufzeichnungsvorgänge durchzuführen.
Potenzielles NFS Problem #2
Ein einzelner Endpunkt zu einem Server mit Daten. Im Falle eines Ausfalls des Datenservers steigt die Wahrscheinlichkeit, dass auch unsere Anwendung ausfällt.
Was ist Ceph?
Cep hist eines der fortschrittlichsten und beliebtesten verteilten Datei- und Objektspeichersystme. Es ist ein Open-Source-Software-definiertes Remote-Dateisystem von Experten für DevOps- und Cloud-Entwicklung, der Red Hat Company.
Ceph – Key Features
- Keine einzelnen Einstiegspunkte;
- Leicht skalierbar auf Petabytes;
- Speichert und repliziert Daten;
- Verantwortlich für den Lastausgleich;
- Garantiert Zugänglichkeit und Systemstabilität;
- Es ist kostelos (die Entwickler können jedoch kostenplflichtigen Support anbieten);
- Keine spezielle Ausrüstung erforderlich (das System kann in jedem Rechenzentrum eingesetzt werden).
Wie Ceph als Datenspeicherlösung funktioniert
Ceph speichert Daten und stellt sie den Clients auf folgende Weise zur Verfügung:
1)RADOS – als ein Objekt.
2)RBD – als ein Block Device.
3)CephFS – als Datei, POSIX-kompatibles Dateisystem.
Der Zugriff auf die verteilte Speicherung von RADOS-Objekten wird mit Hilfe der folgenden Schnittstellen ermöglicht:
1)RADOS Gateway – Swift und Amazon-S3 kompatibel RESTful-Schnittstelle.
2)librados und die zugehörigen C/C++ bindings.
3)rbd und QEMU-RBD – Linux-Kernel und QEMU-Block.
Im folgenden Diagramm sehen Sie, wie die Datenplatzierung in dem mit Ceph Ansible eingerichteten Ceph-Cluster mit der Replikation x2 implementiert ist:
Und hier sehen Sie, wie die Daten innerhalb des Clusters wiederhergestellt werden, wenn ein Ceph-Cluster-Knoten ausfällt:
Ceph Use Cases
Ceph hat ein breites Zielpublikum gefunden, und einige der bekannten Unternehmen, die CephFS nutzen, sind:
Funktionsweise von Ceph und Infrastrukturanforderungen
Die wichtigste Infrastrukturanforderung von Ceph ist die Verfügbarkeit einer dauerhaften Netzwerkverbindung zwischen den Servern eines Clusters. Die Mindestanforderung an das Netzwerk ist das Vorhandensein einer Kommunikationsverbindung von 1 Gb/s zwischen den Servern. Dabei wird empfohlen, Netzwerkschnittstellen mit einer Bandbreite von mindestens 10 GB/s zu verwenden.
Aus unserer Erfahrung beim Aufbau von Ceph-Clustern ist es erwähnenswert, dass die Anforderungen an die Netzwerkinfrastruktur zu Engpässen in Docker-Clustern führen können. Jegliche Probleme in der Netzwerkinfrastruktur können zu Verzögerungen beim Empfang der Daten durch die Kunden führen sowie den Cluster verlangsamen und zu einer Neuverteilung der Daten innerhalb des Clusters führen. Wir empfehlen, die Server des Ceph-Clusters in einem Serverschrank zu platzieren und die Verbindungen zwischen den Servern mit Hilfe zusätzlicher interner Netzwerkschnittstellen herzustellen.
Unsere Erfahrung bei K&C umfasst auch Cluster, die mit Netzwerkkanälen von 1 GB/s gebaut wurden. Diese sind nicht mit internen Schnittstellen verbunden und in verschiedenen Server-Racks in unterschiedlichen Rechenzentren untergebracht. Selbst mit dieser weniger idealen Konfiguration kann die Arbeit eines Clusters in der Regel als zufriedenstellend angesehen werden, da es SLAs (Service Level Agreements) für die Datenverfügbarkeit von 99,9 % bietet.
Aufbau eines Docker-Clusters mit Mindestanforderungen unter Verwendung von CephFS
Wie würden Sie vorgehen, um einen Docker-Cluster mit Mindestanforderungen unter Verwendung von CephFS aufzubauen? In diesem Beispiel verwenden wir eine Netzwerkschnittstelle von 1 GB/s zwischen den Servern des Ceph-Clusters. Die Clients sind über dieselbe Netzwerkschnittstelle verbunden. Die Hauptanforderung in diesem Fall besteht darin, die oben genannten Probleme zu lösen, die bei der Implementierung des Datenspeicherschemas mit dem NFS-Server auftreten können. Für die Clients werden die Daten als Dateisystem bereitgestellt.
In einem Schema wie dem obigen haben wir drei physische Server mit drei Festplatten, die den Daten des Ceph-Clusters zugeordnet sind. Die Festplatten sind vom Typ HDD (nicht SSD), das Volumen beträgt 6 TB, Replikationsfaktor – x3. Das gesamte Datenvolumen beläuft sich somit auf 18 TB. Jeder der Server des Ceph-Clusters ist wiederum ein Zugangspunkt zum Cluster für die Endkunden. So können wir pro Zeiteinheit einen der Server des Ceph-Clusters „verlieren“ (Serverausfall/Serverwartung/…), um die Daten der Endkunden nicht zu beeinträchtigen und ihre Verfügbarkeit zu gewährleisten.
Im Falle des vorliegenden Schemas lösen wir das Problem, das NFS als einziger Zugangspunkt zu unserem Datenspeicher darstellt, und beschleunigen die Geschwindigkeit der Datenoperationen.
Testen wir den Durchsatz unseres Clusters am Beispiel eines Dateisatzes (Größe – 500 Gb) im CEPH-Cluster von einem Client-Server aus.
Die Grafik zeigt, dass das Laden der Datei in den Ceph-Cluster etwas mehr als fünf Stunden dauert. Außerdem sollten Sie auf das Herunterladen der Netzwerkschnittstelle achten: Sie wird mit 30 % – 300 Mbps belastet, nicht mit 100 %, wie Sie vielleicht vermuten würden. Der Grund dafür ist die Begrenzung der Aufzeichnungsgeschwindigkeit von HDD-Festplatten. Beim Aufbau eines Ceph-Clusters mit SSD-Laufwerken können Sie zwar höhere Aufzeichnungs-/Lese-Antwortzeiten erreichen, aber die Gesamtkosten des Clusters sind deutlich höher.
Fazit – CephFS oder NFS als Datenspeicherlösung für einen Docker-Cluster?
Die Entscheidung zwischen NFS und Ceph hängt von den Anforderungen und dem Umfang eines Projekts ab und berücksichtigt auch künftige Entwicklungen, wie z. B. die Anforderungen an die Skalierbarkeit. Wir haben an Projekten gearbeitet, für die Ceph die optimale Wahl war, und an anderen, bei denen das einfachere NFS mehr als ausreichend war, um die Anforderungen zu erfüllen.
Allgemein gesagt kann NFS bei kleinen Clustern mit geringer Datenlast eine kostengünstige, einfache und perfekt geeignete Wahl sein. Für größere Projekte, bei denen größere Datenmengen verarbeitet und gespeichert werden, empfiehlt sich eher die anspruchsvollere Ceph-Lösung.