GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Richten Sie Lsyncd lokal und über SSH ein, um Verzeichnisse zu synchronisieren

Dieser Artikel erklärt, wie Sie den Lsyncd einrichten Tool sowohl lokal als auch über SSH, um Verzeichnisse synchron zu halten.

Lsyncd steht für Live Syncing Mirror Daemon und ist ein Tool, das in Linux-Systemen verwendet wird, um Verzeichnisse synchron zu halten. Diese Verzeichnisse können lokal auf demselben Computer oder remote auf verschiedenen Computern gefunden werden. Bei der Remote-Synchronisierung konzentriert sich dieser Artikel auf die Verwendung von SSH, um dies zu erreichen.

Der Vorteil der Verwendung von Lsyncd ist, dass es sich um eine kostenlose und leichte Lösung handelt, die die Leistung des Dateisystems nicht beeinträchtigt. Es überwacht die Dateien regelmäßig auf Änderungen und verwendet dann rsync um die Synchronisierung durchzuführen.

Anforderungen

Für Lsyncd um richtig zu funktionieren, benötigen Sie rsync installiert.

HINWEIS: Es wird empfohlen, die folgenden Befehle als sudo

auszuführen

Um rsync zu installieren Verwenden Sie in CentOS-, Fedora- oder Red Hat-Systemen:

yum install rsync

Verwenden Sie für Ubuntu- oder Debian-Systeme:

apt-get update
apt-get install rsync

Lsyncd installieren

Um lsyncd zu installieren Auf einem CentOS-, Fedora- oder Red Hat-System muss das EPEL-Repository vor der Installation von lsyncd aktiviert werden . Die folgenden Befehle werden verwendet, um die Installation durchzuführen:

yum install epel-release
yum install lsyncd

Für ein Ubuntu- oder Debian-System ist die Datei lsyncd tool ist in den Standard-Repositorys enthalten, daher sollten die folgenden Befehle für die Installation ausreichen:

sudo apt-get update
sudo apt-get install lsyncd

Verwenden Sie den folgenden Befehl, um zu bestätigen, dass die Installation erfolgreich war, und um die installierte Version zu überprüfen:

lsyncd -version

Lsyncd-Konfigurationsdateien

Die Standardkonfigurationsdatei für Lsyncd wird automatisch unter /etc/lsyncd.conf erstellt wenn die Installation abgeschlossen ist.

Diese Datei enthält alle Parameter, die verwendet werden, um die Synchronisation zwischen Verzeichnissen durchzuführen, entweder lokal oder remote.

Zum Beispiel Konfigurationsdateien, deren Inhalt Sie in /usr/share/doc/lsyncd*/examples/ überprüfen können (Das * bezieht sich auf die installierte Lsyncd-Version).

cd /usr/share/doc/lsyncd-2.2.2/examples/
ls -lh
total 40
-rw-r--r--. 1 root root 715 Feb 16 2017 lalarm.lua
-rw-r--r--. 1 root root 1055 Feb 16 2017 lbash.lua
-rw-r--r--. 1 root root 534 Feb 16 2017 lecho.lua
-rw-r--r--. 1 root root 3376 Feb 16 2017 lftp.lua
-rw-r--r--. 1 root root 2278 Feb 16 2017 lgforce.lua
-rw-r--r--. 1 root root 2737 Feb 16 2017 limagemagic.lua
-rw-r--r--. 1 root root 2770 Feb 16 2017 lpostcmd.lua
-rw-r--r--. 1 root root 211 Feb 16 2017 lrsync.lua
-rw-r--r--. 1 root root 204 Feb 16 2017 lrsyncssh.lua
-rw-r--r--. 1 root root 4047 Feb 16 2017 lsayirc.lua

Für die Zwecke dieses Artikels sind die Konfigurationsdateien, die nützliche Beispiele sein können, lrsync.lua für die lokale Synchronisierung und lrsyncssh.lua für die Fernsynchronisierung.

Eine Konfigurationsdatei hat die folgende Struktur:

cat /usr/share/doc/lsyncd-2.2.2/examples/lrsync.lua
[...]
-- User configuration file for lsyncd.
-- Simple example for default rsync.
settings {
    statusFile = "/tmp/lsyncd.stat",
    statusInterval = 1,
}

sync{
    default.rsync,
    source="src",
    target="trg"
}

Wie bereits erwähnt, verwendet Lscynd den rsync Tool, um die Synchronisation durchzuführen, sodass Sie rsync verwenden können Flags, um den Prozess zu personalisieren, indem ein rsync hinzugefügt wird Parameter zum sync Aussage:

