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 -t dsa

Copy Inhalt von

cat /root/.ssh/id_dsa.pub (EMPFÄNGER Server)

Auf SENDER Server (Original Daten) nun den Inhalt einfügen:

vi /home/mrsmirror/.ssh/authorized_keys2

Auf dem SENDER Server noch Permissions setzen:

chown -R mrsmirror:mrsmirror /home/mrsmirror/.ssh/ 
chmod 600 /home/mrsmirror/.ssh/authorized_keys2

 

 

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 -t dsa

Copy inhalt von /root/.ssh/id_dsa.pub Destination ins /root/.ssh/authorized_keys2 von „Original Daten Server“

Empfänger Server:

cat /root/.ssh/id_dsa.pub

Sender Server:

vi /root/.ssh/authorized_keys2

-> 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
#

 

 

Flattr this!

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben