Distributed Storage Filesystem - Welches / Gibt es ein einsatzbereites Produkt?

31

Mit Hadoop und CouchDB in Blogs und verwandten Nachrichten ist dies ein verteilter fehlertoleranter Speicher (Engine), der tatsächlich funktioniert.

  • In CouchDB sind eigentlich keine Distributionsfunktionen integriert, meines Wissens fehlt einfach der Kleber für die automatische Verteilung von Einträgen oder sogar ganzen Datenbanken.
  • Hadoop scheint sehr verbreitet zu sein - zumindest wird es gut gedruckt, hat aber immer noch eine einzige Schwachstelle: den NameNode. Außerdem ist es nur über FUSE montierbar. Ich verstehe, dass HDFS nicht das eigentliche Hauptziel von Hadoop ist
  • GlusterFS hat ein geteiltes Nichts-Konzept, aber in letzter Zeit habe ich mehrere Beiträge gelesen, die mich zu der Meinung geführt haben, dass es nicht ganz so stabil ist
  • Lustre hat auch eine einzige Fehlerquelle, da ein dedizierter Metadatenserver verwendet wird
  • Ceph scheint der Spieler der Wahl zu sein, aber die Homepage gibt an, dass es sich noch in der Alpha-Phase befindet.

Die Frage ist also, welches verteilte Dateisystem den folgenden Funktionsumfang hat (keine bestimmte Reihenfolge):

  • POSIX-kompatibel
  • einfaches Hinzufügen / Entfernen von Knoten
  • Shared-Nothing-Konzept
  • Läuft auf billiger Hardware (AMD Geode- oder VIA Eden-Prozessoren)
  • Integrierte Authentifizierung / Autorisierung
  • ein Netzwerk-Dateisystem (ich möchte es gleichzeitig auf verschiedenen Hosts mounten können)

Schön zu haben:

  • lokal zugängliche Dateien: Ich kann die Partition mit einem lokalen Standarddateisystem (ext3 / xfs / whatever ...) von einem Knoten herunterfahren und trotzdem auf die Dateien zugreifen

Ich suche keine gehosteten Anwendungen, sondern etwas, das es mir ermöglicht, 10 GB jeder unserer Hardware-Boxen zu erfassen und diesen Speicher in unserem Netzwerk zur Verfügung zu haben, der leicht auf einer Vielzahl von Hosts bereitgestellt werden kann.

Server Horror
quelle
Also, womit bist du gelandet? Es wäre interessant, etwas über Ihr aktuelles Setup zu erfahren.
MattBianco
Lustre scheint aktive / passive MDBs hinzugefügt zu haben, seitdem Sie dies geschrieben haben, sodass möglicherweise ein anderer Look erforderlich ist.
pjz
Nach meiner Erfahrung war GlusterFS stabil, aber die Leistung ist ziemlich schlecht. Für eine bessere Leistung benötigen Sie ernsthafte High-End-Hardware - im Grunde genommen RDMA. Wichtig ist die Latenz zwischen allen Servern und dem GlusterFS-Client-Rechner.
Mikko Rantalainen

Antworten:

9

Ich denke, Sie müssen auf die POSIX-Anforderung verzichten, nur sehr wenige Systeme implementieren dies - in der Tat funktioniert selbst NFS nicht wirklich (denken Sie an Sperren usw.) und das hat keine Redundanz.

Jedes System, das die synchrone Replikation verwendet, wird eiszeitlich langsam sein. Jedes System mit asynchroner Replikation (oder "eventueller Konsistenz") verstößt gegen POSIX-Regeln und verhält sich nicht wie ein "herkömmliches" Dateisystem.

MarkR
quelle
Kennen Sie Dateisysteme, die sowohl die letztendliche Konsistenz als auch die strikte Konsistenz unterstützen? Vielleicht könnte es für beide optimiert werden und zwei Bereitstellungen erstellen.
CMCDragonkai
16

Ich kann nicht mit dem Rest sprechen, aber Sie scheinen zwischen einer 'Distributed Storage Engine' und einem 'Distributed File System' zu verwechseln. Sie sind nicht dasselbe, sie sollten nicht mit demselben verwechselt werden, und sie werden niemals dasselbe sein. Ein Dateisystem ist ein Weg, um zu verfolgen, wo sich Dinge auf einer Festplatte befinden. Eine Speicher-Engine wie Hadoop ist eine Möglichkeit, einen Datenblock zu verfolgen, der durch einen Schlüssel identifiziert wird. Konzeptionell nicht viel Unterschied. Das Problem ist, dass ein Dateisystem eine Abhängigkeit von einer Speicher-Engine ist. Schließlich muss es eine Möglichkeit geben, auf ein Block-Gerät zu schreiben, nicht wahr?