[...]
sync {
    default.rsync,
    source="src",
    target="trg",
    rsync = {
        archive = false,
        compress = true,
        links = false,
        owner = false,
        perms = false,
        verbose = true
    }
}
[...]

Außerdem ist es wichtig zu berücksichtigen, dass Lsyncd die Ereignisse für einen Standardwert von 20 Sekunden aggregiert, bevor überprüft wird, ob Änderungen vorgenommen wurden. Diese Zeit kann mit delay geändert werden Parameter im sync Abschnitt der Konfigurationsdatei:

sync {
    default.rsync,
    source = "src",
    target = "trg",
    delay = 5,
}

Lokale Verzeichnisse synchronisieren

Zum Synchronisieren des Inhalts des lokalen Verzeichnisses /path/source_dir in das lokale Verzeichnis /path/destination_dir Wir müssen einige Änderungen in der Konfigurationsdatei vornehmen und es wird empfohlen, eine Protokolldatei und eine Statusdatei zu erstellen, um den Fortschritt der Aufgabe zu verfolgen, obwohl dies ein optionaler Schritt ist:

mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

Der nächste Schritt besteht darin, die Konfigurationsdatei in /etc/lsyncd.conf zu ändern um die Quell- und Zielverzeichnisse und, falls erstellt, den Speicherort der Protokoll- und Statusdateien anzugeben. Die Konfiguration sieht wie folgt aus:

-- User configuration file for lsyncd.
-- Simple example for default rsync, but executing moves through on the target.
-- For more examples, see /usr/share/doc/lsyncd*/examples/
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
    default.rsync,
    source = "/path/source_dir",
    target = "/path/destination_dir"
}

Um diese neue Konfiguration zu aktivieren, starten Sie den Dienst mit dem folgenden Befehl:

systemctl start lsyncd

Nachdem Sie die obigen Anweisungen befolgt haben, beginnt Lsyncd mit der Synchronisierung des Inhalts von /path/source_dir nach /path/destination_dir .

WARNUNG Hinweis:Es ist nur dann sicher, Lsyncd beim Booten zu starten, wenn Sie sicher sind, dass die Zielverzeichnisse niemals von irgendetwas anderem Lsyncd geändert werden. Andernfalls aktivieren Sie Lsyncd nicht beim Booten und stellen Sie sicher, dass die MOTD eine Zeile enthält, die anzeigt, dass Lsyncd installiert ist und verwendet wird. Zum Beispiel:

Führen Sie beim Neustart die folgenden Schritte aus:

rsync prüfen, ob Sie sich in einer „Remote/Server“-Situation befinden:

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Starten Sie Lsyncd mit:

systemctl start lsyncd.service

Sie müssen mehrere lokale Verzeichnisse synchronisieren?

Um mehr als ein Verzeichnispaar zu synchronisieren, können Sie weitere sync hinzufügen Anweisungen in der Konfigurationsdatei:

[...]
sync{
default.rsync,
    source = "/path/source_1",
    target = "/path/target_1"
}

sync{
    default.rsync,
    source = "/path/source_2",
    target = "/path/target_2"
}
[...]

Synchronisieren Sie entfernte Verzeichnisse über SSH

Um eine Remote-Synchronisierung mit Lsyncd durchzuführen, muss der Quellserver passwortlosen SSH-Zugriff auf den Zielserver haben. Dies geschieht durch Erstellen von SSH-Schlüsseln in der Quelle Server.

Generieren Sie Schlüssel für den passwortlosen SSH-Zugriff

Verwenden Sie den folgenden Befehl auf dem Quellserver um die Schlüssel zu generieren:

ssh-keygen -t rsa

Sie werden aufgefordert, die Datei einzugeben, in der Sie den Schlüssel speichern möchten; Wenn Sie keine spezielle Konfiguration haben, lassen Sie es leer, um den Standardspeicherort zu verwenden. Danach fragt eine weitere Eingabeaufforderung nach einer Passphrase; lassen Sie dieses Feld leer, da Sie sich komplett ohne Passwort anmelden müssen.

Nachdem die Schlüssel generiert wurden, kopieren Sie den Schlüssel zum Ziel Server. Um es in die authorized_keys zu kopieren Datei auf dem Zielserver verwenden Sie die folgende Anleitung für die Quelle Server, auf dem die Schlüssel generiert wurden:

sudo su
ssh-copy-id DESTINATION_SERVER_IP

Um zu testen, ob die passwortlose Verbindung hergestellt wird, melden Sie sich am Ziel an Server von der Quelle eins:

ssh DESTINATION_SERVER_IP

