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