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.
linux
filesystems
storage
Server Horror
quelle
quelle
Antworten:
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.
quelle
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.
quelle
Ich kann Ihre Anforderungen falsch verstehen, aber Sie haben sich http://en.wikipedia.org/wiki/List_of_file_systems#Distributed_file_systems angesehen
quelle
Nur um meine 0,02 € hier reinzuwerfen : Kann OpenAFS nicht tun, was Sie wollen?
quelle
Schauen Sie sich chirp http://www.cse.nd.edu/~ccl/software/chirp/ und parrot http://www.cse.nd.edu/~ccl/software/parrot/ an.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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 .
quelle