Echtzeit-Dateisynchronisation


21

Gibt es ein Tool zum Synchronisieren von Dateien zwischen zwei oder mehr Linux-Servern unmittelbar nach dem Schreiben der Datei auf die Festplatte? Der rsyncBefehl passt nicht zu mir, denn wenn ich rsyncCron einstelle , kann ich mindestens 1 Minute einstellen, aber ich brauche ihn in Echtzeit.


2
Benötigen Sie eine Synchronisierung von einem Schreib- / Leseserver zu einem oder mehreren Nur-Lese-Servern oder eine Zwei-Wege-Synchronisierung (mit Weitergabe in beide Richtungen) oder eine n-Wege-Synchronisierung? Wie lösen Sie Konflikte, wenn Sie eine Zwei-Wege-Lösung wünschen?
Gilles 'SO- hör auf, böse zu sein'

Antworten:


18

Habe es selbst nicht benutzt, aber kürzlich darüber gelesen. Es gibt einen Daemon namens lsyncd, von dem ich annehme, dass er genau das tut, was Sie brauchen.

Lesen Sie HIER mehr darüber


2
IMHO sollte dies die akzeptierte Antwort sein. lsyncdverwendet inotify& sollte auf fs-Ebene am schnellsten sein. Mehr unter github.com/axkibe/lsyncd . Von dieser Seite aus: Lsyncd überwacht eine Ereignisüberwachungsschnittstelle für lokale Verzeichnisbäume (inotify oder fsevents). Es aggregiert und kombiniert Ereignisse für einige Sekunden und erzeugt dann einen (oder mehrere) Prozesse, um die Änderungen zu synchronisieren. Standardmäßig ist dies rsync. Lsyncd ist somit eine leichte Live Mirror-Lösung, die vergleichsweise einfach zu installieren ist und keine neuen Dateisysteme oder Blockgeräte erfordert und die Leistung des lokalen Dateisystems nicht beeinträchtigt.
SACHIN GARG

5

Inotify-Tools

Stellen Sie eine Schnittstelle zur Verfügung inotify, bestehend aus:

inotifywait

Dieser Befehl blockiert einfach für inotify-Ereignisse, sodass er für die Verwendung in Shell-Skripten geeignet ist. Es kann beliebige Dateien und Verzeichnisse überwachen und ganze Verzeichnisbäume rekursiv überwachen.

inotifywatch

Dieser Befehl sammelt Statistiken zur Dateisystemnutzung und gibt die Anzahl der inotify-Ereignisse aus.


4

Echtzeit-Dateisynchronisation zwischen mehreren Servern im Multi-Master-Modus

Es gibt ein gutes Tool lsyncdzum Synchronisieren von Dateien zwischen mehreren Servern in Echtzeit. Hier habe ich es mit zwei Servern versucht.

Hosts: Server1 und Server2

Verwendetes Betriebssystem: CentOS 7

Installieren Sie die folgenden Pakete auf beiden Servern.

# yum install -y epel-release
# yum -y install lua lua-devel pkgconfig gcc asciidoc lsyncd

ssh-key auf beiden Servern erzeugen und zur authorized_keysDatei hinzufügen . [öffentlichen Schlüssel von Server1 zu Server2 authorized_keysund öffentlichen Schlüssel von Server2 zur authorized_keysDatei von Server1 hinzufügen ]

Server1 Konfiguration

Öffnen /etc/lsyncd.confund kommentieren Sie die Standardkonfiguration mit --am Anfang der Zeile und fügen Sie die folgende Konfiguration zur Datei hinzu.

settings {
  logfile = "/var/log/lsyncd/lsyncd.log",
  delay = 1
}
sync {
  default.rsync,
  source="/home/test/public_html/",
  target="server2:/home/test/public_html/",
  rsync = {
    compress = true,
    acls = true,
    verbose = true,
    owner = true,
    group = true,
    perms = true,
    rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
  }
}

Ändern Sie die Ziel-IP im targetParameter.

Sie können den delayParameter gemäß Ihren Anforderungen ändern . Hier wird 1 Sekunde eingestellt.

Erstellen Sie nun das Protokollverzeichnis.

# mkdir -p /var/log/lsyncd

Aktivieren Sie den lsyncdDienst, um automatisch zu starten.

# systemctl enable lsyncd.service

Starten Sie den Dienst.

# systemctl start lsyncd.service

Server2-Konfiguration

Befolgen Sie die gleiche Konfiguration wie für Server1 und ändern Sie die targetIP- Adresse .

Jetzt ist die Synchronisation eingestellt.

Sie können die Aktivität von überprüfen tailf /var/log/lsyncd/lsyncd.log

Vielen Dank an MelBurslan für seinen Vorschlag.


Der Verzögerungsparameter unter Einstellungsfunktion ist ungültig. Verwenden Sie stattdessen die Variable maxDelays . Ich habe dieses Tool implementiert. Es ist wirklich mächtig.
Hasanuzzaman Sattar

3

Syncthing könnte eine Option sein. Es ist extrem schnell, die Übertragung erfolgt verschlüsselt und es gibt Clients für mehrere Plattformen. Mit "inotify" werden geänderte Dateien sofort synchronisiert.


2

Sie müssten dies mit einer Lösung vom Typ eines Cluster-Dateisystems angehen - eine einfache Synchronisierung zwischen den beiden Computern gibt Ihnen keine Echtzeitantwort.


Eigentlich sind diese Server bei AWS. Wir können also keine Cluster-Umgebung bekommen! Gibt es keinen anderen Weg?
Sourav

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.