Alles , was beiseite, ich kann auf die Verwendung von ocfs2 als verteiltes Dateisystem in einer Produktionsumgebung sprechen. Wenn Sie die groben Details nicht wollen, hören Sie nach dieser Zeile auf zu lesen: Es ist ein bisschen cool, aber es kann mehr Ausfallzeiten bedeuten, als Sie denken.

In den letzten Jahren haben wir ocfs2 in einer Produktionsumgebung ausgeführt. Es ist in Ordnung, aber für viele Anwendungen nicht besonders gut. Sie sollten sich Ihre Anforderungen genau ansehen und herausfinden, was sie sind. Möglicherweise haben Sie mehr Spielraum für Fehler als Sie dachten.

Zum Beispiel verfügt ocfs2 über ein Journal für jeden Computer im Cluster, der die Partition mounten soll. Nehmen wir also an, Sie haben vier Webcomputer, und wenn Sie diese Partition mit mkfs.ocfs2 erstellen, geben Sie an, dass es insgesamt sechs Computer gibt, auf denen Sie Platz zum Wachsen haben. Jedes dieser Journale belegt Speicherplatz, wodurch sich die Datenmenge verringert, die Sie auf den Datenträgern speichern können. Angenommen, Sie müssen auf sieben Maschinen skalieren. In dieser Situation müssen Sie das gesamte System ausschaltenCluster (dh Hängen Sie alle ocfs2-Partitionen aus) und erstellen Sie mit dem Dienstprogramm tunefs.ocfs2 ein zusätzliches Journal, sofern Speicherplatz verfügbar ist. Dann und nur dann können Sie den siebten Computer zum Cluster hinzufügen (was erfordert, dass Sie eine Textdatei an den Rest des Clusters verteilen, es sei denn, Sie verwenden ein Hilfsprogramm), alles sichern und dann die Partition auf allen sieben bereitstellen maschinen.

Verstehst du, was ich meine? Es soll Hochverfügbarkeit sein, was "immer online" bedeuten soll, aber genau dort haben Sie eine Menge Ausfallzeiten ... und Sie dürfen keinen Platz auf der Festplatte haben. Sie möchten nicht sehen, was passiert, wenn Sie ocfs2 überfüllen.

Denken Sie daran, dass evms, die früher die bevorzugte Methode zur Verwaltung von ocfs2-Clustern war, dem Dodo-Vogel zugute gekommen ist und sich für clvmd und lvm2 entschieden hat. (Und eine gute Lösung für das Böse.) Außerdem wird der Herzschlag schnell zu einem Zombie-Projekt zugunsten des Openais / Schrittmacher-Stacks. (Nebenbei: Wenn Sie die anfängliche Cluster-Konfiguration für ocfs2 vornehmen, können Sie anstelle von Heartbeat 'pcmk' als Cluster-Engine angeben. Nein, dies ist nicht dokumentiert.)

Was es wert ist, wir haben uns wieder für nfs entschieden, das von pacemaker verwaltet wird, da die wenigen Sekunden der Ausfallzeit oder einige verlorene TCP-Pakete, während der Schrittmacher eine nfs-Freigabe auf eine andere Maschine migriert, im Vergleich zu der Ausfallzeit, die wir für basic sahen, trivial sind Shared Storage-Vorgänge wie das Hinzufügen von Computern bei Verwendung von ocfs2.

Karl Katzke
quelle
2
Ich wollte nur darauf hinweisen, dass dies genau meine Erfahrung mit OCFS2 / Pacemaker vs. NFS ist. Nachdem ich OCFS2 eine Weile als Cluster-Datenspeicher ausprobiert hatte, fehlte es mir extrem. In der Zwischenzeit lief unser HA NFS-System wie ein Zauber.
Kamil Kisiel
1
OCFS2 ist definitiv nicht das, wonach ich suche. Mit "verteilt" meine ich nicht etwas mit einer zentralen Speicherinstanz, sondern etwas, bei dem ich Knoten, die Speicher bereitstellen, einfach hinzufügen / entfernen kann, während ich noch mit dem Rest des "Clusters"
Serverhorror
2
Da ich zu dieser Antwort immer noch Stimmen bekomme, sollte ich hinzufügen, dass wir jetzt GlusterFS in der Produktion als Ersatz für nfs verwenden. Wir speichern jedoch KEINE VM-Disk-Images, Datenbankspeicherdateien (sqlite oder myisam oder was auch immer) oder andere Dateien, die sich auf glusterfs häufig ändern können, da dies Replikationsfehler verursacht. Diese werden lokal auf VM-Hosts in LVM gespeichert und mithilfe von DRBD an Failover-Sites verteilt oder mithilfe der integrierten Replikation.
Karl Katzke
3

Nur um meine 0,02 € hier reinzuwerfen : Kann OpenAFS nicht tun, was Sie wollen?

