Rsync – Synchronisation leicht gemacht

Rsync ist ein Open-Source-Tool, welches unkomplizierten inkrementellen Datei-Synchronisation ermöglicht. Rsync ist unter der GNU General Public License frei erhältlich und wird derzeit von Wayne Davison weiter gepflegt. Rsync ist unter anderem eine tolle Lösung um Webpräsenzen/ -anwendungen auf einen redudanten Server automatisiert zu spiegeln. Unter http://samba.anu.edu.au/rsync/ kann man die offizielle Webseite bzw. Dokumentation zu Rsync einsehen.

Vorrausetzung für zur Nutzung von Rsync, ist natürlich eine funktionierende Installation des Tools auf beiden Servern (Sender, Empfänger). Ich werde nicht weiter auf die Installation eingehen, da diese sich recht einfach gestaltet, sofern man Paketmanger wie apt-get oder rpm bzw. yast oder ähnliches einsetzt.

HINWEIS

Rsync ist gnadenlos! Vor der Nutzung von Rsync und dessen Parameter, sollte man sich ausgiebig damit auseinader gesetzt haben und eventuell Testläufe mit unsensiblen Daten durchführen. Rsync ist zu mehr imstande als dem folgenden Einsatzbeispiel, es lohnt sich ein Blick in die man page.

Rsync Syntax

Per Konsole sieht das Syntax-Schema von Rsync folgendermaßen aus:

rsync [OPTIONEN] <Source> <Destination>

<Source> bestimmt das Quellverzeichnis. <Destination> gibt das Zielverzeichnis auf dem entfernten System an. Wird nur einer dieser beiden Parameter gesetzt, gilt das aktuelle Verzeichnis als Quell-Verzeichnis.

Beispiel

Folgendes Beispiel verdeutlicht das automatisierte Synchronisieren von einem Webserver (Debian) auf ein entferntes System (Debian) per SSH. Wichtig hierbei ist, dass der Benutzer der den Befehl anstösst und auch der Benutzer der die Aktionen auf dem entfernten System ausführt, genügend Rechte auf die zu übertragenden Ordner bzw. Dateien besitzt.

#min hour day month dow user command
#—————————————–
#
30 4 * * * rsync -e ssh -a - -delete - -exclude=ordner1/ - -exclude=datei1 - -exclude=ordner2/ - -exclude=cfg*.php /var/www/ root@domain.de:/var/www >> /var/log/rsync.log

Was geschieht im Detail? Jeden Morgen um 4:30Uhr wird der Rsync durch den Cronjob angestossen. Der Parameter

-e ssh

gibt an das die Synchronisation per SSH gesichert erfolgen soll. Die Option

-a

fasst die Optionen (-oDrlptg) zusammen:
  • -o behält Besitzrechte bei (nur root)
  • -D behält Gerätedateien bei (nur root)
  • -r kopiert Unterverzeichnisse
  • -l kopiert symbolische Links
  • -p behält Rechte bei
  • -t behält Zeiten bei
  • -g behält Gruppenrechte bei
Der Parameter -a ist unumgänglich, wenn man das entfernte System als Ersatzserver betreiben möchte, da so gewährleistet wird das die Daten und deren Struktur 1 zu 1 (Rechte, Besitzer, Symlinks etc.) übertragen wird. Vorraussetzung für den Einsatz des Ersatzservers ist natürlich, dass dessen Strukturen sehr ähnlich sind, besonders im Bezug auf Benutzer und deren Rechte.
Was macht - - delete? Genau das was vermutet wird, es löscht alle Dateien auf dem entfernten System, die durch die Übertragenden Dateien ersetzt werden sollen. Bsp. die Datei test.txt existiert auf beiden Systemen. Auf dem Quell-Server wurde diese Datei geändert. Nun würde beim nächsten Synchronisationsdurchlauf die Datei auf dem Ziel-Server durch die Option - - delete entfernt und dann durch die Übertragung neu geschrieben werden.
Mit dem Parameter - - exclude schliesst man Ordner, Unterordner und Dateien aus der Synchronisation aus. Gerade im Bezug auf das Betreiben eines redudanten Servers möchte man nicht nach jeder Synchronisation die typischen Konfigurations-Dateien überarbeiten und mit den Daten des Ziel-Servers anpassen, dies lässt sich bsp. mit - -exclude=cfg*.php einrichten, sofern die Konfigurationsdateien nach diesem Schema erstellt wurden.
Was genau würde in dem oben genannten Beispiel von wo nach wo synchronisiert? Der vollst. Inhalt von /var/www/ würde in den Zielordner root@domain.de:/var/www synchronisiert. Man beachte, dass das Zielverzeichnis keinen abschliessenden Schrägstrich führt. Ersatzweise kann man auch eine IP (root@xxx.xxx.xxx.xxx) oder auch eine dynamische Adresse für die entfernte Synchronisation angeben.

Voila!

Dem eifrigen Leser ist sicherlich aufgefallen, dass der geschilderte Vorgang so nicht funktionieren kann, denn der Cronjob würde zwar ausgeführt, aber dann zwecks Passwortabfrage (SSH-Login) in die Schranken gewiesen werden. Um den reibungslosen (passwortlosen) Verbidungsaufbau zu gewährleisten muss man einen öffentlichen Schlüssel bekanntmachen. Wie das funktioniert erfahren Sie in dem Beitrag SSH ohne Passwort Authentifizierung.

Hinweis

Diese Anleitung ist ein praktischer Leitfaden ohne Gewähr.

Links zum Thema


Druckansicht


Autor: admin
Datum: Sonntag, 3. Februar 2008 13:39
Trackback: Trackback-URL Themengebiet: Linux und mehr

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

2 Kommentare

  1. 1

    [...] Es existieren ein oder mehrere Webserver mit unterschiedlichen Standorten. Mit Rsync (Artikel: Rsync – Synchronisation leicht gemacht), Reoback (Artikel: REOBack Backup) und Master/Slave MySQL Replikation (Artikel: MySQL Replikation [...]

  2. 2

    [...] Passwort Authentifizierung Automatisiere SSH-Kommunikation, bsp. für Datei-Synchronisation (s. Rsync – Synchronisation leicht gemacht) kann ohne weiteres Zutun nicht automatisch ablaufen. Um auch die Authentifizierung zu [...]

Kommentar abgeben