Installation rsync
Mit Rsync lassen sich einfach und schnell Daten zwischen den Servern synchronisieren. Ist z.B. sehr hilfreich bei einem Server Umzug – oder einem Mirror Server etc.
Installation
Rsync muss auf ALLEN Servern installiert werden, die miteinander abgeglichen werden sollen.
cd /usr/ports/net/rsync
make install clean
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Options for rsync 3.0.9 x
x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
x x[ ] POPT_PORT Use popt from devel/popt instead of bundled one x x
x x[*] SSH Use SSH instead of RSH x x
x x[ ] FLAGS File system flags support patch, adds --fileflagsx x
x x[ ] ATIMES Preserve access times, adds --atimes x x
x x[ ] ACL Add backward-compatibility for the --acls option x x
x x[ ] ICONV Add iconv support x x
x x[ ] TIMELIMIT Time limit patch x x
x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
x < OK > <Cancel> x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj
Konfiguration für die Connection
Synchronisation mit eigenem User
Das Beste ist, man erstellt einfach einen rsync User mit den entsprechenden Berechtigungen für die zu synchronisierenden Files.
User erstellen
Der User wird auf dem SENDER Server erstellt. Also dort, wo die Original-Daten drauf sind.
# adduser
Username: mrsmirror Full name: mrsmirror Uid (Leave empty for default): Login group [mrsmirror]: Login group is mrsmirror. Invite mrsmirror into other groups? []: www cyrus Login class [default]: Shell (sh csh tcsh bash rbash nologin) [sh]: bash Home directory [/home/mrsmirror]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: yes Lock out the account after creation? [no]: Username : mrsmirror Password : <random> Full Name : mrsmirror @ violet Uid : 1002 Class : Groups : mrsmirror www cyrus Home : /home/mrsmirror Home Mode : Shell : /usr/local/bin/bash Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (mrsmirror) to the user database. adduser: INFO: Password for (mrsmirror) is:
Auto Login
Auf EMPFÄNGER Server (wo die Mirror Daten drauf kommen):
Key generieren + Keinen Passphrase eingeben, sonst muss man ein pw eingeben beim Login (falls bereits vorhanden, den ersten Schritt überspringen)
ssh-keygen
Copy Inhalt von
cat /root/.ssh/id_rsa.pub (EMPFÄNGER Server)
Auf SENDER Server (Original Daten) nun den Inhalt einfügen:
vi /home/mrsmirror/.ssh/authorized_keys
Auf dem SENDER Server noch Permissions setzen:
chown -R mrsmirror:mrsmirror /home/mrsmirror/.ssh/
chmod 600 /home/mrsmirror/.ssh/authorized_keys
root Login
Möchte man die rsync-Verbindung mit root Berechtigung laufen lassen – wovon man jedoch wenn möglich absehen sollte – kann man dies so machen. Mit diesen Einstellungen kann man zwei Server miteinander Synchronisieren ohne nach einem Passwort gefragt zu werden.
Auf Empfänger Server:
(Keinen Passphrase eingeben, sonst muss man ein pw eingeben beim Login)
ssh-keygen
Copy inhalt von /root/.ssh/id_rsa.pub Destination ins /root/.ssh/authorized_keys von „Original Daten Server“
Empfänger Server:
cat /root/.ssh/id_rsa.pub
Sender Server:
vi /root/.ssh/authorized_keys
-> und Key Pasten.
Jetzt müssen wir noch machen, dass man sich als root einloggen kann – aber nur, wenn man einen KEY besitzt! auf der „Original Daten Server“
vi /etc/ssh/sshd_config PermitRootLogin without-password
/etc/rc.d/sshd restart
Rsync Bash Scripts
Folgende Bash Scripts erleichtern mir den Altag. Vielleicht kann ja noch jemand anderes da draussen davon provitieren 🙂
Nur bestimmte Verzeichnisse synchronisieren
Dieser Script befindet sich auf dem Mirror Server und wird per Cronjob alle paar Stunden ausgeführt. Er synchronisiert alle Verzeichnisse, die im WEBS Array gespeichert sind.
#!/usr/local/bin/bash
# synct folgende webs von PATSY @origin => CORKY @mirror
#
# WEB
# shoe.org
# shoozies.net
# server/SH_includes
# cronjobs
#
# TODO
# - imap mailboxes
#
WEBS=( 'shoe.org' 'shoozies.net' 'server/SH_includes' 'cronjobs' 'm.shoe.org' 'chatserver')
ELEMENTS=${#WEBS[@]}
for (( i=0;i<$ELEMENTS;i++)); do
WEB=${WEBS[${i}]}
echo $WEB
rsync -avzt --delete --force --no-owner
--exclude="/log/"
--exclude="/usage/"
mrsmirror@patsy:/www/$WEB/ /www/$WEB/
done
# -a = archiv, er backupt alles und behält symlinks etc. bei
# -v: verbose
# --delete = er löscht die files auf dem destination server, die auf dem
# source server nicht vorhanden sind.
# -t: times - rsync will copy al the timestamps of the source files, so that the files on the external drive are exact replicas.
# --progress - falls man progress realtime verfolgen möchte , ich habs mal ausgeschaltet, da wir per default cronjob machen
#
Sync & exclude DIRs
Dieser Script befindet sich auf dem Mirror Server und wird per Cronjob alle paar Stunden ausgeführt. Er synchronisiert in diesem Beispiel das gesamte /www Verzeichnis, schliesst allerdings einige Verzeichnisse von der Synchronisation aus.
#! /bin/sh
#
# synct alle webs von CORKY @origin => Patsy @mirror
#
# ausser den DIRs die excluded werden (diese haben origin PATSY)
#
# Wichtig: Do the INCLUDES first, nachher die EXCLUDES. sonst gehts nicht.
# das mit include und exclude funktioniert irgendwie nicht. also die includes separat laufen lassen.
#--include="/shoe.org/usage/"
#--include="/shoozies.net/usage/"
echo "All Webs..."
rsync -avzt --delete --delete-after --force --no-owner
--exclude="/*/log/"
--exclude="/shoe.org/"
--exclude="/m.shoe.org/"
--exclude="/shoeinternational.net/*/var/cache/"
--exclude="/shoozies.net/"
--exclude="/phpinclude/"
--exclude="/patsy.shoe.org/"
--exclude="/server/"
--exclude="/cronjobs/"
--exclude="/chatserver/"
mrsmirror@corky:/www/ /www/
echo "shoe.org usage..."
rsync -avzt --delete --delete-after --force --no-owner
mrsmirror@corky:/www/shoe.org/usage/ /www/shoe.org/usage/
echo "m.shoe.org usage..."
rsync -avzt --delete --delete-after --force --no-owner
mrsmirror@corky:/www/m.shoe.org/usage/ /www/m.shoe.org/usage/
echo "shoozies.net usage..."
rsync -avzt --delete --delete-after --force --no-owner
mrsmirror@corky:/www/shoozies.net/usage/ /www/shoozies.net/usage/
#
# -a = archiv, er backupt alles und behält symlinks etc. bei
# -v: verbose
# --delete = er löscht die files auf dem destination server, die auf dem
# source server nicht vorhanden sind.
# -vv: zeigt die individuellen files an die included oder excluded werden.
# -t: times - rsync will copy al the timestamps of the source files, so that the files on the external drive are exact replicas.
# --progress - falls man progress realtime verfolgen möchte , ich habs mal ausgeschaltet, da wir per default cronjob machen
#
–