Cuando hablamos de replicar tu web, nos referimos a realizar una copia espejo de tus archivos, de un servidor a otro, de modo que cada cambio que realices en el primero sea replicado automáticamente en el segundo servidor. Esto es una buena opción si deseas tener una copia de tus archivos en otro servidor por si fallase el primero, o simplemente si deseas utilizarlo como copia de seguridad. La ventaja de utilizar Rsync para esto es que únicamente replicará los cambios que se hayan realizado en los archivos desde la última sincronización, ahorrando así un ancho de banda muy valioso y no sobrecargando el servidor. Rsync respeta también permisos y propietarios de los archivos, lo que es fantástico. De modo que vamos a ver cómo realizar todo el proceso para tener nuestros archivos replicados de una forma rápida y segura.
Vamos a utilizar la siguiente configuración como ejemplo:
1.- Instalación de Rsync
En la mayoría de distribuciones actuales, Rsync viene instalado por defecto, pero si no es así, podemos instalarlo de la siguiente forma, tanto en el servidor origen como en el servidor espejo:
yum install rsync
2.- Probando Rsync
Accedemos al servidor espejo y ejecutamos el siguiente comando para testear la sincronización:
rsync -avz -e ssh root@origen.dominio.com:/var/www/ /var/www/
Obtendremos algo como esto, y debes contestar Yes:
The authenticity of host 'origen.dominio.com (127.0.0.1)' can't be established. RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23. Are you sure you want to continue connecting (yes/no)?
Ahora introduce la contraseña root del servidor origen.dominio.com y podrás comprobar que el directorio /var/www del servidor de origen habrá sido replicado en el servidor espejo en la misma ruta.
3.- Creando las keys para conectar ambos servidores sin necesidad de introducir la contraseña
Debido a que ejecutaremos la sincronización de nuestros archivos automáticamente vía cron, necesitamos conectarlos antes sin necesidad de tener que introducir la contraseña root en cada conexión. De modo que vamos a crearlas de la siguiente forma, en el servidor espejo.
mkdir /root/rsync ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key
Obtendrás algo como esto:
Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): [pulsa intro] Enter same passphrase again: [pulsa intro] Your identification has been saved in /root/cron/mirror-rsync-key. Your public key has been saved in /root/cron/mirror-rsync-key.pub. The key fingerprint is: 68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@espejo
Ahora copiamos la key pública generada a nuestro servidor de origen de la siguiente forma:
scp /root/rsync/mirror-rsync-key.pub root@origen.dominio.com:/root/
La clave pública del servidor espejo estará ahora disponible en el directorio /root del servidor origen.dominio.com
4.- Configurando el servidor origen.dominio.com
Accede al servidor de origen y ejecuta los siguientes comandos:
mkdir ~/.ssh chmod 700 ~/.ssh mv ~/mirror-rsync-key.pub ~/.ssh/ cd ~/.ssh touch authorized_keys chmod 600 authorized_keys cat mirror-rsync-key.pub >> authorized_keys
5.- Probando si RSync nos funciona sin necesidad de solicitarnos la contraseña root
En el servidor espejo, ejecutamos lo siguiente:
rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/archivos/imágenes -e "ssh -i /root/rsync/mirror-rsync-key"root@origen.dominio.com:/var/www/ /var/www/
La opción «–delete» indica que si un archivo es eliminado en origen, deberá eliminarse también en el espejo. La opción «–exclude» indica aquellos archivos o directorios que no deseamos que sean copiados ni actualizados en el servidor espejo. Si ejecutas «man rsync» verás todas las opciones de las que dispones para adaptar la replicación de archvios a tus necesidades.
Una vez ejecutado el comando anterior, deberías obtener algo como esto sin necesidad de que te haya solicitado una contraseña:
receiving file list ... done sent 71 bytes received 643 bytes 476.00 bytes/sec total size is 64657 speedup is 90.56
6.- Creando una tarea cron para ejecutarlo constantemente
Nos interesa automatizar la replicación de archivos sin que sea necesaria nuestra intervención manual, así que ejecutamos lo siguiente en el servidor espejo:
crontab -e
Y añadimos las siguientes líneas al archivo de cron:
*/5 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" someuser@server1.example.com:/var/www/ /var/www/
Con esto, la replicación de archivos se producirá automáticamente cada 5 minutos. Como sabes, puedes modificar el cron para adaptarlo a tus preferencias muy fácilmente.
Esto es todo, no ha sido demasiado complicado, ¿verdad? Rsync no es el único modo de replicar archivos, pero es una solución rápida y eficaz compatible con todos los sistemas Linux/Unix.