Geografisch verteiltes Dateisystem mit bevorzugter Lokalität

11

Ich erstelle eine Anwendung, die einen Standard-Dateiserver über ein WAN auf einige Standorte verteilen muss. Grundsätzlich muss jede Site viele verschiedene Dateien unterschiedlicher Größe schreiben (einige im Bereich von 100 MB, die meisten jedoch klein), und die Anwendung ist so geschrieben, dass Kollisionen kein Problem darstellen. Ich möchte ein System einrichten, das die folgenden Qualifikationen erfüllt:

  1. Jede Site kann Dateien in einem gemeinsam genutzten "Namespace" speichern. Das heißt, alle Dateien werden im selben Dateisystem angezeigt.
  2. Jeder Standort würde keine Daten über das WAN senden, es sei denn, dies ist erforderlich. Das heißt, auf jeder Seite des WAN würde lokaler Speicher vorhanden sein, der in dasselbe logische Dateisystem "zusammengeführt" würde.
  3. Linux & Free ($$$) ist ein Plus

Grundsätzlich würde so etwas wie eine zentrale NFS-Freigabe die meisten Anforderungen erfüllen, jedoch nicht zulassen, dass die lokal geschriebenen Daten lokal bleiben. Alle Daten von entfernten Seiten des WAN werden ständig lokal kopiert.

Ich habe mich mit Lustre befasst und einige erfolgreiche Tests damit durchgeführt. Es scheint jedoch, dass Dateien ziemlich gleichmäßig über den verteilten Speicher verteilt werden. Ich habe die Dokumentation durchgesehen und nichts gefunden, das den lokalen Speicher automatisch dem Remotespeicher "vorzieht". Sogar etwas, das mit dem Speicher mit der niedrigsten Latenz ging, wäre in Ordnung. Es würde die meiste Zeit funktionieren, was den Anforderungen dieser Anwendung entsprechen würde.


Einige Antworten auf einige der unten gestellten Fragen:

  • Serverknoten: 2 oder 3 zum Starten. Jeder Server verfügt über Dutzende gleichzeitiger Lese- / Schreibclients, die eine Verbindung herstellen.
  • Die WAN-Topologie ist vollständig vermascht und zuverlässig. (Großunternehmen, Kosten sind nicht so hoch wie Bürokratie)
  • Client-Failover: Ich hatte eigentlich nicht daran gedacht, das Client-Failover durchzuführen (hauptsächlich, weil unsere aktuelle Anwendung dies nicht nur an einem Standort tut). Ich nahm an, dass die praktische Antwort lautet, dass die Server an jedem geografisch verteilten Standort einzelne Fehlerquellen für die Clients sein sollen, die sie bedienen. Wenn Sie hier über etwas Bestimmtes nachdenken, denke ich, dass dies für die Diskussion ziemlich wichtig wäre.
  • Roll-my-own: Ich habe über rsync / unison nachgedacht, aber ich würde einiges an ausgefallener Logik benötigen, um den "dynamischen" Teil dieser Arbeit nahtlos zu machen. Das heißt, die Datei scheint lokal zu sein, wird jedoch nur bei Bedarf abgerufen.
  • MS-DFS: Es scheint sicherlich etwas zu sein, das ich untersuchen sollte. Mein Hauptproblem wäre möglicherweise die Unsicherheit über die Konfiguration / Zuverlässigkeit / Leistung des NFS-Servers unter Windows, da viele der Clients, die eine Verbindung herstellen, NFS-Clients sind.
dpb
quelle
Chaged Hard Req von Linux und Free to a Plus.
dpb

Antworten:

5

Schade um die Linux-Anforderung. Genau das macht Windows DFS. Seit 2003 R2 wird dies auch auf Blockebene durchgeführt.

Chris Thorpe
quelle
Chris, danke für die Antwort. Ich denke, DFS ist so ziemlich das, wonach ich suche, allerdings unter Windows. Sicher etwas, in das ich schauen muss.
dpb
DFS funktioniert nicht auf Blockebene. Der Replikationsdienst ist auf Dateibasis nicht transaktionsbezogen.
eckes
4

