Realizar backups de manera facil con rsync y ssh Enviado por RazaMetaL el Mié, 2007-02-14 14:27. Tengo dos servidores, uno tiene un eggdrop que guarda el log de actividad de un canal en /home/bot/logs/canal. Hasta ahi todo esta muy bien, pero requiero que esos logs se publiquen en un sitio web que se encuentra en otro servidor.
La manera mas sencilla y practica que encontre para hacer esta tarea fue usando rsync para sincronizar los archivos de log desde un servidor a otro y que solo se copien los archivos nuevos o modificados.
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(En caso de que no se encuentre instalado):
$ aptitude install rsync
2.- Ejecutamos rsync en 192.168.0.200:
$ rsync -e ssh -avzn [email protected]:/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 [email protected] "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 [email protected]:/home/bot/logs/canal /var/www/logs/canal/ 2>&1 > /var/log/rsync-backup.log