Daten synchronisieren mittels rsync

rsync ist absolut unverzichtbar, wenn es um die Datensicherheit bzw. Backup-Strategie geht. Denn mittels diesem Programm können zwei Rechner miteinander abgeglichen werden. Das tolle daran: rsync kopiert nicht nur komplette Dateien, sondern erkennt auch, ob eine Datei seit dem letzten Übertragen verändert oder unvollständig übertragen wurde. Somit können auch nur teile von Dateien kopiert werden.
rsync bringt von Haus aus sehr viele Möglichkeiten bzw. Parameter mit. Ich möchte mich an dieser Stelle aber darauf beschränken, wie man dieses Programm einsetzt, um (automatisierte) Backups zu organisieren.

rsync beispiel

Ansicht von Rsync in Putty

Hintergrundwissen zu rsync

rsync funktioniert nur unidirektional. Dies bedeutet, dass das Zielverzeichnis immer mit dem Quellverzeichnis abgeglichen wird. Änderungen am Zielverzeichnis gehen also in jedem Fall verloren.
Wie oben schon erwähnt, ist das besondere Merkmal von rsync, dass es erkennt, ob Dateien verändert wurden und diese nur dann überträgt, wenn sich seit der letzten Übertragung etwas geändert hat. Bricht man eine Übertragung mittendrin ab, so nimmt rsync seine Aufgabe wieder genau dort auf, wo es beendet wurde – auch, wenn nur die Hälfte einer Datei übertragen wurde. Dies kann natürlich unheimlich viel Transfervolumen und Bandbreite sparen.
Die Entwickler von rsync sind u.a. Paul Mackerras und Andrew Tridgell, die auch an der Entwicklung der Samba Suit beteiligt sind.

Server und Backupserver miteinander synchronisieren

Folgende Situation: die Sicherheit eines Servers im produktiven Einsatz soll erhöht werden und im Falle eines Festplattencrashes alle Daten wieder hergestellt werden. Um Datensicherheit zu gewährleisten gibt es RAID, ganz klar, doch es soll schon vorgekommen sein, dass ein RAID System nicht funktioniert oder gleich alle Festplatten ableben.
Zur Verfügung steht uns dabei ein weiterer Server, der nur für Backups gedacht ist. Dieser Backupserver holt auf Befehl hin alle angegebenen Daten vom Produktiv-Server und speichert diese. Im Notfall kann man dann den Spiess umdrehen und alle Daten vom Backupserver auf den Produktiv-Server übertragen.

Schritt-für-Schritt Anleitung für rsync

Wenn rsync noch nicht installiert ist, erledigen wir dieses:

apt-get install rsync

Wurde rsync schnell & unkompliziert auf beiden Maschinen installiert (also dem produktiven Server und dem Backupserver), können wir auch schon damit beginnen, die gewünschten Daten auf den backupserver zu schieben. Hierfür müssen wir uns zunächst Gedanken machen, welche Ordner bzw. was alles kopiert werden soll. In unserem Fall ist das die gesamte Verzeichnisstruktur des Webservers und damit aller Webseiten.
Auf dem Backupserver hilft uns der nachfolgende Befehl, die gewünschten Verzeichnisse zu sichern. Eine Erklärung dazu folgt weiter unten:

rsync -avzbe ssh NUTZERNAME@IP-ADRESSE:/var/www/DOMAIN.DE/htdocs /backups

Erklärung der Parameter -avzbe

a fasst folgende Aufgaben zusammen:
-r kopiert Unterverzeichnisse
-l kopiert symbolische Links
-p Rechte der Quelldatei beibehalten
-t Zeiten der Quelldatei beibehalten
-g Gruppenrechte der Quelldatei beibehalten
-o Besitzrechte der Quelldatei beibehalten, aber nur, wenn Benutzer Root ist
-D Gerätedateien der Quelldatei beibehalten, aber nur, wenn Benutzer Root ist
v erledigt folgende Aufgabe:
-zeigt Details dazu an, welche Schritte gerade durchgeführt werden
z überträgt die Daten komprimiert, was für langsame Geschwindigkeiten von Vorteil sein kann
b löscht sichert vorerst alle zu löschenden bzw. zu ersetzenden Dateien,
e lässt uns SSH für eine Übertragung nutzen.
NUTZERNAME@IP-ADRESSE bedeutet nichts anderes, als der zu verwendende Nutzername auf dem Server sowie dessen IP. Der Doppelpunkt (:) leitet die folgende Verzeichnisstruktur auf dem Server ein. Danach folgt ein Leerzeichen und die Ordnerstruktur auf dem backupserver.

Und schon haben wir die gewünschten Daten auf dem Server (in unserem Fall also alle Daten innerhalb von /var/www/DOMAIN.DE/htdocs) auf unseren Backupserver übertragen!
Sollen nun wieder Daten zurück gespielt werden, muss der o.g. Befehl einfach nur umgedreht werden. Wichtig ist hierbei, nicht mit der Verzeichnisstruktur durcheinander zu kommen.
Möchte man Ordner oder Dateien davon ausschliesslen, übertragen zu werden, geht das mit folgendem Befehl: rsync -avzbe –exclude=daten/ ssh NUTZERNAME@IP-ADRESSE:/var/www/DOMAIN.DE/htdocs /backups Das Verzeichniss „Daten“ innerhalb von /var/www/DOMAIN.DE/htdcos wird nun also von einer Übertragung ausgeschlossen.

Nachfolgend noch ein kurzes Video-Tutorial, welches in ähnlicher Weise den Vorgang beschreibt. Dieses Video eignet sich hervorragend dazu, alles Schritt für Schritt nachzuvollziehen.

Abschlussworte

Man könnte nun dafür einen Cronjob verfassen, der z.B. einmal die Woche ausgeführt wird. Ich rate allerdings dazu, bei grossen Datenmengen ein Backup in der Nacht auszuführen, da je nach Server einige Slowdowns möglich sind und der Server so ein wenig in die Knie gezwungen wird.
Damit auf einer Seite die Daten verschlüsselt ankommen bzw. nicht gelesen werden können, könnte man die Daten VOR der Übertragung per GPG verschlüsseln. Einfacher wäre dann jedoch schon fast der Umstieg auf ein anderes Backuptool.