Halten Sie zwei Remote-Verzeichnisse in Ubuntu in Echtzeit synchronisiert

Halten Sie zwei Remote-Verzeichnisse in Ubuntu in Echtzeit synchronisiert

Ich möchte zwei Remote-Verzeichnisse (z. B. dir1 und dir2) synchronisiert halten. Wenn sich also der Inhalt von dir1 ändert (z. B. Hinzufügen oder Löschen einer neuen Datei oder eines neuen Verzeichnisses oder Ändern des Inhalts einer Datei im Verzeichnis), wird die Änderung an dir2 weitergegeben und umgekehrt.

Der naivste Weg, der mir dazu einfällt, ist, rsync regelmäßig über cron auf beiden Rechnern auszuführen. Aber dieser Ansatz hat seine Trugschlüsse:

  1. Es kann vorkommen, dass der vorherige rsysnc nicht abgeschlossen ist und der Cron rsync noch einmal ausführt, während der vorherige rsysnc noch läuft.
  2. Eine neue Datei wird in dir1 hinzugefügt und bevor rsync auf dir2 ausgeführt wird, wird rsync auf dir1 ausgeführt. Anschließend wird die neu hinzugefügte Datei möglicherweise aus dir1 gelöscht, da sie nicht in dir2 vorhanden ist.
  3. Auch dies ist nicht Echtzeit.

Kann mir jemand eine bessere Möglichkeit vorschlagen, dies zu tun? Ich suche nach Open Source, das einfacher einzurichten und zu starten ist.

Antwort1

Die einzige Möglichkeit, eine „harte Echtzeit“-Garantie ohne Race Window bereitzustellen, besteht darin, sicherzustellen, dass ein Schreibvorgang erst bestätigt wird, nachdem er beide Seiten erreicht hat. Dies lässt sich normalerweise mit einem Cluster-Dateisystem (wie OCFS2 oder GFS2) auf einem gemeinsam genutzten Blockgerät erreichen. Ein solches gemeinsam genutztes Blockgerät kann einfach und kostengünstig mit DRBD erstellt werden.

Wie bei jedem Synchronisierungsmechanismus muss Ihr Intra-Cluster-Netzwerk in der Lage sein, die Änderungsrate mit akzeptabler Latenz zu übertragen.

Der Spickzettel besteht aus den Zeilen

  • Reservieren Sie auf beiden Seiten ein Blockgerät (Festplatte, Partition, LV, ..)
  • Installieren und konfigurieren Sie DRBD (apt-get install drbd-utils), verwenden Sie die hervorragende Dokumentation unterIhre Website
  • Installieren Sie einen Cluster-Stack Ihrer Wahl: Vollwertiges Red Hat (wenn Sie mehr als nur ein gemeinsam genutztes Dateisystem benötigen) oder das minimalistische, aber sehr einfache O2DLM (in OCFS2 enthalten).
  • Formatieren Sie das DRBD-Gerät entweder mit GFS2 (nur Red Hat-Stack) oder OCFS2 (mit beiden Stacks möglich) und mounten Sie es auf beiden Seiten

Sie haben jetzt KEIN Paar synchronisierter Verzeichnisse: Sie haben ein einzelnes Verzeichnis, das auf beiden Knoten verfügbar ist. Dies ist funktional dasselbe, aber ohne die Race-Fenster.

Antwort2

Wenn es sich auf derselben Maschine befindet, sollten Sie einen Dateisystemlink verwenden. Dies würde bedeuten, dass entweder dir2 auf dir1 „zeigt“ oder umgekehrt, während es transparent wäre. Verwenden Sie dazu lnzB ln -s /path/to/dir1 /path/to/dir2oder alternativ relative Pfade. Dies -sbedeutet, dass es sich um einen symbolischen Link handelt, der sich also nur auf den Pfad und nicht auf den Inode von bezieht dir1.

Bearbeiten: Entschuldigung, ich habe den Teil mit „beide Maschinen“ übersehen.

Erwägen Sie möglicherweise die Verwendung einer Netzwerkfreigabe, da die Synchronisierung zweier Standorte in (nahezu) Echtzeit immer schwierig ist.

verwandte Informationen