Wir haben einen GlusterFS-Cluster, den wir für unsere Verarbeitungsfunktion verwenden. Wir möchten, dass Windows integriert wird, haben jedoch einige Probleme, herauszufinden, wie der Single-Point-of-Failure eines Samba-Servers, der ein GlusterFS-Volume bedient, vermieden werden kann.
Unser Dateifluss funktioniert folgendermaßen:
- Dateien werden von einem Linux-Verarbeitungsknoten gelesen.
- Die Dateien werden verarbeitet.
- Die Ergebnisse (können klein sein, können ziemlich groß sein) werden sofort in das GlusterFS-Volume zurückgeschrieben.
- Die Ergebnisse können stattdessen in eine Datenbank geschrieben werden oder mehrere Dateien unterschiedlicher Größe enthalten.
- Der Verarbeitungsknoten nimmt einen anderen Job aus der Warteschlange und GOTO 1 auf.
Gluster ist großartig, da es ein verteiltes Volume sowie eine sofortige Replikation bietet. Katastrophenresilienz ist schön! Wir mögen es.
Da Windows jedoch keinen nativen GlusterFS-Client hat, benötigen unsere Windows-basierten Verarbeitungsknoten eine Möglichkeit, auf ähnlich belastbare Weise mit dem Dateispeicher zu interagieren. In der GlusterFS-Dokumentation heißt es, dass für die Bereitstellung des Windows-Zugriffs ein Samba-Server auf einem bereitgestellten GlusterFS-Volume eingerichtet werden muss. Das würde zu einem Dateifluss wie diesem führen:
Das sieht für mich nach einem Single-Point-of-Failure aus.
Eine Möglichkeit besteht darin, Samba zu gruppieren , aber dies scheint derzeit auf instabilem Code zu beruhen und daher nicht mehr ausgeführt zu werden.
Also suche ich nach einer anderen Methode.
Einige wichtige Details zu den Arten von Daten, die wir herumwerfen:
- Die ursprünglichen Dateigrößen können zwischen einigen KB und einigen zehn GB liegen.
- Verarbeitete Dateigrößen können zwischen einigen KB und ein oder zwei GB liegen.
- Bestimmte Prozesse, wie das Graben in einer Archivdatei wie .zip oder .tar, können eine Menge weiterer Schreibvorgänge verursachen, wenn die enthaltenen Dateien in den Dateispeicher importiert werden.
- Die Anzahl der Dateien kann bis zu zehn Millionen betragen.
Diese Arbeitslast funktioniert nicht mit einem Hadoop-Setup mit "statischer Arbeitseinheitengröße". In ähnlicher Weise haben wir Objektspeicher im S3-Stil bewertet, aber festgestellt, dass sie fehlen.
Unsere Anwendung ist benutzerdefiniert in Ruby geschrieben und wir haben eine Cygwin-Umgebung auf den Windows-Knoten. Dies kann uns helfen.
Eine Option, die ich in Betracht ziehe, ist ein einfacher HTTP-Dienst auf einem Cluster von Servern, auf denen das GlusterFS-Volume bereitgestellt ist. Da wir mit Gluster im Wesentlichen nur GET / PUT-Operationen ausführen, scheint dies leicht auf eine HTTP-basierte Dateiübertragungsmethode übertragbar zu sein. Wenn Sie sie hinter ein Loadbalancer-Paar stellen, können die Windows-Knoten HTTP-PUT nach dem Inhalt ihres kleinen blauen Herzens durchführen.
Was ich nicht weiß, ist, wie die GlusterFS-Kohärenz aufrechterhalten werden würde . Die HTTP-Proxy-Schicht führt eine ausreichende Latenz zwischen dem Zeitpunkt ein, an dem der Verarbeitungsknoten meldet, dass der Schreibvorgang abgeschlossen ist, und dem Zeitpunkt, an dem er tatsächlich auf dem GlusterFS-Volume sichtbar ist finde es. Ich bin mir ziemlich sicher, dass die Verwendung der direct-io-mode=enable
Mount-Option helfen wird, aber ich bin mir nicht sicher, ob das ausreicht . Was sollte ich noch tun, um die Kohärenz zu verbessern?
Oder sollte ich eine andere Methode verfolgen?
Wie Tom weiter unten ausgeführt hat, ist NFS eine weitere Option. Also habe ich einen Test durchgeführt. Da die oben genannten Dateien vom Client bereitgestellte Namen haben, die wir behalten müssen, und in jeder Sprache vorliegen können, müssen wir die Dateinamen beibehalten. Also habe ich ein Verzeichnis mit diesen Dateien erstellt:
Wenn ich es von einem Server 2008 R2-System mit installiertem NFS-Client einbinde, wird folgende Verzeichnisliste angezeigt:
Es ist klar, dass Unicode nicht beibehalten wird. NFS wird also nicht für mich funktionieren.
ctdb
stabil und produktionsbereit, und der erste Satz in dem von Ihnen angegebenen Link macht den zweiten ungültig, da er nie aktualisiert wurde. Ich hatte vor, dies zu etablieren, aber bevor ich dazu kam, wechselte ich Jobs in eine nahezu fensterfreie Umgebung.