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:
- Jede Site kann Dateien in einem gemeinsam genutzten "Namespace" speichern. Das heißt, alle Dateien werden im selben Dateisystem angezeigt.
- 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.
- 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.
Antworten:
Schade um die Linux-Anforderung. Genau das macht Windows DFS. Seit 2003 R2 wird dies auch auf Blockebene durchgeführt.
quelle
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.
quelle
Haben Sie AFS in Betracht gezogen ?
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.
quelle
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.
quelle
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.
quelle
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:
quelle
Wenn Sie es einfach halten möchten, schauen Sie sich rsync an, lösen Sie viele Probleme und können Sie Skripte erstellen.
quelle
Überprüfen Sie die Chironfs .
Vielleicht kann es auf Dateisystembasis tun, was Sie wollen.
quelle
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.
quelle