Wenn Sie sich anmelden können, ohne zur Eingabe eines Passworts aufgefordert zu werden, war der Vorgang erfolgreich.

Nachdem Sie sich angemeldet haben, erstellen Sie auf dem Remote-Host ein Verzeichnis, das als Zielordner fungiert, und beenden Sie die SSH-Sitzung:

mkdir /path/remote_destination_dir
exit
exit

Bearbeiten Sie die Konfigurationsdatei

Die Struktur der Konfigurationsdatei bleibt wie im Abschnitt zum Synchronisieren lokaler Verzeichnisse beschrieben, es werden jedoch einige Änderungen an sync vorgenommen Aussage:

  • Die default.rsync Die Eigenschaft wird in default.rsyncssh geändert um rsync zu aktivieren Tool über SSH.
  • Das target -Eigenschaft wird durch zwei Eigenschaften ersetzt, um das Remote-Ziel anzugeben:host und targetdir .

Die Konfigurationsdatei sieht folgendermaßen aus:

[...]
settings = {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

servers = {
 "REMOTE_IP"
}
sourceList =
{
        "PATH_TO_FOLDER_TO_BE_SYNCED",
}
for _, source in ipairs( sourceList ) do
        for _, server in ipairs(servers) do

sync {
    default.rsyncssh,
    source = "/path/source_dir",
    host = "DESTINATION_SERVER_IP",
    targetdir = "/path/remote_destination_dir"
}
[...]

Sobald die Änderungen an der Konfigurationsdatei vorgenommen wurden, starten Sie den Dienst wie oben beschrieben:

systemctl start lsyncd

Wenn der Lsyncd-Dienst bereits läuft, starten Sie ihn einfach neu:

sudo service lsyncd restart

WARNUNG: Es ist nur sicher, Lsyncd so zu aktivieren, dass es beim Booten startet, wenn Sie sicher sind, dass die Zielverzeichnisse niemals von irgendetwas anderem Lsyncd geändert werden. Andernfalls aktivieren Sie Lsyncd nicht beim Booten und stellen Sie sicher, dass die MOTD eine Zeile enthält, die anzeigt, dass Lsyncd installiert ist und verwendet wird. Zum Beispiel:

Führen Sie beim Neustart die folgenden Schritte aus:

rsync prüfen, ob Sie sich in einer „Remote/Server“-Situation befinden

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Starten Sie Lsyncd mit

systemctl start lsyncd.service

Ausschließen von Verzeichnissen von Lsyncd

Manchmal müssen Sie einige ausgewählte Ordner in einem bestimmten Verzeichnis ausschließen. Beispiele sind:

  • NFS-gemountete Mediendateien.
  • Protokolldateien. Bei der Synchronisierung verursachen Protokolldateien viel unnötiges Geschwätz und Bandbreitennutzung. In einigen Fällen kann dies zu erheblichen Verzögerungen bei der Synchronisierung führen.
  • Temporäre Dateien, die von laufenden Prozessen verwendet werden.

Um nur Ordner auszuschließen, müssen Sie den relativen Pfad des ausgeschlossenen Ordners eingeben. Zum Beispiel:

  • /var/www ist das Zielverzeichnis, das mit den Slaves synchronisiert wird
  • /var/www/vhosts/www.example.com/wp-content/uploads ist das Verzeichnis, das von Ihrem NFS-Server bereitgestellt wird oder das Sie aus anderen Gründen nicht synchronisieren möchten.
  • Erstellen Sie Ausschlüsse in der lsyncd-Konfiguration. Angenommen, Sie verwenden Lsyncd 2.1.5 unter CentOS 6, stellen Sie zunächst sicher, dass Sie eine Exclude-Datei in der Konfiguration von Lsyncd haben, wie unten neben der Zeile „excludeFrom“ gezeigt:
vim /etc/lsyncd/lsyncd.conf
[...]
sync {
    default.rsyncssh,
    source="/var/www/",
    host=server,
    targetdir="/var/www/",
    excludeFrom="/etc/lsyncd-excludes.txt",
    rsync = {

Schließen Sie als Nächstes den Pfad relativ zum Quellverzeichnis aus, das für die Synchronisierung angegeben wurde. Da das Zielverzeichnis /var/www ist und das auszuschließende Verzeichnis /var/www/vhosts/www.example.com/wp-content/uploads ist, wäre unser Eintrag:

cat /etc/lsyncd-excludes.txt
vhosts/www.example.com/wp-content/uploads

ACHTUNG:Stellen Sie sicher, dass die Ausschlussdatei keine leeren Zeilen enthält. Wenn dies der Fall ist, behandelt lsyncd dies als „ausschließen /“ und dann wird alles ausgeschlossen.

Lsyncd auf NFS-Lösungen

Lsyncd wird häufig verwendet, um Dateien in einer Master-Slave-Architektur zu replizieren. Während dies hervorragend für die Handhabung von Inhalts-/Code-Updates funktioniert, ist es für Benutzerbeiträge oder Mediendateien oft einfacher, NFS zu verwenden, um einen Ordner zwischen den verschiedenen Webservern freizugeben. Achten Sie darauf, über NFS freigegebene Ordner von Lsyncd auszuschließen. Im schlimmsten Fall, wenn Ihr Master-Server neu gestartet wird, aber die NFS-Freigabe nicht gemountet werden kann, könnte dies dazu führen, dass Lsyncd den Inhalt Ihrer NFS-Freigabe löscht.

Es gibt mehrere Möglichkeiten, damit umzugehen.

Option 1:Verzeichnisse von Lsyncd ausschließen

Weitere Einzelheiten finden Sie im Abschnitt „Verzeichnisse von Lsyncd ausschließen“

Rsync funktioniert standardmäßig nicht mit den Zielen von symbolischen Links. Wir können dies verwenden, um die NFS-gemounteten Inhalte zu schützen.

Statt:

/var/www <– Stammordner für die Lsyncd-Replikation/Uploads <– Mountpunkt für NFS-Freigabe

Mounten Sie die NFS-Freigabe in einem anderen Ordner, sagen Sie /nfsmount, und gehen Sie dann wie folgt vor (vorausgesetzt, der Inhalt der Uploads wurde bereits nach /nfsmount/uploads kopiert):

cd /var/www
rm -Rf uploads
ln -s /nfsmount/uploads uploads

Jetzt befindet sich Ihr NFS-gemounteter Inhalt sicher außerhalb des Lsyncd-replizierten Verzeichnisbaums.

Option 3:Rsync-Parameter festlegen

Rsync unterstützt eine Option -x, die rsync anweist, Dateisystemgrenzen nicht zu überschreiten. Aber bevor Sie fortfahren, sollten Sie einige Hinweise beachten, bevor Sie dies versuchen:

  • Dies funktioniert nicht mit Cloud Block Storage-Volumes, zusätzlichen LVM-Volumes usw.
  • Dies funktioniert nicht, wenn sich Lsyncd auf demselben Server wie der NFS-Server befindet. Diese Option setzt voraus, dass Sie einen dedizierten NFS-Server haben
  • Dies funktioniert nur, wenn die Quelle ein einzelnes Dateisystem ist

Für Lsyncd 2.0.x:Fügen Sie diese Option zu den Optionen hinzu, die Lsyncd an rsync übergibt, indem Sie die Zeile rsyncOpts in /etc/lsyncd.lua bearbeiten:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsyncOpts="-avzx"
}

Für Lsyncd 2.1.x:Mit Lsyncd 2.1.x wurde rsyncOpts in rsync={options} geändert, wobei Optionen mit einem vollständigen Namen statt nur einem Buchstaben wie zuvor verwendet werden. Fügen Sie Folgendes zu /etc/lsyncd.conf hinzu:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsync={ one_file_system=true }
 }

Schlussfolgerungen

Die Verwendung von Lsyncd zur Synchronisierung lokaler und entfernter Ordner ist eine kostengünstige und effiziente Alternative, und dank der zahlreichen Optionen, die für die Konfigurationsdatei verfügbar sind, kann sie an Ihre Bedürfnisse angepasst werden.

  • Mit rsync Dateien synchronisieren

Verwenden Sie die Registerkarte „Feedback“, um Kommentare abzugeben oder Fragen zu stellen. Sie können auch ein Gespräch mit uns beginnen.


Linux
  1. So synchronisieren Sie lokale und entfernte Verzeichnisse in Linux

  2. So richten Sie SSH-Tunneling ein

  3. Herunterladen und Hochladen von Dateien über SSH

  4. So richten Sie SSH-Schlüssel ein

  5. Deaktivieren Sie die direkte Root-Anmeldung und den Benutzerzugriff über SSH auf den Server

Linux-Dateien und -Verzeichnisse mit rsync synchron halten

So verwenden Sie den Befehl rsync, um Daten lokal und über SSH zu kopieren

So richten Sie den öffentlichen und privaten SSH-Schlüssel unter Linux ein

SSH-Tunneling und Proxying

4 Möglichkeiten zum Übertragen von Dateien zwischen Remote- und lokalen Systemen über SSH

So verwenden Sie SSHFS-Mount mit Remote-Verzeichnissen über SSH