Benutzer-Werkzeuge

Webseiten-Werkzeuge


csync2

Csync2 - Konfigurationsdaten-Synchronsation

Allgemeine Infos

Csync2 ist ein Cluster-Synchronisations-Tool. Es dient zum synchron halten von Dateien auf unterschiedlichen Hosts in einem Cluster. Dabei kommt csync2 auch mit komplexen Setups mit mehr als 2 Hosts zurecht, kann Dateilöschungen handhaben und Konflikte erkennen. Csync2 ist fuer HA-cluster, HPC-Cluster COWs sowie Serverfarmen geeignet.

Normalerweise wird die Aufgabe die csync2 erledigt als relativ trivial angesehen und daher meist mit simplem Shellscripts und Tools wie zum Beispiel rsync oder scp bewältigt. Aber diese Lösungen behandeln nicht die wirklich heiklen Problemkreise der Dateisynchronisation:

1. Konflikte erkennen

Der triviale rsync-basierende Ansatz zur Synchronisation erkennt keine Konflikte. D.h. wenn eine Datei auf mehreren Hosts verädert wurde, dann wird einfach die zuletzt geänderte Version auf die anderen Hosts kopiert. Solche Lösungen können meistens auch nicht unterscheiden, ob eine Datei auf einem Host gelöscht oder dem anderen erstellt wurde.

2. Komplexe Setups

Das Szenario mit einem Cluster mit zwei Nodes ist zwar sehr simpel, aber nicht sehr realistisch. Meistens findet man Umgebungen mit mehreren sich überlappenden Servergruppen, wobei manche Dateien über alle Server, andere jedoch nur über eine kleinere Liste von Servern synchronisiert werden sollen.

3. Auf Updates reagieren

In vielen Fällen ist es nicht ausreichend einfach nur Dateien zu replizieren. Statt dessen kann es notwendig sein, als Reaktion auf Updates von Dateien deren Dateinamen konfigurierbaren Mustern entsprechend spezielle Kommandos auszuführen. Zum Beispiel sollte in einem Webservercluster nach einem Update der Apache-Konfigurationsdateien das Kommando 'apachectl graceful' ausgeführt werden, damit der Webserver die neue Konfiguration auch verwendet.

Csync2 ist im Hinblick auf diese (und viele andere) Anforderungen entwickelt worden und stellt eine wichtige Basistechnologie für professionelles Linux-Clustering zur Verfügung.

Clifford Wolf hat csync2 als Gegenstück zu DRBD (das ebenfalls bei LINBIT Information Technologies GmbH entwickelt wurde) konzipiert. Während DRBD in Echtzeit Block-Devices zwischen zwei Hosts replizieren kann und so in Fail-Over-Clustern beispielsweise das Spiegeln von Datenbanken erlaubt, kann csync2 zur asynchronen Replikation von Dateien zwischen vielen Hosts in allen möglichen Arten von Clustern zur Anwendung kommen und wird meist für Konfigurationsdateien sowie Applikationsimages benutzt.

Installation und Einrichtung - Ubuntu 14.04 / 16.04

benötigte Pakete auf allen Knoten installieren:

> apt install csync2 openbsd-inetd

Schlüssel generieren:

> openssl req -rand /dev/urandom -sha512 -new -x509 -newkey rsa:4096 -nodes -days 3650 -keyout /etc/csync2_ssl_key.pem -keyform PEM -out /etc/csync2_ssl_cert.pem -outform PEM -subj "/C=DE/ST=Bundesland/L=Stadt/O=Organisation/OU=Abteilung/emailAddress=ich@domain.de"
Generating a 4096 bit RSA private key
.......................................................................++
....++
writing new private key to '/etc/csync2_ssl_key.pem'
-----

Wichtig ist, dass diese Aktion erst ausgeführt wird, wenn der SSL-Schlüssel fertig vorliegt!

> csync2 -k /etc/csync2_ssl.key
> chmod 0600 /etc/csync2_ssl.key

Die erstellten Dateien sind nun auf alle weiteren Cluster zu kopieren.

> ls -lha /etc/csync2_ssl*
-rw------- 1 root root 2,1K Apr 28 15:27 /etc/csync2_ssl_cert.pem
-rw------- 1 root root   65 Apr 28 15:48 /etc/csync2_ssl.key
-rw------- 1 root root 3,2K Apr 28 15:27 /etc/csync2_ssl_key.pem
/etc/csync2.cfg
group Loadbalancer
{
        host dbebo01; #master server
        host dbebo02; #slave server
        host dbebo03; #slave server
 
        key /etc/csync2_ssl.key;
 
        include /etc/csync2.cfg;
        include /etc/hosts.allow;
        include /root/bin/;
        include /root/.ssh;
        include /etc/mysql/mariadb.conf.d/99-basic_common.cnf;
 
        backup-directory /var/backups/csync2;
        backup-generations 10;
        auto none; #no automatic sync
}

evtl. den Internet-Daemon konfigurieren (wenn der Fehler Received record packet of unknown type 83 auftritt, muss der Parameter -l angehängt werden):

> vi /etc/inetd.conf
...
csync2          stream  tcp     nowait  root    /usr/sbin/csync2        csync2 -i -l

diese fünf Dateien auf alle Knoten kopieren:

> scp /etc/csync2.cfg /etc/csync2_ssl* host02:/etc/
> scp /etc/csync2.cfg /etc/csync2_ssl* host03:/etc/

xined restarten:

> service inetd restart

Testlauf

> csync2 -Tv
Running in-sync check for host01 <-> host02.
Connecting to host host02 (SSL) ...
Running in-sync check for host01 <-> host03.
Connecting to host host03 (SSL) ...
Finished with 0 errors.

im CRON einen 2-Minütigen Sync-Intervall festlegen:

> echo "*/2 * * * * root /usr/sbin/csync2 -x" >> /etc/cron.d/csync2

die wichtigsten Parameter

jetzt synchronisieren:

> csync2 -xv

alle unsynchronen Dateien anzeigen:

> csync2 -M

diese Datei ist die richtige/aktuelle:

> csync2 -f /pfad/dateiname

diese Datei ist die falsche/veraltete:

> csync2 -m /pfad/dateiname

alle Dateien aus der CSync2-DB auflsiten:

> csync2 -L

Wenn man sicherstellen will, dass die Dateien auf diesem Rechner als aktuell angesehen werden:

> for i in $(cat /etc/csync2.cfg | egrep -v '^#' | awk '/include /{print $NF}' | sed 's/;$//') ; do csync2 -f ${i} ; done

Quellenangabe

csync2.txt · Zuletzt geändert: 2017/12/01 14:21 von manfred