Webserver Spiegelung · 6 min read · Dec 13, 2025
Spiegeln Sie Ihre Website mit rsync

Dieses Tutorial zeigt, wie Sie Ihre Website von Ihrem Hauptwebserver auf einen Backup-Server spiegeln können, der übernehmen kann, wenn der Hauptserver ausfällt. Wir verwenden dafür das Tool rsync und lassen es über einen Cron-Job laufen, der alle x Minuten überprüft, ob es etwas zu aktualisieren gibt. So sollte Ihr Backup-Server normalerweise auf dem neuesten Stand sein, wenn er übernehmen muss.
rsync aktualisiert nur Dateien, die sich geändert haben, sodass Sie nicht jedes Mal 5 GB Daten übertragen müssen, wenn Sie rsync ausführen. Es spiegelt nur neue/geänderte Dateien und kann auch Dateien vom Spiegel löschen, die auf dem Hauptserver gelöscht wurden. Darüber hinaus kann es Berechtigungen und Eigentümer von gespiegelten Dateien und Verzeichnissen beibehalten; um die Eigentümer zu bewahren, müssen wir rsync als root ausführen, was wir hier tun. Wenn sich Berechtigungen und/oder Eigentümer auf dem Hauptserver ändern, wird rsync sie auch auf dem Backup-Server ändern.
In diesem Tutorial tunneln wir rsync über SSH, was sicherer ist; das bedeutet auch, dass Sie keinen weiteren Port in Ihrer Firewall für rsync öffnen müssen - es reicht aus, wenn Port 22 (SSH) offen ist. Das Problem ist, dass SSH ein Passwort für die Anmeldung benötigt, was nicht gut ist, wenn Sie rsync als Cron-Job ausführen möchten. Die Notwendigkeit eines Passworts erfordert menschliche Interaktion, was wir nicht wollen.
Aber glücklicherweise gibt es eine Lösung: die Verwendung von öffentlichen Schlüsseln. Wir erstellen ein Schlüsselpaar (auf unserem Backup-Server mirror.example.com), von dem einer in einer Datei auf dem Remote-System (server1.example.com) gespeichert wird. Danach werden wir bei der Ausführung von rsync nicht mehr nach einem Passwort gefragt. Dies schließt auch Cron-Jobs ein, was genau das ist, was wir wollen.
Wie Sie vielleicht schon aus dem, was ich bisher geschrieben habe, erraten haben, besteht das Konzept darin, dass wir das Spiegeln von server1.example.com direkt von mirror.example.com initiieren; server1.example.com muss nichts tun, um gespiegelt zu werden.
Ich werde hier das folgende Setup verwenden:
- Hauptserver: server1.example.com (server1) - IP-Adresse: 192.168.0.100
- Spiegel-/Backup-Server: mirror.example.com (mirror) - IP-Adresse: 192.168.0.175
- Die Website, die gespiegelt werden soll, befindet sich in /var/www auf server1.example.com.
rsync ist nur zum Spiegeln von Dateien und Verzeichnissen gedacht; wenn Sie Ihre MySQL-Datenbank spiegeln möchten, verwenden Sie stattdessen MySQL-Spiegelung/Replikation.
Ich möchte zuerst sagen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen, aber dies ist der Weg, den ich wählen werde.
Der erste Schritt besteht darin, sich anzumelden oder der root-Benutzer auf Ihrem System zu werden. Unter Debian und CentOS verwenden Sie:
su -Wenn Sie als ein anderer Benutzer als root angemeldet sind. Unter Ubuntu verwenden Sie:
sudo -sstattdessen.
1 Installieren Sie rsync
Zuerst müssen wir rsync sowohl auf server1.example.com als auch auf mirror.example.com installieren. Für Debian- und Ubuntu-Systeme sieht das so aus:
server1/mirror:
(Wir tun dies als root!)
apt install rsyncAuf anderen Linux-Distributionen würden Sie yum / dnf (Fedora/CentOS) oder yast (SuSE) verwenden, um rsync zu installieren.
Unter CentOS / Rocky Linux oder AlmaLinux verwenden Sie:
dnf install rsync2 Erstellen Sie einen unprivilegierten Benutzer auf server1.example.com
Jetzt erstellen wir einen unprivilegierten Benutzer namens someuser auf server1.example.com, der von rsync auf mirror.example.com verwendet wird, um das Verzeichnis /var/www zu spiegeln (natürlich muss someuser Lesezugriff auf /var/www auf server1.example.com haben).
server1:
(Wir tun dies als root!)
sudo useradd -d /home/someuser -m -s /bin/bash someuserDies erstellt den Benutzer someuser mit dem Home-Verzeichnis /home/someuser und der Login-Shell /bin/bash (es ist wichtig, dass someuser eine gültige Login-Shell hat - etwas wie /bin/false funktioniert nicht!). Jetzt geben Sie someuser ein Passwort:
passwd someuser3 Testen Sie rsync
Als Nächstes testen wir rsync auf mirror.example.com. Als root tun wir dies:
mirror:
rsync -avz -e ssh [email protected]:/var/www/ /var/www/Sie sollten etwas wie folgt sehen. Antworten Sie mit ja:
Die Echtheit des Hosts 'server1.example.com (192.168.0.100)' kann nicht festgestellt werden.
RSA-Schlüssel-Fingerabdruck ist 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (ja/nein)?<-- jaGeben Sie dann das Passwort von someuser ein, und Sie sollten sehen, dass das Verzeichnis /var/www von server1.example.com nach /var/www auf mirror.example.com gespiegelt wird.
Sie können das so auf beiden Servern überprüfen:
server1/mirror:
ls -la /var/wwwSie sollten sehen, dass alle Dateien und Verzeichnisse nach mirror.example.com gespiegelt wurden und die Dateien und Verzeichnisse die gleichen Berechtigungen/Eigentümer wie auf server1.example.com haben sollten.
4 Erstellen Sie die Schlüssel auf mirror.example.com
Jetzt erstellen wir das private/öffentliche Schlüsselpaar auf mirror.example.com:
mirror:
(Wir tun dies als root!)
mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-keySie werden etwas wie folgt sehen:
Generiere öffentliches/privates dsa-Schlüsselpaar.
Geben Sie die Passphrase ein (leer für keine Passphrase): [drücken Sie hier die Eingabetaste]
Geben Sie dieselbe Passphrase erneut ein: [drücken Sie hier die Eingabetaste]
Ihre Identifikation wurde in /root/cron/mirror-rsync-key gespeichert.
Ihr öffentlicher Schlüssel wurde in /root/cron/mirror-rsync-key.pub gespeichert.
Der Schlüssel-Fingerabdruck ist:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirrorEs ist wichtig, dass Sie keine Passphrase eingeben, da das Spiegeln sonst ohne menschliche Interaktion nicht funktioniert, also drücken Sie einfach Enter!
Als Nächstes kopieren wir unseren öffentlichen Schlüssel nach server1.example.com:
mirror:
(Wir tun dies immer noch als root.)
scp /root/rsync/mirror-rsync-key.pub [email protected]:/home/someuser/Der öffentliche Schlüssel mirror-rsync-key.pub sollte jetzt in /home/someuser auf server1.example.com verfügbar sein.
5 Konfigurieren Sie server1.example.com
Jetzt melden Sie sich über SSH auf server1.example.com als someuser (nicht als root!) an und tun Sie dies:
server1:
(Bitte tun Sie dies als someuser!)
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keysIndem wir dies tun, haben wir den Inhalt von mirror-rsync-key.pub an die Datei /home/someuser/.ssh/authorized_keys angehängt. /home/someuser/.ssh/authorized_keys sollte ähnlich wie folgt aussehen:
server1:
(Noch als someuser!)
vi /home/someuser/.ssh/authorized_keysssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorJetzt möchten wir nur Verbindungen von mirror.example.com zulassen, und der verbindende Benutzer sollte nur rsync verwenden dürfen, also fügen wir hinzu
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-ptydirekt am Anfang von /home/someuser/.ssh/authorized_keys:
server1:
(Noch als someuser!)
vi /home/someuser/.ssh/authorized_keyscommand="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorSie müssen einen FQDN wie mirror.example.com anstelle einer IP-Adresse nach from= verwenden, da sonst das automatisierte Spiegeln nicht funktioniert!
Jetzt erstellen wir das Skript /home/someuser/rsync/checkrsync, das alle Befehle außer rsync ablehnt.
server1:
(Wir tun dies immer noch als someuser!)
mkdir ~/rsync
vi ~/rsync/checkrsync#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Abgelehnt"
;;
*\(*)
echo "Abgelehnt"
;;
*\{*)
echo "Abgelehnt"
;;
*\;*)
echo "Abgelehnt"
;;
*\<*)
echo "Abgelehnt"
;;
*\`*)
echo "Abgelehnt"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Abgelehnt"
;;
esacchmod 700 ~/rsync/checkrsync6 Testen Sie rsync auf mirror.example.com
Jetzt müssen wir auf mirror.example.com testen, ob wir server1.example.com spiegeln können, ohne nach dem Passwort von someuser gefragt zu werden. Wir tun dies:
mirror:
(Wir tun dies als root!)
rsync -avz --delete --exclude=/stats --exclude=/error --exclude=/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/(Das –delete-Argument bedeutet, dass Dateien, die auf server1.example.com gelöscht wurden, auch auf mirror.example.com gelöscht werden sollten. Das –exclude-Argument bedeutet, dass diese Dateien/Verzeichnisse nicht gespiegelt werden sollten; z.B. –exclude=/error bedeutet “spiegeln Sie /var/www/error nicht”. Sie können mehrere –exclude-Argumente verwenden. Ich habe diese Optionen als Beispiele aufgelistet; Sie können den Befehl nach Ihren Bedürfnissen anpassen. Schauen Sie sich an
man rsyncfür weitere Informationen.)
Sie sollten jetzt sehen, dass das Spiegeln stattfindet:
Empfange Dateiliste ... fertig
gesendet 71 Bytes empfangen 643 Bytes 476.00 Bytes/sec
Gesamtgröße ist 64657 Geschwindigkeit ist 90.56ohne nach einem Passwort gefragt zu werden! Das ist es, was wir wollten.
7 Erstellen Sie einen Cron-Job
Wir möchten das Spiegeln automatisieren, deshalb erstellen wir einen Cron-Job dafür auf mirror.example.com. Führen Sie crontab -e als root aus:
mirror:
(Wir tun dies als root!)
crontab -eund erstellen Sie einen Cron-Job wie diesen:
*/5 * * * * /usr/bin/rsync -azq --delete --exclude=/stats --exclude=/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/ Dies würde rsync alle 5 Minuten ausführen; passen Sie es an Ihre Bedürfnisse an (siehe
man 5 crontab). Ich verwende hier den vollständigen Pfad zu rsync (/usr/bin/rsync), nur um sicherzustellen, dass cron weiß, wo es rsync finden kann. Ihr Speicherort für rsync könnte abweichen. Führen Sie
mirror:
(Wir tun dies als root!)
which rsyncaus, um herauszufinden, wo Ihrer ist.
8 Links
- rsync: https://rsync.samba.org/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.