Frage Bidirektionale Echtzeitsynchronisierung der großen Dateistruktur zwischen zwei entfernten Linux-Servern


Mit großem Dateibaum meine ich ungefähr 200k Dateien und wächst ständig. Eine relativ kleine Anzahl von Dateien wird jedoch in jeder gegebenen Stunde geändert.

Mit bidirektional meine ich, dass Änderungen auf jedem Server auftreten können und auf den anderen geschoben werden müssen, so dass rsync nicht angemessen erscheint.

Mit Abstand meine ich, dass die Server beide in Rechenzentren liegen, aber räumlich voneinander entfernt sind. Momentan gibt es nur 2 Server, die sich jedoch im Laufe der Zeit erweitern können.

In Echtzeit ist es in Ordnung, wenn zwischen den Synchronisierungen etwas Latenz liegt, aber das Laufen eines Cron alle 1-2 Minuten scheint nicht richtig zu sein, da sich ein sehr kleiner Teil der Dateien in jeder Stunde ändern kann, ganz zu schweigen von der Minute.

BEARBEITEN: Dies läuft auf VPS, so dass ich vielleicht auf die Arten von Kernel-Level-Sachen beschränkt bin, die ich tun kann. Außerdem sind die VPS nicht ressourcenreich, also würde ich Lösungen meiden, die viel RAM benötigen (wie Gluster?).

Was ist der beste / meist akzeptierte Ansatz, um dies zu erreichen? Dies scheint ein allgemeines Bedürfnis zu sein, aber ich konnte noch keinen allgemein akzeptierten Ansatz finden, was überraschend war. (Ich suche die Sicherheit der Massen. :)

