Hola, ahora que hemos estado trabajando en esquemas distribuidos nos ha surgido la necesidad de sincronizar el contenido de directorios entre uno o varios servidores, para nuestro caso, necesitamos sincronizar el directorio del servidor web principal con el de los secundarios. Teniendo en cuenta este escenario hemos optado por implementar rsync ya que nos da la opción de reemplazar únicamente los archivos que han sido modificados, de esta manera logramos una sincronización óptima entre los servidores web. Ahora bien como ya es mandatorio en interconexiones seguras, o no en estos días cualquier red es insegura, hemos decidido usar ssh para crear un túnel seguro que transfiera la información a sincronizar. Nuestro ambiente lo tenemos con servidores web con el sistema operativo Linux, en la distribución Centos versión 6.3.

Esquema de dispositivos.

Servidor Master: 192.168.0.10

Servidor Slave: 192.168.0.20

Inicialmente debemos instalar rsync en el servidor Master.

[sourcecode language=»text»]

[root@Master]# yum install rsync

[/sourcecode]

Para mantener rsync como un demonio en el servidor master instalamos xinetd

[sourcecode language=»text»]

[root@Master]# yum install xinetd

[/sourcecode]

Editamos el archivo de configuración de rsync en xinetd y habilitamos el servicio

[sourcecode language=»text»]

[root@Master]# vim /etc/xinetd.d/rsync

disable = no

[/sourcecode]

Cargamos el servicio de xinetd

[sourcecode language=»text»]

[root@Master]# service xinetd start

[/sourcecode]

Hacemos que el servicio suba con el arranque del equipo

[sourcecode language=»text»]

[root@Master]# chkconfig xinetd on

[/sourcecode]

Ahora debemos instalar rsync en el servidor Slave.

[sourcecode language=»text»]

[root@Slave]# yum install rsync

[/sourcecode]

Ahora debemos crear las llaves de ssh para que se puedan transferir los archivos usando ssh. En este aspecto es importante tener en cuenta con que usuario se va a hacer la transferencia para este caso usaremos el superusuario root, se recomienda que usar un usuario sin privilegios por cuestiones de seguridad.

Bueno debemos crear la llave en el servidor Slave.

[sourcecode language=»text»]

[root@Slave]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

[/sourcecode]

Luego debemos copiarla al servidor Maestro.

[sourcecode language=»text»]

[root@Slave]# ssh-copy-id 192.168.0.10

root@Master’s password:

Now try logging into the machine, with «ssh ‘Master'», and check in:

.ssh/authorized_keys

to make sure we haven’t added extra keys that you weren’t expecting.

[/sourcecode]

Y con eso ya podemos ejecutar rsync sin el prompt que nos solicita las credenciales.

Finalmente podemos crear una tarea programada para que se ejecute la sincronización con el intervalo de tiempo deseado para este caso lo ejecutará cada 6 horas.

[sourcecode language=»text»]

[root@Slave]# #crontab –e

0 */6 * * * /usr/bin/rsync -e ssh -azn root@Master:/var/www/html/ccs/ /var/www/html/ccs/

[/sourcecode]

Si tienes alguna duda, escribenos. 😉