Einige Fragen:

  • Wie viele "Server" -Knoten möchten Sie an dieser Sache teilnehmen?

  • Wie sieht die WAN-Konnektivitätstopologie aus - Hub und Spoke, Full Mesh? Wie zuverlässig ist es?

  • Erwarten Sie ein Failover von Clients auf einen geografisch nicht lokalen Server, falls der lokale Server ausfällt?

Windows DFS-R würde sicherlich das sein, wonach Sie suchen, wenn auch für einige möglicherweise hohe Lizenzkosten.

Sie sagen, dass Kollisionen kein Problem sind und Sie keinen verteilten Sperrmanager benötigen. Sie können dies also mit Userland-Tools wie rsync oder Unison tun und einfach den resultierenden Korpus von Dateien mit NFS auf die lokalen Clients exportieren. Es ist hässlich, und Sie müssten eine Art System zusammenfügen, um eine Replikationstopologie zu generieren und die Userland-Tools tatsächlich auszuführen, aber es wäre sicherlich billig, wenn die Lizenzkosten steigen.

Evan Anderson
quelle
Vielen Dank für die Antwort Evan, ich habe meine Frage mit den Daten aktualisiert, nach denen Sie gefragt haben. Ich bin an Ihrer unisono / rsync-Idee interessiert, sehe aber nicht genau, wie mit dem dynamischen Aspekt umgegangen werden soll. (Ich habe nicht viel Erfahrung mit Unison, nur rsync).
dpb
@dpb: Ich habe diese Anforderung in Ihrer ursprünglichen Bearbeitung nicht verstanden. Microsoft DFS-R wird das auch nicht tun. Das On-Demand-Abrufverhalten erfordert etwas "Aktives" im Dateisystem, um Leseanforderungen für Dateistubs abzufangen, deren lokale Daten nicht zwischengespeichert sind, die Daten abzurufen und den Lesevorgang auszuführen. Mir ist kein geografisch verteiltes Dateisystem mit diesem Verhalten bekannt - das ähnelt eher einem HSM.
Evan Anderson
Für diejenigen, die so ahnungslos sind wie ich: en.wikipedia.org/wiki/Hierarchical_storage_management . Nochmals vielen Dank @Evan. Ich bin bei weitem nicht so daran interessiert, den zugrunde liegenden Speicherort dynamisch neu anzuordnen, wie ihn zunächst dynamisch auszuwählen. Ich denke, HSM klingt sehr cool, aber der coole Teil davon ist ziemlich übertrieben für das, was ich tue.
dpb
3

Haben Sie AFS in Betracht gezogen ?

Das Andrew File System (AFS) ist ein verteiltes vernetztes Dateisystem, das eine Reihe vertrauenswürdiger Server verwendet, um allen Client-Workstations einen homogenen, standorttransparenten Dateinamenraum zu präsentieren.

Soweit ich weiß, steckt der größte Teil der jüngsten Entwicklung hinter dem OpenAFS- Projekt.

Ich kann nicht so tun, als wäre ich mit dem Projekt vertraut genug, um zu wissen, ob die Funktion "Bevorzugter Ort" verfügbar ist, aber ansonsten klingt es nach einer guten Anpassung.

Insyte
quelle
1
Schauen Sie sich auch CodaFS an: en.wikipedia.org/wiki/Coda_%28file_system%29
blank3
1

Haben Sie sich OST-Pools in Lustre angesehen?

Es wird nicht automatisch sein, aber mit OST-Pools können Sie Verzeichnisse / Dateien bestimmten OST / OSS zuweisen - im Grunde genommen eine richtlinienbasierte Speicherzuweisung anstelle des Standard-Round-Robin / Striping über OSTs hinweg.

Sie können also ein Verzeichnis pro Standort einrichten und dieses Verzeichnis den lokalen OSTs für diesen Standort zuweisen, wodurch alle E / A an die lokalen OSTs weitergeleitet werden. Es wird weiterhin ein globaler Namespace sein.

Es wird viel Arbeit in die Verbesserung von Lustre über WAN-Verbindungen (lokale Caching-Server und ähnliches) gesteckt, aber AFAIK befindet sich noch in der Entwicklung.

James
quelle
Danke @James, das ist fast genau das, wonach ich suche. Ich bin nicht begeistert von dem Munged-Namespace auf der obersten Ebene (bestimmte Verzeichnisse einem OST-Pool zuweisen), aber vielleicht wäre das in Ordnung. Es ist zumindest gut zu wissen, was der Anwendungsfall und die Einschränkung in Lustre sind. Danke noch einmal!
dpb
1

Möglicherweise erreicht NFS, aber mit Cachefs auf den Anwendungsservern, Ihren Teil Ihres Ziels. Soweit ich weiß, wird alles, was geschrieben wurde, immer noch auf dem zentralen Server gespeichert, aber zumindest Lesevorgänge könnten lokal zwischengespeichert werden. Dies kann abhängig von Ihren Verwendungsmustern möglicherweise zu einer erheblichen Verzögerung der Lesevorgänge führen.

Auch Mabye UnionFS ist einen Blick wert. Ich denke, jeder Speicherort wäre ein NFS-Export, und dann könnten Sie UnionFS an jedem Speicherort verwenden, damit dies und alle anderen NFS-Bereitstellungen vom Speicherort als ein Dateisystem angezeigt werden. Ich habe jedoch keine Erfahrung damit.

Kyle Brandt
quelle
Danke @Kyle, ich wusste nichts über UnionFS, zusammen mit aggressivem Caching könnte NFS eine gute Lösung dafür sein. Ich denke, dass es mit zunehmender Anzahl von Standorten schwieriger werden könnte, diese zu warten, aber ich werde mich darum kümmern, bevor ich mich entscheide.
dpb
0

Sie können in DRBD suchen, um die Festplatten zu replizieren. http://www.drbd.org/ . Dies ist eine Linux-Hochverfügbarkeitslösung, die es gerade in den Kernel geschafft hat.

Dies hat jedoch einige Einschränkungen:

  1. Es können nur zwei Knoten eingerichtet werden
  2. WAN ist möglicherweise zu unzuverlässig, um DRBD robust zu halten.

quelle
Interessante Idee, aber ich glaube nicht, dass sie meiner Anwendung etwas gegenüber anderen verteilten Dateisystemen geben würde. (Glanz, Glanz usw.). Vielen Dank für die Veröffentlichung ...
dpb
0

Wenn Sie es einfach halten möchten, schauen Sie sich rsync an, lösen Sie viele Probleme und können Sie Skripte erstellen.

Der Unix-Hausmeister
quelle
0

Überprüfen Sie die Chironfs .

Vielleicht kann es auf Dateisystembasis tun, was Sie wollen.

Dom
quelle
0

Btsync ist eine weitere Lösung, mit der ich gute Erfahrungen gemacht habe. Es verwendet das BitTorrent-Protokoll zum Übertragen der Dateien. Je mehr Server Sie haben, desto schneller können neue Dateien synchronisiert werden.

Im Gegensatz zur rsync-basierten Lösung erkennt sie, wann Sie die Dateien / Ordner umbenennen, und benennt sie auf allen Knoten um, anstatt sie zu löschen / kopieren.

Ihre btsync-Clients können dann die Ordner in einem lokalen Netzwerk freigeben.

Der einzige Nachteil, den ich festgestellt habe (im Vergleich zu MS DFS), ist, dass keine lokale Dateikopie erkannt wird. Stattdessen wird es als neue Datei interpretiert und an alle Peers hochgeladen.

Bisher scheint btsync die beste Synchronisationslösung zu sein und kann auf Windows-, Linux-, Android- und ARM-Geräten (z. B. NAS) installiert werden.

Alex G.
quelle