GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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 durch einen Cron-Job laufen, der alle x Minuten prüft, ob es auf dem Mirror etwas zu aktualisieren gibt. Daher 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 Eigentumsrechte von gespiegelten Dateien und Verzeichnissen bewahren; Um die Eigentumsrechte zu erhalten, müssen wir rsync als root ausführen, was wir hier tun. Wenn sich Berechtigungen und/oder Eigentumsrechte auf dem Hauptserver ändern, ändert rsync sie auch auf dem Backup-Server.

In diesem Tutorial werden wir rsync durch SSH tunneln, was sicherer ist; Es 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 eine menschliche Interaktion, die 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 denen eine in einer Datei auf dem Remote-System gespeichert ist (server1.example.com ). Danach werden wir nicht mehr nach einem Passwort gefragt, wenn wir rsync ausführen. Dazu gehören auch Cron-Jobs, was genau das ist, was wir wollen.

Wie Sie vielleicht bereits aus dem, was ich bisher geschrieben habe, erraten haben, besteht das Konzept darin, dass wir die Spiegelung von server1.example.com initiieren direkt von mirror.example.com; server1.beispiel.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
  • Mirror/Backup-Server:mirror.example.com (Mirror) – IP-Adresse:192.168.0.175
  • Die zu spiegelnde Website befindet sich in /var/www auf server1.example.com.

rsync dient nur zum Spiegeln von Dateien und Verzeichnissen; Wenn Sie Ihre MySQL-Datenbank spiegeln möchten, verwenden Sie stattdessen die MySQL-Spiegelung/Replikation.

Ich möchte zunächst sagen, dass dies nicht die einzige Möglichkeit ist, ein solches System einzurichten. Es gibt viele Wege, dieses Ziel zu erreichen, aber ich gehe diesen Weg.

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 dies so aus:

server1/mirror:

(Wir machen das als root!)

apt-get install rsync

Bei anderen Linux-Distributionen würden Sie yum (Fedora/CentOS) oder yast (SuSE) verwenden, um rsync zu installieren.

2 Erstellen Sie einen nichtprivilegierten 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 Leseberechtigungen für /var/www auf server1 haben .beispiel.com).

server1:

(Wir machen das als root!)

useradd -d /home/someuser -m -s /bin/bash someuser

Dadurch wird der Benutzer someuser mit dem Home-Verzeichnis /home/someuser und der Login-Shell /bin/bash erstellt (es ist wichtig, dass someuser eine gültige Login-Shell hat - so etwas wie /bin/false funktioniert nicht!). Geben Sie nun einem Benutzer ein Passwort:

passwd someuser

3 Rsync testen

Als nächstes testen wir rsync auf mirror.example.com. Als root machen wir das:

Spiegel:

rsync -avz -e ssh [email protected]:/var/www/ /var/www/

Sie sollten so etwas sehen. Antworten Sie mit Ja:

The authenticity of host 'server1.example.com (192.168.0.100)' can't be established.
RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Are you sure you want to continue connecting (yes/no)?
<-- yes

Geben Sie dann das Passwort eines Benutzers ein, und Sie sollten sehen, dass das /var/www-Verzeichnis von server1.example.com auf /var/www auf mirror.example.com gespiegelt ist.

Das kannst du auf beiden Servern so überprüfen:

server1/mirror:

ls -la /var/www

Sie sollten sehen, dass alle Dateien und Verzeichnisse auf 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:

Spiegel:

(Wir machen das als root!)

mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key

Sie werden so etwas sehen:

Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in /root/cron/mirror-rsync-key.
Your public key has been saved in /root/cron/mirror-rsync-key.pub.
The key fingerprint is:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 [email protected]

Es ist wichtig, dass Sie keine Passphrase eingeben, sonst funktioniert die Spiegelung nicht ohne menschliches Eingreifen, also drücken Sie einfach enter !

Als nächstes kopieren wir unseren öffentlichen Schlüssel nach server1.example.com:

Spiegel:

(Trotzdem machen wir das als root.)

scp /root/rsync/mirror-rsync-key.pub [email protected]:/home/someuser/

