csync2 Clustersynchronisation

csync2 ist ein Synchronisationstool, das durch Linbit entwickelt und als freie Software zur Verfügung gestellt wird. Im Gegensatz zu anderen gleichartigen Tools ist es mit csync2 möglich eine beliebige Anzahl von Hosts synchron zu halten. Zudem werden Konflikte erkannt und auch mit Löschungen kommt csync2 problemlos zurecht. Das folgende Beispiel bezieht sich auf ein Ubuntu- System. Das "Übersetzen" für andere Linux- Derivate sollte problemlos möglich sein. Nach der Installation mittels 
# apt-get install csync2

wurde bereits ein Eintrag

csync2          stream  tcp     nowait  root    /usr/sbin/csync2        csync2 -i
zu /etc/inetd.conf hinzugefügt. Auch /etc/services wurde um 
csync2          30865/tcp                       # cluster synchronization tool

erweitert. Weiter geht er mit dem Erzeugen der SSH- Schlüssel auf allen beteiligten Nodes- im Beispiel die beiden Nodes host-1 und host-2.

# openssl genrsa -out /etc/csync2_ssl_key.pem 1024
# openssl req -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr
# openssl x509 -req -days 3650 -in /etc/csync2_ssl_cert.csr \
  -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem

 !!!ACHTUNG!!! Beim Erzeugen des CSR das Feld Common Name (CN) leer lassen!!! Danke an Jorge Matias für den Tipp! http://lists.linbit.com/pipermail/csync2/2008-June/000416.html
Ein gefüllter CN kann der Grund für die Fehlermeldung Establishing SSL connection failed. sein 

Auf einer der Nodes muss nun noch ein Key erzeugt werden, der für jede Synchronisationsgruppe eindeutig sein sollte: # csync2 -k /etc/csync2.key Im Anschluß sollte man sich um die Konfigurationsdatei /etc/csync2.cfg kümmern und diese den Anforderungen und lokalen Gegebenheiten anpassen:
Beispiel:

group cfgtest {
  host host-1;
  host host-2;       
  key /etc/csync2.key;       
  include /etc/default;        
  action {              
    pattern /etc/default/useradd;               
    exec "/bin/date";               
    logfile "/var/log/csync2-action.log";               
    do-local;       
  }       
  backup-directory /var/backups/csync2;       
  backup-generations 3;       
  auto younger;
}

Eine detaillierte Erklärung aller möglichen und verwendeten Parameter ist in der Dokumentation zu finden. Nachdem die Konfigurationsdatei und der Key (csync2.key) auf alle anderen Nodes kopiert wurde, muss nur noch das Backupverzeichnis manuell angelegt werden (/var/backups/csync2 im Beispiel). Ein Test mit:
# csync2 -xv

sollte nun fehlerfrei durchlaufen.
Automatisches Ausführen:
Unter Ubuntu ist bereits die Datei /etc/cron.d/csync2 angelegt worden. Der Eintrag darin ist auskommentiert und würde zudem auch lediglich einen Test durchführen ob die Peers in sync sind.
Um eine reale Synchronisation durchzuführen ist eine Zeile
---
*/5 * * * * root csync2 -x
---
einzufügen.