====== 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 ===== * [[http://oss.linbit.com/csync2/paper.pdf]] * [[http://linuxaria.com/howto/csync2-a-filesystem-syncronization-tool-for-linux]] benötigte Pakete auf allen Knoten installieren: > dpkg -l | grep -Fi inetd > apt install csync2 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 group Loadbalancer { host dbfritz01; #master server host dbfritz02; #slave server host dbfritz03; #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)... bei ''xinetd'': > vi /etc/xinetd.d/csync2 ... server_args = -i -l disable = no ... bei ''openbsd-inetd'': > 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 **un**synchronen 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 ===== * [[http://glt06.linuxtage.at/50/]] * [[http://oss.linbit.com/csync2/paper.pdf]] * [[http://www.roaksoax.com/2008/06/cluster-sinchronization-tool-csync2]] * [[http://svn.linbit.com/csync2/tags/csync2-1.9/README]]