Ich bin rübergekommen lsyncd um eine Synchronisierung auf der Dateisystemänderungsebene auszulösen. Das scheint schlau, wenn auch nicht sehr üblich, und ich bin etwas verwirrt wegen der verschiedenen lsyncd-Ansätze. Es gibt nur lsyncd mit rsync, aber es scheint, dass dies fraglich für die Bidirektionalität sein könnte, da rsync keine Vorstellung von Speicher hat (zB um zu wissen, ob eine gelöschte Datei auf A auf B gelöscht werden soll oder ob es eine neue Datei auf B ist das sollte nach A kopiert werden. lippensynchron scheint nur eine lsyncd + rsync-Implementierung zu sein, oder?

Dann verwenden wir lsyncd mit csync2, so was: http://www.axivo.com/community/threads/lightning-fast-synchronization-with-csync2-and-lsyncd.121/ ... Ich lehne mich diesem Ansatz zu, aber csync2 ist etwas eigenartig, obwohl ich einen erfolgreichen Test davon gemacht habe. Ich bin hauptsächlich besorgt, dass ich nicht in der Lage war, eine Menge Bestätigung dieser Methode in der Gemeinde zu finden.

Die Leute hier scheinen Unison sehr zu mögen, aber es scheint so zu sein nicht mehr unter aktiver Entwicklung und es ist nicht klar, dass es einen automatischen Trigger wie lsyncd hat.

Ich habe gesehen Glanz erwähnt, aber vielleicht übertrieben für das, was ich brauche?

AKTUALISIEREN: Ich ging mit der ursprünglichen Lösung, die ich erwähnt habe: lsyncd + csync2. Es scheint ziemlich gut zu funktionieren, und ich mag den architektonischen Ansatz, dass die Server sehr lose verbunden sind, so dass jeder Server unabhängig von der Verbindungsqualität zwischen ihnen unbegrenzt arbeiten kann.


22
2017-09-14 13:43


Ursprung


Welche Art von Änderungen müssen Sie handhaben? Z.B. Erstellung, Löschung, Änderung. - sciurus
Erwarten Sie auch Konflikte? Könnte dieselbe Datei auf beiden Servern geändert werden? - sciurus
Alle Änderungen: Erstellung, Löschung, Änderung. Es gibt ein Konfliktpotenzial, aber sie sollten selten sein. Es würde mir nichts ausmachen, wenn ich einfach eine Warnung zu einem Konflikt erhalte, den ich dann manuell beheben muss. - dlo


Antworten:


DRBD im Dual-Primär Modus mit a Proxy ist eine Option.


5
2017-09-16 16:48



Der Proxy scheint weder Open Source noch frei zu sein, oder? Ich bin mir nicht sicher, ob ich die Konsequenz davon verstehe, keinen Proxy im Async-Modus zu haben: Während einer längeren Ausfallzeit, wenn es keinen Proxy gibt, könnte der [kleine?] Ausgabepuffer voll werden und wir würden die Synchronisation verlieren. Ist es schwer, sich davon zu erholen? - dlo
Siehe meine Antwort oben. Ich glaube nicht, dass der Proxy das ist, was Sie brauchen. Auch während einer kleinen Ausfallzeit markiert das drbd-Meta-Gerät "dreckige" Blöcke und überträgt sie nach dem Verbindungsaufbau wieder. Ich denke, der Hauptunterschied zwischen Proxy und Async-Modus besteht darin, dass der Async-Modus einen maximalen Puffer von einigen MB verwendet. Danach wird es synchronisiert, bevor der Puffer erneut gefüllt wird. Der Proxy erlaubt wahrscheinlich einen größeren Puffer (erforderlich, wenn Sie eine große Latenz haben oder viel schneller lokal schreiben können als remote). - Nils


Warum teilen Sie das Dateisystem nicht über NFS, anstatt zu synchronisieren?


2
2017-09-14 14:22



NFS ist schrecklich, einfach schrecklich. Alles wäre besser als NFS - AliGibbs
Einer der wichtigsten Punkte des Multi-Server-Setups ist Failover / Redundanz. Also muss ein Server ohne den anderen fortfahren können. - dlo
Du hättest das in deiner Frage dann erwähnen sollen - keine Notwendigkeit, eine vollkommen vernünftige Antwort abzulehnen! - Bart B
Hey, ich habe es nicht abgelehnt - jemand anderes hat es getan. Aber ja, ich hätte das eingangs erwähnen sollen. - dlo
@ Bart: Nun - er hat erwähnt, dass es gleichzeitig Zugriff auf zwei entfernte Seiten gibt. Selbst wenn Sie HA-NFS aufsetzen, wäre das eine schlechte Lösung, da eine Seite während des NFS-Zugriffs Latenz erleiden würde. Und ich habe auch nicht runtergestimmt. Aber ich war lange genug NFS-Administrator, um AliGibbs zu unterstützen. : - / - Nils


Die Implementierung eines verteilten Dateisystems ist wahrscheinlich besser, als dies zusammen mit Tools und Skripten zu hacken, insbesondere wenn der Cluster von Servern wachsen wird. Sie werden auch in der Lage sein, einen ausgefallenen Knoten besser zu handhaben.

Ich glaube nicht, dass Gluster (oder AFS) überhaupt übertrieben ist.


2
2017-09-16 15:34



Gluster benötigt 1 GB RAM? gluster.com/community/documentation/index.php/... ... Ich bin auch auf einem VPS, also bin ich mir nicht sicher, ob Kernel-Level-Änderungen vorgenommen werden, die AFS benötigt. Aber ich fange an zu sehen, dass ein richtiger verteilter fs der bessere Weg ist. - dlo
Ja, tut mir leid, ich habe vorher nicht bemerkt, dass Sie VPS-Hosts verwenden. Gluster Speicherabdrücke, sowohl Server als auch Client, sind nicht klein und sie können erheblich wachsen. DRBD klingt passender.
AFS ist der Weg zu gehen. - Anthony Giorgio


In Ihrem Fall würde ich eine Kombination von DRBD im Dual-Primary-Modus und gfs oder ocfs empfehlen.

Der Nachteil von DRBD in Dual-Primary ist, dass es im synchronen Modus läuft. Aber Schreibgeschwindigkeit scheint hier nicht wichtig zu sein, oder?

Eine Alternative zu DRBD könnte ein Soft-Raid1 mit vielen (2+) iSCSI-Targets sein - aber ich würde DRBD mit zwei Knoten bevorzugen.


2
2017-09-16 21:11



Der synchrone Modus wäre schlecht - ich brauche ihn nicht, und ich möchte die Leistung nicht untergraben, da die Server über Kontinente hinweg über ein WAN verbunden sind. Aber kannst du Dual-Primary nicht im Async-Modus haben? - dlo
Ich verwende derzeit DRBD 8.3.5 - da muss man im Sync-Modus sein ("C"), um in den Dual-Primary-Modus zu gelangen. Ich habe keine persönlichen Erfahrungen mit DRBD-Proxy, aber es scheint zu Veritas Volume Replicator ähnlich zu sein - aber dies ist wahrscheinlich nicht geeignet, da Sie Schreibzugriff auf beiden Seiten wollen. Der Sync-Modus auf Block-Ebene ist möglicherweise nicht so schlimm wie du denkst - vielleicht können gfs und / oder ocfs Schreibvorgänge puffern. - Nils
Ich habe gerade ein deutscher Artikel Vergleich von GFS2 und OCFS2. Von diesem scheint OCFS2 zumindest den gepufferten Dateisystemzugriff zu unterstützen. GFS2 wird in diesem Artikel empfohlen, da es älter ist. Sehen RedHat Dokumentation auf GFS2 für Details zu GFS2 - es verwendet auch Pufferung - aber Sie sollten verschiedene Dirs für gleichzeitige Schreibvorgänge verwenden, um die beste Leistung zu erhalten. - Nils


Wie oben gezeigt, sind viele Lösungen verfügbar, jede mit ihren Vor- und Nachteilen.

Ich denke, ich würde in Erwägung ziehen, den gesamten Baum der Versionskontrolle zu unterwerfen (Subversionzum Beispiel) und periodisches Einchecken / Aktualisieren von beiden Servern in Cron-Jobs.


0
2017-09-19 20:56





Nachdem ich gerade eine Quest in Bezug auf die gleiche Sache beendet habe, gehe ich mit gluster. Ich habe jedoch keine Leistungstests durchgeführt oder gefunden.


0
2017-09-23 13:24