wzzrd
quelle
3

Wie wäre es mit Xtreemfs ? Version 1.4 (November 2012) gilt als Produktionsqualität.

Es ist POSIX-kompatibel und verfügt über eine hervorragende automatische Fehlertoleranz.

MattBianco
quelle
2

Lustre ermöglicht mehrere Metadatenspeicher in Aktiv / Passiv-Konfiguration für Redundanz, sodass kein einzelner Fehlerpunkt entsteht.

OCFS2 könnte auch einen Blick wert sein.

Beachten Sie, dass es möglich ist, auf so etwas wie iSCSI oder sogar cifs oder nfs umzusteigen, wenn nicht mehrere gleichzeitig Netzwerkzugriffe erforderlich sind. Der Nachteil ist, dass Sie Teile Ihres uberArray für jeden Server, der Platz benötigt, in Bissen zerlegen müssen.

pjz
quelle
2

Sofern dies nicht für akademische / Entwicklungszwecke vorgesehen ist, sollte diese Vorgehensweise ausgehend von den allgemeinen Anforderungen für das Projekt erfolgen. Die meisten verteilten Dateisysteme sind nicht ausgereift genug für eine ernsthafte Bereitstellung. Was tun Sie beispielsweise, wenn das Ganze abbricht? Wenn es für akademische / Entwicklungszwecke ist, dann ist dies eigentlich eine gute Sache, da Sie viel lernen und viele Fehler beheben können.

Der Kommentar, der fragt, ob Sie POSIX-Semantik wirklich brauchen, ist ein guter Anfang. Die Semantik von Nicht-POSIX-Dateisystemen kann sehr viel flexibler sein und zu sehr viel zuverlässigeren Systemen führen.

Wenn dies eine Legacy-Anwendung ist, frage ich mich wirklich, warum ein modernes verteiltes Dateisystem als die beste Lösung angesehen werden kann.

Versteh mich nicht falsch - das sind erstaunlich lustige Spielzeuge. Ich möchte einfach nicht für eine komplexe, voneinander abhängige Lösung verantwortlich sein, die nicht häufig verwendet wird und deren Behebung sehr schwierig ist, wenn sie abbricht.

carlito
quelle
1

Brauchen Sie wirklich unbedingt POSIX-Semantik? Das Leben wird viel einfacher, wenn Sie einen benutzerdefinierten Datenspeicher verwenden können. Wir haben einen intern geschriebenen Datenspeicher, der effektiv ein sehr großer verteilter Schlüsselwertspeicher ist. Sie speichern eine Datei darin und Sie erhalten einen Token zurück. Wenn Sie die Datei zurückhaben möchten, geben Sie ihr das Token, das Sie zuvor erhalten haben. Es ist verteilt, wird geteilt - nichts, Daten werden dreimal repliziert, Knoten können nach Belieben hinzugefügt und entfernt werden, sowohl Speicherserver als auch Steuerungsserver.

David Pashley
quelle
Leider brauche ich wirklich POSIX-Semantik. Wir haben viele "Legacy-Apps", die Sachen im lokalen Dateisystem speichern. Das alles umzuschreiben ist definitiv außerhalb des Budgets
Serverhorror
Ich vermute, dass Sie einige Ihrer anderen Anforderungen aufgeben müssen. Ich würde mir GlusterFS, Luster, OCFS2, GFS ansehen, aber ich bezweifle, dass Sie eines finden, das geteilt hat - nichts.
David Pashley
en.wikipedia.org/wiki/... listet verteilte Dateisysteme auf, aber nur sehr wenige von ihnen sind POSIX.
David Pashley
Vor Äonen habe ich eine Variante von AFS verwendet (was jetzt OpenAFS ist). Es funktionierte, war aber komplex und hatte seine eigenen Macken.
Jauder Ho
1

Lustre hat auch eine einzige Fehlerquelle, da ein dedizierter Metadatenserver verwendet wird

Lustre unterstützt Failover, und ein MDS / MDT / OSS kann über eine Reihe von Adressen verfügen, unter denen er kontaktiert werden kann. Heartbeat kann zum Migrieren des Dienstes verwendet werden.

Beachten Sie, dass in einigen neueren Versionen Probleme aufgetreten sind, bei denen das Aufheben des Ladevorgangs zu funktionieren scheint, die Daten jedoch noch auf der Disc gespeichert sind.

James
quelle
1

Ich empfehle die Verwendung von MooseFS (Fehlertolerantes, Scaling-out, Netzwerk-verteiltes Dateisystem). Es ist POSIX-konform und seit Version 1.6 bietet MooseFS eine einfache, NFS-ähnliche Authentifizierung / Autorisierung. Siehe auch Hardwareanforderungen .

TechGeek
quelle