Csync2 ====== Sincronizar archivos entre clusters Versión 1 ** Configurar ** Cluster de w11-test y w12-test como master y (esclavo) Instalar csync2 en cada nodo del cluster ``` apt-get install csync2 ``` Verificar que cada equipo conozca la ip de los demás en el /etc/hosts: ``` 127.0.0.1 localhost 192.168.2.152 w11-test.pm.rosario.gov.ar w11-test 192.168.2.153 w12-test.pm.rosario.gov.ar w12-test ``` En w11-test generar clave (si no hace nada tipear hasta que vuelva) ``` csync2 -k /etc/csync2.key ``` ``` chmod 600 /etc/csync2.key ``` Generar los certificados en un debian 6 o anterior con el Common Name (CN) vacío (por un bug de la v1) ``` 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 600 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem ``` Copiarlos a w11-test ``` rsync -av /etc/csync* w11-test:/etc/ ``` ``` chown root.root /etc/csync2_ssl* ``` ``` chmod 640 /etc/csync2_ssl* ``` Crear archivo de configuracion /etc/csync2.cfg en w11-test: ``` # please see the REAMDE file how to configure csync2 #nossl w* w*; # no utiliza certificados ni encriptacion group apache2 ` host w11-test; host (w12-test); key /etc/csync2.key; include /etc/apache2; include /etc/php5; include /var/www; exclude *.swp; action ` pattern /etc/apache2/*; exec "/usr/bin/rsync -a /etc/apache2/* /var/backups/apache2-csync2/`date +%Y.%m.%d-%H.%M.%S`-apache2/; /etc/init.d/apache2 reload"; logfile "/var/log/csync2_apache.log"; do-local; #ejecuta el comando en local y remotos ` action ` pattern /etc/php5/*; exec "/usr/bin/rsync -a /etc/php/* /var/backups/apache2-csync2/`date +%Y.%m.%d-%H.%M.%S`-php/; /etc/init.d/apache2 reload"; logfile "/var/log/csync2_php.log"; do-local; ` action ` pattern /var/www/*; exec "/usr/bin/rsync -a /var/www/* /var/backups/apache2-csync2/`date +%Y.%m.%d-%H.%M.%S`-www/"; logfile "/var/log/csync2_www.log"; do-local; ` backup-directory /var/backups/csync2; backup-generations 3; auto none; # modo para resolver conflictos en este caso gana siempre master ` ``` Copiar archivos de configuracion a w12-test ``` scp /etc/csync2* w12-test:/etc/ ``` Reiniciar el inetd en ambos nodos ``` /etc/init.d/openbsd-inetd restart ``` Generar directorio para backups en cada nodo ``` mkdir -p /var/backups/csync2/ ``` Hacer primera sincronización para generar la base Primero en el master y luego en los esclavos ``` csync2 -xv ``` Los esclavos deben tirar error de que no pueden sincronizar a otros por política del cluster ``` ERROR from peer w12-test: Permission denied for slave! ``` Verificar que todos quedaron con la base al día (no debe devolver ninguna salida) ``` csync2 -T ``` Opcional: agregar sincronización automática ``` */1 * * * * csync2 -x >/dev/null 2>&1 ``` Opcional: generar script para sincronizar a mano Archivo /usr/local/bin/apache2sync ``` #!/bin/bash # sincroniza config de apache usando csync2 /usr/sbin/csync2 -v -m $@ 2>&1 | /usr/bin/logger -t csync2 /usr/sbin/csync2 -v -u 2>&1 | /usr/bin/logger -t csync2 ``` Marca para sincronizar los archivos modificados y después los sincroniza notificando al syslog Fuente http://hswong3i.net/blog/hswong3i/apache2-cluster-csync2-ubuntu-12-04-mini-howto ** Problemas ** Para debug de errores ``` csync2 -xvvv ``` ``` csync2 -TI ``` Probar sin certificados: descomentar en config y reiniciar ``` nossl w* w*; # no utiliza certificados ni encriptacion ``` En caso de cambio de certificados: error ``` Peer did provide a wrong SSL X509 cetrificate. ``` Borrar certificado de la base ``` sqlite /var/lib/csync2/`hostname`.db ``` ``` sqlite> delete from x509_cert where peername = 'name-of-peer'; ``` Error de identificacion ``` ERROR from peer w12-test: Identification failed! ``` Revisar que cada equipo se pueda conectar a los demás sin problemas ``` csync2 -vT ``` Borrar base en los nodos y regenerar listado de archivos sincronizados ``` rm /var/lib/csync2/w11-test.db ``` Script para borrar archivos de la base ``` echo 'select filename from file;' | sqlite /var/lib/csync2/w11-test.db | grep sites-enabled >/tmp/1 for I in `cat /tmp/1`; do echo "delete from file where filename = \"$`I`\";" | sqlite /var/lib/csync2/w11-test.db; done ```