rsnapshot remote


Zum Sichern der Daten verwende ich lokal und remote neben FTP-Backups rsnapshot. Dadurch werden die Daten des jeweiligen Servers alle 2 Stunden auf der Platte gesichert. Für ein konventionelles Backup reicht das nicht unbedingt – ist die Platte oder der Server weg, dann sind auch die Backups weg. Dafür lassen sich aber Änderungen an Configs genau so leicht wieder rückgängig machen wie versehentlich gelöschte Mails. Und da rsnapshot hardlinks nutzt, hält sich der Platzbedarf doch sehr in Grenzen.

Die lokale Installation von rsnapshot ist nicht besonders kompliziert und an verschiedenen Stellen beschrieben.

Ich möchte aber, dass Server A auch die Daten von Server B sichert (ist A weg, komme ich über B dennoch an die Daten).

Nehme wir an, es gibt die Server asterix und obelix.Obelix sichert in dem Beispiel sich selbst und asterix. Das ganz lässt sich natürlich auch in umgekehrter Richtung realisieren. Der lokale Server (auf dem rsnapshot gestartet wird) heißt im folgenden obelix, der zu sichernde Server asterix.

asterix:

useradd -d /home/rbackup rbackup
passwd rbackup [beliebig]
mkdir /home/rbackup/.ssh


obelix:

als root (darunter läuft rsnapshot)
ssh-keygen (ohne passphrase)
scp /root/.ssh/id_dsa.pub nach root@asterix:/home/rbackup/.ssh/authorized_keys2


asterix:

chmod 600 /home/rbackup/.ssh/authorized_keys2
chown rbackup /home/rbackup/.ssh/authorized_keys2
chmod 700 /home/rbackup/.ssh/
chown rbackup /home/rbackup/.ssh/

am Anfang von authorized_keys2 kommt dann noch

from="88.198.67.99",command="/home/rbackup/validate-rsync.sh"


(88.198.67.99 ist die IP von obelix; die Angabe der IP ist nur eine zusätzliche Absicherung, die aber auch entfallen kann)

Nun brauchen wie auf asterix noch /home/rbackup/validate-rsync.sh:

#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected 1"
;;
*\;*)
echo "Rejected 2"
;;
rsync*)
$SSH_ORIGINAL_COMMAND
;;
*true*)
echo $SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected 3"
;;
esac

Dann brauchen wir auf asterix noch /usr/local/bin/rsync_wrapper.sh:

#!/bin/sh
/usr/bin/sudo /usr/bin/rsync "$@";

Noch schnell die Rechte für beide Scripte passend setzen:

chown rbackup /home/rbackup/validate-rsync.sh
chmod 754 /home/rbackup/validate-rsync.sh
chown rbackup /usr/local/bin/rsync_wrapper.sh
chmod 750 /usr/local/bin/rsync_wrapper.sh

und /etc/sudoers ergänzen:

rbackup ALL = NOPASSWD: /usr/bin/rsync

Das ganze können wir von obelix testen:

obelix:~ # ssh rbackup@asterix
Rejected 3
Connection to asterix closed.

“Rejected 3” ist richtig, wir haben ja keinen Parameter übergeben. Der Login funktioniert als nur mit passenden Parametern und wenn die IP (s.o.) stimmt.

Damit ist die remote-Sicherung eingerichtet. Zuletzt muss nur noch rsnapshot konfiguriert werden. Ich starte rsnapshot über ein wrapper-script, damit die remote-Backups nur dann ausgeführt werden, wenn der Server auch erreichbar ist.

/root/scripts/backup:

#!/bin/bash
case $2 in
local)
;;
*)
ping -c 2 $2
;;
esac
if [ $? != 0 ] ; then
logger -d -t rsnapshot "$2 $1 failed - $2.de is unreachable"
exit
fi
logger -d -t rsnapshot "$2 $1 started"
/usr/local/bin/rsnapshot -c /usr/local/etc/rsnapshot.$2.conf $1

Für rsnapshot selbst verwende ich pro Sicherung zwei Configfiles. Eine globale Config, die für alle Server identisch ist und eine, die die Sicherung als solche steuert.

/usr/local/etc/rsnapshot.conf

config_version 1.2
snapshot_root /srv/snapshots/
cmd_rm //bin/rm
cmd_rsync /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger //bin/logger
verbose 2
loglevel 2
rsync_long_args --delete --numeric-ids --relative --delete-excluded
du_args -csh
one_fs 0
link_dest 0
rsync_long_args --delete --numeric-ids --relative --delete-excluded

/usr/local/etc/rsnapshot.asterix.conf (diese Config wird durch das wrapper-Script aufgerufen und bindet die generelle Config ein):

include_conf /usr/local/etc/rsnapshot.conf
snapshot_root /srv/snapshots/asterix
interval hourly 12
interval daily 7
interval weekly 5
interval monthly 1
lockfile /var/run/rsnapshot-asterix.pid
rsync_long_args --rsync-path=rsync_wrapper.sh --delete --numeric-ids --relative --delete-excluded
backup rbackup@asterix:/bin asterix
backup rbackup@asterix:/usr asterix +rsync_long_args=--exclude=games --exclude=lib/local

Für lokale Backups gibt es dann noch eine /usr/local/etc/rsnapshot.local.conf:

include_conf /usr/local/etc/rsnapshot.conf
interval hourly 12
interval daily 7
interval weekly 5
interval monthly 3
lockfile /var/run/rsnapshot-local.pid
exclude_file /usr/local/etc/rsnapshot.local.xcl
backup /bin localhost/
backup /boot localhost/
backup /etc localhost/
backup /home localhost/
backup /lib localhost/
backup /lib64 localhost/
backup /opt localhost/
backup /root localhost/
backup /sbin localhost/
backup /srv/ftp localhost/
backup /srv/www localhost/
backup /usr localhost/
backup /var localhost/

Gestartet wird rsnapshot z.B. über

/root/scripts/backup/rsnapshot.sh hourly local


oder

/root/scripts/backup/rsnapshot.sh daily asterix

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *