no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | adminstoriesserversynchronisation [20120823 10:05] (aktuell) – angelegt Dirk Deimeke | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Serversynchronisation ====== | ||
+ | * Urspruenglicher Autor: Ramon Kukla | ||
+ | * Urspruengliches Datum: 10.06.2011 | ||
+ | |||
+ | Wir nutzen zwei Server um eine Vielfalt an Diensten zu nutzen und anzubieten. Die Dienste - Web, Mail, Subversion, WebDav, etc. - haben wir nicht zeitgleich auf beiden Servern laufen. So haben wir Mail beispielsweise auf foo und unsere " | ||
+ | |||
+ | Der Grund fuer zwei Server ist nicht in erster Linie die Verteilung von Last, sondern wir wollen sowas wie erhoete Verfuegbarkeit im Fehlerfall erreichen. Natuerlich muessen wir bei Ausfall einer Maschine noch etwas tun (Namensaufloesung, | ||
+ | |||
+ | Bei der Frage "Wo liegen welche Daten" orientieren wir uns an dem sogenannten Filesystem Hierarchy Standard, den Dirk schon mal [[adminstoriesspeicherortefuerdateien|beschrieben]] hatte. So liegen also alle unsere, nicht fuer den Betrieb der Server benoetigten, | ||
+ | |||
+ | Mail synchronisieren wir ebenfalls alle Stunde, mit im Grunde gleichem Aufruf wie fuer Webseiten. Etwas herausfordernder war die Synchronisation der MySQL-Datenbanken. Auf foo haben wir fuenf Datenbanken und auf bar sind es 21. Vorgabe fuer das zu erstellende Script war unter anderem, dass es ohne Anpassung, sowohl auf foo, als auch auf bar laueffaehig ist. Rausgekommen ist nachfolgendes. | ||
+ | |||
+ | <code bash># | ||
+ | |||
+ | logger -t syncdbs.bash -i " | ||
+ | |||
+ | TIMESTAMP=$(date " | ||
+ | SOURCE_DIR="/ | ||
+ | DESTINATION_DIR="/ | ||
+ | DB_PREFIX=" | ||
+ | DB_USERNAME=$(awk '/ | ||
+ | DB_PASSWORD=$(awk '/ | ||
+ | |||
+ | if [ " | ||
+ | DB_TO_COPY=" | ||
+ | dbbar_09 dbbar_10 dbbar_11 dbbar_12 dbbar_13 dbbar_14 dbbar_15 dbbar_16 dbbar_17\ | ||
+ | dbbar_18 dbbar_19 dbbar_20 dbbar_21" | ||
+ | REMOTE_SRV=" | ||
+ | elif [ " | ||
+ | DB_TO_COPY=" | ||
+ | REMOTE_SRV=" | ||
+ | else | ||
+ | logger -t syncdbs.bash -i " | ||
+ | exit 9 | ||
+ | fi | ||
+ | |||
+ | cd $DESTINATION_DIR | ||
+ | for i in $DB_TO_COPY | ||
+ | do | ||
+ | mysqlshow -u $DB_USERNAME -p$DB_PASSWORD | awk ' | ||
+ | if [ $? -eq 0 ] | ||
+ | then | ||
+ | FILENAME=$DB_PREFIX$i-$TIMESTAMP*.sq* | ||
+ | |||
+ | # retrieve file from server | ||
+ | logger -t syncdbs.bash -i " | ||
+ | scp -q filecopy@$REMOTE_SRV: | ||
+ | |||
+ | # extract file | ||
+ | bzip2 -d $FILENAME | ||
+ | |||
+ | # import database | ||
+ | logger -t syncdbs.bash -i " | ||
+ | mysql -u $DB_USERNAME -p$DB_PASSWORD $i < $FILENAME | ||
+ | rm $FILENAME | ||
+ | else | ||
+ | logger -t syncdbs.bash -i " | ||
+ | fi | ||
+ | done | ||
+ | logger -t syncdbs.bash -i " | ||
+ | |||
+ | Basis fuer die Synchronisation ist ein entsprechendes Backup ('' | ||
+ | |||
+ | Man koennte, um sich etwas mehr Automatismus zu erhalten, die Datenbanken als bak_* importieren und dann im Fehlerfall umbenennen. Die Idee hat fuer mich aber nicht so viel Charme, da ich beim Umschalten so wenig wie moeglich anfassen moechte. | ||
+ | |||
+ | Nicht zu vergessen ist natuerlich, dass es nur mit der Synchronisation von ein paar Daten und Datenbanken nicht getan ist. Im Ernstfall muss auch sichergestellt sein, dass die genutzten Anwendungen (Maildaemon, | ||
+ | |||
+ | Auch sollte nicht vergessen werden, dass die Rechte auf dem Backup gesetzt sind, bzw. noch zu setzen sind. So ist ein Import aller Datenbanken schon mal ein erster Schritt. Aber so lange die Anwendungen keine Rechte auf " | ||
+ | |||
+ | Ja, machnmal waere es leichter einfach irgendwo einen " | ||
+ | |||
+ | [[adminstoriesartikel|Zurück zur Uebersicht]] |