Der öffentliche Schlüssel mirror-rsync-key.pub sollte nun in /home/someuser auf server1.example.com verfügbar sein.

5 Server1.example.com konfigurieren

Melden Sie sich nun über SSH auf server1.example.com als irgendein Benutzer (nicht root!) an und tun Sie dies:

server1:

(Bitte tun Sie dies als irgendein Benutzer!)

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_keys

Dadurch 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 ungefähr so ​​aussehen:

server1:

(Immer noch als irgendein Benutzer!)

vi /home/someuser/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom [email protected]
mirror

Jetzt wollen 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-pty

direkt am Anfang von /home/someuser/.ssh/authorized_keys:

server1:

(Immer noch als irgendein Benutzer!)

vi /home/someuser/.ssh/authorized_keys
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom [email protected]
mirror

Es ist wichtig, dass Sie anstelle einer IP-Adresse nach from=einen FQDN wie mirror.example.com verwenden, da sonst die automatische Spiegelung 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 irgendein Benutzer!)

mkdir ~/rsync
vi ~/rsync/checkrsync
#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
chmod 700 ~/rsync/checkrsync

6 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 eines Benutzers gefragt zu werden. Wir tun dies:

Spiegel:

(Wir machen das 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/

(Die Option --delete bedeutet, dass Dateien, die auf server1.example.com gelöscht wurden, auch auf mirror.example.com gelöscht werden sollen. Die Option --exclude bedeutet, dass diese Dateien/Verzeichnisse nicht gespiegelt werden sollen; z. B. --exclude =**/error bedeutet "nicht /var/www/error spiegeln". Sie können mehrere --exclude-Optionen verwenden. Ich habe diese Optionen als Beispiele aufgeführt; Sie können den Befehl an Ihre Bedürfnisse anpassen. Schauen Sie sich an

man rsync

für weitere Informationen.)

Sie sollten nun sehen, dass die Spiegelung stattfindet:

receiving file list ... done

sent 71 bytes received 643 bytes 476.00 bytes/sec
total size is 64657 speedup is 90.56

ohne nach einem Passwort gefragt zu werden! Das wollten wir.

7 Erstellen Sie einen Cron-Job

Wir wollen die Spiegelung automatisieren, deshalb erstellen wir dafür einen Cron-Job auf mirror.example.com. Führen Sie crontab -e als root aus:

Spiegel:

(Wir machen das als root!)

crontab -e

und 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]com:/var/www/ /var/www/ 

Dies würde rsync alle 5 Minuten ausführen; an Ihre Bedürfnisse anpassen (siehe

man 5 crontab

). Ich verwende hier den vollständigen Pfad zu rsync (/usr/bin/rsync), um sicherzustellen, dass cron weiß, wo rsync zu finden ist. Ihr rsync-Standort kann abweichen. Ausführen

Spiegel:

(Wir machen das als root!)

which rsync

um herauszufinden, wo Ihres ist.

  • rsync: https://rsync.samba.org/

Linux
  1. Sichern Sie Ihre Container mit SELinux

  2. Hochverfügbarkeitsspeicher mit GlusterFS auf Debian 8 – Spiegelung über zwei Speicherserver

  3. Hochverfügbarkeitsspeicher mit GlusterFS auf CentOS 7 – Spiegelung über zwei Speicherserver

  4. Wartung entfernter Websites mit Sitecopy unter Ubuntu 16.04

  5. Automatische Dateireplikation (Mirror) über zwei Speicherserver mit GlusterFS 3.2.x auf Ubuntu 12.10

Verwenden von Ansible zur Interaktion mit Web-Endpunkten

So schalten Sie Ihre Website mit Managed.com live

So betreiben Sie Ihre eigenen DNS-Server (primär und sekundär) mit ISPConfig 3 (Debian Squeeze)

Hosten Sie mehrere Websites auf einem einzigen Server mit Apache unter Ubuntu 18.04

Sichern Sie Ihren Apache-Webserver mit Mod Security

So ordnen Sie Ihrer Domain eine statische IP zu (mit GoDaddy-Beispiel)