Configure uma replicação simples de arquivos via Csync2 no OpenSUSE

De Wiki Hackstore

Descrição

  • Sincronização de arquivos no servidor com csync2.
  • Ele possui vários algoritmos de sincronia, como pelo arquivo mais novo, mais antigo, maior, entre outros. Nesse caso estarei usando o mais novo (younger)
  • Além de sincronizar é possível executar comandos remotos, como reiniciar o apache após um rotate de log.
  • Pode ser utilizado com N servidores.


Softwares e Versões

  • Csync2 2.0 ou superior
  • OpenSUSE


Instalação

Baixe o csync2 [1]:

wget http://oss.linbit.com/csync2/csync2-2.0.tar.gz


Instale os pacotes necessários para compilação:

zypper in librsync librsync-devel libgnutls-devel libtasn1-devel p11-kit-devel sqlite3-devel


Compile o Csync2:

tar xzvpf csync2-2.0.tar.gz && cd csync2-2.0
./configure ; make && make install


Crie o certificado:

make cert


Caso deseje criar certificado na mão:

$ 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 


Configuração

Configure o arquivo /usr/local/etc/csync2.cfg:

group matriz
{
        host web2xt-master@10.199.199.1 web2xt-slave@10.199.199.2;

        key /etc/csync2.key_hackstore;

        include /etc/passwd;
        include /etc/group;
        include /etc/shadow;
        include /etc/apache2;
        include /etc/squid;
        include /etc/init.d/firewall;
        include /srv/www/htdocs/proxymin;
        include /etc/openvpn;
        include /etc/ppp;
        include /dnslns;
        exclude /srv/www/htdocs/cacti/rra;
        exclude /srv/www/htdocs/cacti/log;
        exclude /etc/hostname;
        auto younger;
}


Crie um link simbólico para o /etc (opcional):

cd /etc ; ln -s /usr/local/etc/csync2.cfg csync2.cfg


Crie a chave de segurança em algum dos nodos:

csync2 -k /etc/csync2.key_hackstore


Copie a chave de segurança e o arquivo de conf para os demais hosts:

scp -r /etc/csync2* root@outroshosts:/etc


Ajuste as permissões:

chmod 640 /etc/csync2.cfg


Arquivo de init

#! /bin/sh

### BEGIN INIT INFO
# Provides: csync2
# Required-Start: $network $syslog sshd
# Required-Stop: $network $syslog sshd
# Default-Start:  3 5
# Default-Stop:   0 1 2 6
# Short-Description:    Control sync resources.
### END INIT INFO


# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_failed <num>  set local and overall rc status to <num>
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status
. /etc/rc.status

# First reset status of this service
rc_reset


case "$1" in
    start)
        echo -n "Starting Csync2..."
        /usr/local/sbin/csync2 -ii &

        rc_status -v && rc_exit
        ;;
   stop)

        echo -n "Shutting down Csync2...."
        killall -TERM /usr/local/sbin/csync2

        rc_status -v && rc_exit
        ;;

    reload|restart)

        echo -n "Restarting Csync2..."
                $0 stop
                $0 start

                rc_status
                ;;

     *)
        echo "Usage: $0 {start|stop|reload|restart}"
        exit 1
        ;;
esac
rc_exit


Dê permissão de execução:

# chmod +x /etc/init.d/csync2


Agendamento de sincronização automática

Inicie o daemon em ambas as máquinas:

 chkconfig -a csync2


Sincronize manualmente:

csync2 -x
  • OBS: Na primeira sincronia pode gerar erros. Rodar mais de uma vez nesse caso.


Colocar o script no crontab com a frequência de sincronismo desejada:

#Sync files 
*/30 * * * *   root  /usr/local/sbin/csync2 -x


Referências: