Primero vamos a decidir las opciones para rsync, en mi caso y como lo explico en el parrafo anterior requiero copiar todos los archivos al nuevo servidor, despues que copie solo los nuevos archivos y/o los modificados. Todo esto lo logro pasando las opciones -avz
y -e ssh
a rsync.
-a para copiar recursivamente manteniendo privilegios, fecha de creacion, permisos, etc.;
-v para incrementar el nivel de detalle de la operacion;
-z para comprimir los datos, asi la transferencia es mas rapida;
-e ssh para usar ssh para copiar los archivos de un servidor a otro.
Puedo usar tambien --delete-after
para borrar los archivos que hayan sido borrados antes de realizar el backup en el servidor de logs.
Para ilustrar el ejemplo voy a asumir la siguiente configuracion:
Cita:
servidor de logs : 192.168.0.100
servidor web : 192.168.0.200
rsync lo voy a ejecutar con un cron en el servidor web
Procedimiento:
1.- Instalamos rsync en el servidor web, en Debian basta con hacer un:
aptitude install rsync
2.- Ejecutamos rsync en 192.168.0.200:
rsync -e ssh -avzn bot@192.168.0.100:/home/bot/logs/canal /var/www/logs/canal/
Si todo esta bien tendremos un mensaje indicando los archivos recibidos, la cantidad de bytes y la velocidad de transferencia.
3.- Hasta aqui todo esta bien, pero si necesitamos hacer esto automaticamente cada hora mediante cron tenemos que lograr que ssh no nos pida contrasena. Para lograrlo realizamos el siguiente procedimiento:
Creamos una llave publica y una llave privada:
ssh-keygen -tdsa
Presionando solo enter en todas las preguntas que el comando anterior requiere vamos a tener nuestra llave publica en /home/usuario/.ssh/id_dsa.pub. Copiamos esta llave al servidor 192.168.0.100:
cd /home/usuario/.ssh/
cat id_dsa.pub | ssh bot@192.168.0.100 "cat - >> /home/bot/.ssh/authorized_keys"
Probamos que todo funcione haciendo:
ssh -l bot 192.168.0.100
Si no nos pide contrasena... podemos continuar con el siguiente paso.
4.- Ahora que 192.168.0.100 no nos pide contrasena podemos automatizar el proceso. Debemos ejecutar este comando en 192.168.0.200 como una tarea cada n cantidad de tiempo y desde luego podemos tener un registro de que archivos se van copiando:
crontab -e
Para ejecutar el backup cada hora agregamos en 192.168.0.200:
0 * * * * rsync -e ssh -avz bot@192.168.0.100:/home/bot/logs/canal /var/www/logs/canal/ 2>&1 > /var/log/rsync-backup.log
$ cd
$ rm .ssh/known_hosts
$ ssh ras.mydomain.com