Vermeiden von SPOFS mit GlusterFS und Windows

10

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:

GlusterFS-Dokumentenfluss

  1. Dateien werden von einem Linux-Verarbeitungsknoten gelesen.
  2. Die Dateien werden verarbeitet.
  3. 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.
  4. 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:

GlusterFS doc-flow über Winders

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=enableMount-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:

NFS-Verzeichnis mit guten Namen auf dem Server

Wenn ich es von einem Server 2008 R2-System mit installiertem NFS-Client einbinde, wird folgende Verzeichnisliste angezeigt:

NFS-Verzeichnis mit schlechten Namen auf dem Client

Es ist klar, dass Unicode nicht beibehalten wird. NFS wird also nicht für mich funktionieren.

sysadmin1138
quelle
Ich glaube, das Samba-Team hält es für ctdbstabil 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.
Sven
Welche Windows-Version möchten Sie verwenden?
Tom O'Connor
@ TomO'Connor Wie das Tag sagt, Windows 7. Allerdings wird Server 2008 R2 irgendwann dort sein.
sysadmin1138
Ich nehme an, Cygwin kommt nicht in Frage?
Tom O'Connor

Antworten:

5

Ich mag GlusterFS. Eigentlich liebe ich GlusterFS. Solange Sie ihm eine dedizierte Bandbreite geben können, ist alles in Ordnung.

Eines der besten Dinge an GlusterFS ist die Verwendung mit NFS. Eines der überraschenden Dinge, mit denen ich in letzter Zeit gearbeitet habe, ist NFS unter Windows 7 und 2k8R2 .

Folgendes würde ich tun.

  1. Richten Sie 2 GlusterFS-Server ein, die NFS exportieren können.
  2. Richten Sie eine Heartbeat-Verbindung zwischen ihnen ein.
  3. Vielleicht so etwas wie Heartbeat / Pacemaker einsetzen?
  4. Richten Sie eine virtuelle IP (VIP) zwischen Ihren Gluster-Knoten ein.
  5. Verbinden Sie die zugeordneten Netzwerklaufwerke der Windows-Box mit der IP-Adresse des VIP.
  6. Testen Sie alles, was Sie sich vorstellen können.

Das Clustering von Samba klingt beängstigend, und selbst wenn Sie dies tun, fehlt Samba die Fähigkeit, sich in einigen Windows-Netzwerken zuverlässig zu verhalten (all diese NT4-Domänenkompatibilität scheint nie in der Lage zu sein, darüber hinwegzukommen).

Ich denke , da sich jeder Gluster-Knoten im verteilten, replizierten Modus befindet, sollten Sie theoretisch in der Lage sein, eine Verbindung zu beiden herzustellen und sich Gedanken über das Verschieben Ihrer Daten zu machen. Infolgedessen sollte der Herzschlag das sein, was die Umleitung und Kontrolle darüber vornimmt, mit welchem ​​Sie sprechen.

Wie für Ihre

  • Die Anzahl der Dateien kann bis zu zehn Millionen betragen.

Ich schlage vor, dass Sie die Verwendung von XFS als zugrunde liegendes Dateisystem untersuchen, da es mit großen Dateisystemen ziemlich gut funktioniert und unter GlusterFS unterstützt wird

Tom O'Connor
quelle
Ich benutze derzeit XFS! Wir haben uns vor einiger Zeit NFS3 angesehen, um die anfängliche Aufnahmefunktion zu handhaben, aber es erwies sich aufgrund mangelnder Unicode-Unterstützung als nicht funktionsfähig. Dies war mit dem NFS-Server unter Windows. "会計 2012.xls" würde nicht korrekt wiedergegeben, und das ist sehr wichtig. Aber ... ich wusste das nicht über 7 / R2 und ist es wert, untersucht zu werden!
sysadmin1138
Also habe ich einen Test durchgeführt. Leider wurden keine guten Ergebnisse erzielt (siehe Update auf Frage). Das Unicode-Problem scheint bidirektional zu sein.
sysadmin1138
Mistkerl. Ich habe also keine Ideen mehr. Ich frage mich, ob Sie Samba hinter einen VIP stellen könnten.
Tom O'Connor
Arbeitsgruppe ja, Domain (die wir verwenden) nein. Also mein Problem.
sysadmin1138
Andererseits ist es nach einem Gespräch mit den Entwicklern nicht so kritisch, die Dateinamen beizubehalten, wie ich erwartet hatte. Anscheinend wird die Datenbank die Namen verfolgen, solange wir sie in der ersten Phase (Aufnahme) erhalten können. Daher ist NFS hier eine gültige Option (sobald wir die richtigen Windows-Versionen erhalten haben).
sysadmin1138
1

Vielleicht können Sie an eine HA-Lösung denken ... Verwenden Sie ein LDAP zur Authentifizierung (es kann so viele LDAP-Server repliziert werden, wie Sie möchten) und platzieren Sie eine IP-Adresse, um SMB-Dienste abzuhören.

Diese IP wird auf dem Hauptserver schweben. Wenn dies nicht funktioniert, kann Heartbeat Dienste auf dem zweiten Server starten.

Diese Server haben einen Mountpunkt für glusterfs, und dann sind alle Daten dort.

Es ist eine mögliche Lösung und so einfach zu verwalten ...

Saxa
quelle