Dass regelmäßige Backups unerlässlich sind, ist kein neues Thema. Seit mehreren Jahren setze ich das zuverlässige rsnapshot ein, welches mit Hilfe von rsync und SSH inkrementelle, rotiernde Backups anderer Server ausführen kann. Ein einziges regelmäßiges Voll-Backup ist keine gute Idee, da eine zu wiederherstellende Datei vielleicht zu spät bemerkt und in das Backup übernommen wird. Der zusätzliche benötigte Speicherplatz hält sich in Grenzen, da rsnapshot unveränderte Dateien nicht erneut sichert, sondern einen Hardlink erzeugt. Ich zeige euch kurz meine Konfiguration, welche Backups per SSH ausführt und jeweils Backups der Tage, Wochen und Monate aufhebt.
Der Backup-Server selbst läuft mit Ubuntu 14.04 LTS, die übrigen Server sind Debian 8 Server. Es gibt leider ein kleines Problem mit rsnapshot bei Ubuntu 14.04, weshalb die manuelle Installation der aktuelleren rsnapshot Version ignoriert werden kann, falls kein Ubuntu 14.04 als Backup Server eingesetzt wird. Die Befehle und Konfiguration sollten aber im Prinzip ziemlich identisch bzw. austauschbar sein. Alle folgenden Befehle werden als Root ausgeführt.
Konfiguration des Backup-Servers
Serverseitig sind abgesehen von der Installation und Konfiguration von rsnapshot weniger Vorbereitungen notwendig.
1 2 3 4 5 6 7 8 9 |
# rsnapshot installieren (oder manuell installieren, falls vom Bug in rsnapshot 1.3.1-4 betroffen) apt-get install rsnapshot # SSH Schlüsselpaar erzeugen ssh-keygen # Falls vom rsnapshot Bug betroffen, aktuellere Version installieren wget https://launchpad.net/ubuntu/+archive/primary/+files/rsnapshot_1.4.0-1_all.deb dpkg -i rsnapshot_1.4.0-1_all.deb # rsnapshot Konfiguration vornehmen ... vim /etc/rsnapshot.conf |
Ich habe aus meiner rsnapshot.conf mal alle Kommentare und leere Zeilen entfernt, so dass die wesentliche Konfiguration übrig bleibt. Ein paar Zeilen habe ich zwecks Erläuterung wieder kommentiert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
config_version 1.2 snapshot_root /home/rsnapshot/ cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger cmd_du /usr/bin/du # Die Bezeichnungen daily, weekly und monthly dienen nur der besseren Zuordnung. # Die regelmäßige Ausführung wird über einen entsprechenden Cronjob erreicht. retain daily 7 retain weekly 4 retain monthly 3 verbose 2 loglevel 3 logfile /var/log/rsnapshot.log lockfile /var/run/rsnapshot.pid # rsync soll auf den Backup-Clients mit sudo aufgerufen werden. rsync_long_args -evpE --rsync-path='sudo rsync' # Der SSH Schlüssel des root Benutzer soll verwendet werden ssh_args -i /root/.ssh/id_rsa # Die zu sichernden Server / Verzeichnisse (nur ein paar Beispiele) # Format: backup Quelle Ziel (Ziel = snapshot_root + [daily|weekly|monthly] + Pfad) backup rsnapshot@mail.finnchristiansen.de:/etc/ mail.finnchristiansen.de/etc/ backup rsnapshot@mail.finnchristiansen.de:/home/ mail.finnchristiansen.de/home/ # Einzelne Verzeichnisse können ignoriert werden backup rsnapshot@mail.finnchristiansen.de:/var/ mail.finnchristiansen.de/var/ +rsync_long_args=--exclude=/var/cache/ --exclude=/var/lock/ --exclude=/var/run/ backup rsnapshot@data.finnchristiansen.de:/etc/ data.finnchristiansen.de/etc/ |
Vorbereitungen auf dem zu sicherenden Server (Backup-Client)
Rsnapshot führt die Sicherung per SSH durch, weshalb ein User angelegt werden muss. Dieser wird sich einloggen und rsync mit sudo aufrufen, weshalb noch ein entsprechender sudoers Eintrag erforderlich ist.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Falls noch nicht geschehen, sudo installieren apt-get install sudo # Nutzer für das Backup anlegen useradd -m -s /bin/bash rsnapshot # Dem Nutzer erlauben, rsync mit sudo aufzurufen echo "rsnapshot ALL=NOPASSWD: /usr/bin/rsync" > /etc/sudoers.d/rsnapshot # Anmeldung per SSH-Schlüssel ermöglichen mkdir /home/rsnapshot/.ssh # Auf dem Backup-Server mit "cat /root/.ssh/id_rsa.pub" den öffentlichen Schlüssel anzeigen und kopieren (da rsnapshot als root ausgeführt wird) echo "<Öffenterlicher Schlüssel des root-Nutzers des Backup-Servers>" >> /home/rsnapshot/.ssh/authorized_keys # Eigentümer und Berechtigungen des .ssh Verzeichnisses und der Datei authorized_keys anpassen chown -R rsnapshot: /home/rsnapshot/.ssh/ chmod 700 /home/rsnapshot/.ssh/ chmod 600 /home/rsnapshot/.ssh/authorized_keys |
Zurück zum Backup-Server
Nachdem die Vorbereitungen auf den Backup-Clients vorgenommen wurde, wird der SSH Fingerprint des Backup-Clients zur Liste bekannter Hosts hinzugefügt, rsnapshot einmal manuell getestet und anschließend ein Cronjob angelegt.
1 2 3 4 5 6 7 8 9 10 |
# SSH Login testen und SSH Fingerprint mit "yes" bestätigen, mit "exit" Verbindung wieder trennen ssh rsnapshot@server.tld # rsnapshot manuell testen rsnapshot daily # Wenn rsnapshot fehlerfrei ausgeführt wird, Cronjob erstellen: vim /etc/cron.d/rsnapshot # und folgenden Inhalt einfügen 30 3 1 * * root /usr/bin/rsnapshot monthly 40 3 * * 0 root /usr/bin/rsnapshot weekly 50 3 * * * root /usr/bin/rsnapshot daily |
Bei Backups ist es wichtig, dass der Backup-Server unabhängig von den zu sichernden Servern ist. Zu Hause erledigt die Backups ein auf OpenMediaVault basierendes NAS mit RAID5, hier setze ich jetzt auf einen Strato vServer, um die anderen vServer bei active-servers oder Hetzner zu sichern.
Wäre hilfreich gewesen auch auf den genauen Bug unter Ubuntu einzugehen, ich rate jetzt nach kurzer Suche einfach mal das du den Bug das rsync bei Verwendung von sudo nicht gefunden wird meinst. Ich nutze rsnapshot nämlich unter root (also ohne sudo), da gibt es keine Probleme.