Respaldos con rsnapshot
Por: MaxHetrick
Esta guía le ayudará a configurar un servidor de respaldo rsnapshot en su red. Explicaremos brevemente cómo configurar el inicio de sesión sin contraseña vía SSH para sincronizar usando las llaves SSH.
Desde hace algún tiempo, estuve utilizando la herramienta Synbak para automatizar el respaldo de mi laptop en el hogar a mi escritorio. Antes de eso, un simple script rsync hacía la tarea. Aunque Synbak es una herramienta maravillosa para simplificar los respaldos en el hogar, no es tan flexible como rsnapshot. (el poder de Synbak está en su fácil instalación y uso.)
Esta guía asume el uso de paquetes RPM extendiendo la documentación del autor con especificaciones en la instalación de CentOS/Fedora.
Sistema
- CentOS 4.x/5.x
- Fedora 7 (Debe trabajar en cualquier Sistema Operativo RHEL/Fedora)
Referencias
Contents
1. Configuración del Sistema
A la hora de instalar rsnapshot usando Yum y RPM, existen algunas diferencias entre CentOS y Fedora.
1.1. CentOS 4.x/5.x
Para la instalación en CentOS 4.x/5x, usted tendrá que instalar y habilitar el repositorio RPMFroge. Le aconsejamos que configure yum-priorities también. Afortunadamente en la wiki de CentOS podemos encontrar una guía de RPMForge donde se explica esto, de una forma sencilla y por pasos. Una vez que tenga todo configurado, instale rsnapshot desde la línea de comando con:
# yum install rsnapshota
Con esto descargará algunas dependencias de Perl si usted no las tiene instaladas. Algunos de los paquetes serán descargados desde el repositorio base y el resto desde el repositorio RPMForge.
1.2. Fedora
La instalación en un escritorio Fedora 7 no necesita una configuración especial para los repositorios. Simplemente instale desde la línea de comando con:
# yum install rsnapshot
2. Fijando la configuración del ambiente
Después de la instalación, un ejemplo del fichero de configuración se puede encontrar en /etc/rsnapshot.conf, pero los inconvenientes son que estará respaldando más de un anfitrión, así que no lo usaremos. En su lugar crearemos un directorio para alojar los ficheros de configuración de su anfitrión. Puede sustituir el camino a su gusto.
# mkdir /etc/rsnapshot
Además, usted va ha necesitar un lugar donde colocar estos respaldos, así que cree un lugar para almacenar los ficheros:
# mkdir /srv/backups/snapshots
Lo último que necesita es un lugar para almacenar los ficheros de log que rsnapshot genera, esto será configurado más adelante. Cree el directorio:
# mkdir /var/log/rsnapshot
3. Configuración del login sin contraseña de SSH
3.1. En el servidor rsnapshot
En el servidor rsnapshot usted necesitará crear un par de llaves SSH. Esto lo puede realizar usando ssh-keygen:
# ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: snip
3.2. Instalar llaves en el anfitrión
Después que usted haya creado la llave en el servidor rsnapshot, si ya tiene acceso SSH puede fácilmente adjuntar la llave pública al fichero remoto apropiado.
No adjunte la otra llave que no es pública. Ejecute lo siguiente desde el servidor rsnapshot hacia el anfitrión remoto que desea respaldar:
# cat ~/.ssh/id_dsa.pub | ssh root@remote_host "cat >> ~/.ssh/authorized_keys2"
Ahora, queda a su decisión desactivar los logins con password en el anfitrión remoto, vía SSH. Si usted decide desactivarlos:
Edite el fichero de configuración /etc/ssh/sshd_config.
Asegúrese de haber fijado a no las variables PasswordAuthentication y PermitEmptyPasswords.
Cambiar los permisos en sus ficheros y directorios .ssh. Algo como lo siguiente:
# chmod 700 .ssh; chmod 400 .ssh/authorized_keys2
4. Configuración de los anfitriones rsnapshot
Ahora que tiene un lugar para almacenar los ficheros de configuración, un lugar para almacenar los respaldos actuales y un acceso a los anfitriones remotos a través de login sin contraseña, los ficheros de configuración de los anfitriones pueden ser creados.
4.1. Fichero .conf de anfitrión
Cree el fichero que tendrá las especificaciones de la configuración de rsnapshot para el anfitrión que usted desea respaldar. Sustituya el nombre de anfitrión o nombre de fichero que sea necesario.
# vim /etc/rsnapshot/laptop.rsnapshot.conf
Existen varias opciones a explicar pero aquí, solo mostramos algunas. Entre las opciones y explicaciones siguientes:
config_version 1.2 snapshot_root /srv/backups/snapshots/laptop/ cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_ssh /usr/bin/ssh cmd_logger /usr/bin/logger cmd_du /usr/bin/du interval daily 7 interval weekly 4 interval monthly 3 verbose 2 loglevel 4 logfile /var/log/rsnapshot/laptop.log exclude_file /etc/rsnapshot/laptop.exclude rsync_long_args --delete --numeric-ids --delete-excluded lockfile /var/run/rsnapshot.pid backup root@laptop:/ laptop/ backup_script /etc/rsnapshot/laptop.dump_databases.sh laptop_databases/
|
IMPORTANTE: Advierta los espacios entre las opciones de configuración. Estos no son espacios sino tabulaciones. Además, un slash al final de los directorios es requerido. Esto está explicado en la parte de arriba del fichero de configuración /etc/rsnapshot.conf. |
Todas estas opciones pueden ser vistas en el fichero de configuración de ejemplo. Las explicaciones de los argumentos están a continuación:
config_version 1.2 = Versión del fichero de configuración.
snapshot_root = Destino en donde se almacenan los snapshots.
cmd_cp = Camino al comando de copiar.
cmd_rm = Camino al comando de borrar.
cmd_rsync = Camino a rsync.
cmd_ssh = Camino a SSH.
cmd_logger = Camino a la interfaz de comando del shell para syslog.
cmd_du = Camino al comando de uso de disco.
interval hourly = Cuántas horas se mantendrán los respaldos.
interval daily = Cuántos días se mantendrán los respaldos.
interval weekly = Cuántas semanas se mantendrán los respaldos.
interval monthly = Cuántos meses se mantendrán los respaldos.
verbose = Cantidad de detalles a mostrar.
loglevel = Nivel de los logs.
logfile = Camino al fichero de logs.
ssh_args = Argumentos opcionales de SSH, tales como un puerto diferente (-p)
exclude_file = Camino al fichero excluido (será explicado en más detalles)
rsync_long_args = Argumentos largos para pasarle a rsync.
lockfile = Fichero de bloqueo.
backup = Camino completo a lo que será respaldado, seguido por un camino relativo de ubicación.
backup_script = Camino completo a un script ejecutable, seguido por un camino relativo de ubicación.
Ahora que tiene una configuración funcional de ejemplo para un anfitrión, veamos lo del fichero excluido.
4.2. Fichero .exclude de anfitrión
En nuestro ejemplo tomaremos la opción de excluir todo y solo permitir específicamente lo que queremos respaldar. La razón para esto es permitir absolutamente solo lo que usted desea y automáticamente denegar todo lo demás.
Cree el fichero:
# vim /etc/rsnapshot/laptop.exclude
El uso de ficheros de exclusión puede ser confuso debido a la recursividad. Este ejemplo no pretende comprender completamente la recursividad que usa rsync, así que puede que esto no sea lo que usted está buscando.
Una vez que usted tenga una lista de lo que quiere, adicione ( - * ) para excluir todo lo demás. Esto solo respaldará lo que usted listó. El fichero de exclusión de nuestro ejemplo se muestra a continuación:
+ boot/ + boot/** + etc/ + etc/** + home/ + home/** + opt/ + opt/** + root/ + root/** + var/ + var/** + usr/ + usr/local/ + usr/local/** + var/ + var/** + srv/ + srv/** - *
|
CONSEJO: Para una mejor compresión del patrón de coincidencia y la recursividad, consulte la entrada en el blog kurup.org y el manual de rsync. |
|
NOTA: Si usted ya es un experto en recursividad, por favor publique una nota explicando o rectificando cualquiera de nuestros errores. |
4.3. Script de respaldo de Anfitrión
La última opción de configuración a explicar es la llamada al script ejecutable que referenciamos para verter bases de datos. Esta opción nos permite ubicar un script que será ejecutado al final de la sincronía para adicionar al archivo. Por ejemplo, usted puede conectar a un anfitrión remoto y hacer vertimientos de bases de datos para MySQL y/o PostgreSQL. Cree los scripts de vertimiento de base de datos necesarios:
# vim /etc/rsnapshot/laptop.dump_databases.sh
Adicione la información apropiada. El script de nuestro ejemplo siguiente verterá dos bases de datos MySQL y una base de datos PostgreSQL:
#MySQL datbases for db in wordpress testpress do ssh root@laptop "mysqldump --opt $db" > $db.mysqldump done #PostgreSQL databases for db in docmgr do ssh root@laptop "pg_dump -C $db" > $db.pgsqldump done
Asegúrese de hacer el script ejecutable. Además, usted puede ubicar el script en cualquier lugar que guste si es que no quiere ejecutables en /etc. Por ejemplo /usr/local/bin o /usr/local/sbin.
# chmod +x /etc/rsnapshot/laptop.dump_databases.sh
En el fichero laptop.rsnapshot.conf de arriba, especificamos un script de respaldo de la siguiente forma (recuerde los tabuladores):
backup_script /etc/rsnapshot/laptop.dump_databases.sh laptop_databases/
Esto ubicará los vertimientos de base de datos en el directorio laptop_databases dentro de los respaldos daily, weekly y monthly de snapshot. Esto debería completar una configuración básica de anfitrión.
Lo siguiente que puede configurar es la automatización de las cosas.
5. Configurando un crontab
Podemos lograr la automatización fácilmente usando simplemente una entrada en crontab.
Abra crontab y adicione lo siguiente:
# crontab -e #MAILTO="" ##Supresses output MAILTO=me ################################################################### #minute (0-59), # #| hour (0-23), # #| | day of the month (1-31), # #| | | month of the year (1-12), # #| | | | day of the week (0-6 with 0=Sunday)# #| | | | | commands # ################################################################### 15 02 * * * /usr/bin/rsnapshot -c /etc/rsnapshot/laptop.rsnapshot.conf daily 15 03 * * Sun /usr/bin/rsnapshot -c /etc/rsnapshot/laptop.rsnapshot.conf weekly 30 03 1 * * /usr/bin/rsnapshot -c /etc/rsnapshot/laptop.rsnapshot.conf monthly
Si usted no desea recibir mensajes de correo, cambie MAILTO a MAILTO="" o alternativamente sea un buen muchacho o muchacha y lea el manual de crontab.
Esta configuración corre un respaldo diariamente a las 2:15am, un respaldo semanalmente los domingos a las 3:15am y un respaldo mensualmente los primeros días de cada mes a las 3:30am.
Cuando todo esté listo, usted tendrá una representación de directorio como la que se muestra más abajo. Las utilidades rsnapshot y rsync hacen uso de los enlaces duros, así que parece como si tuvieras un sistema de archivo completo en cada respaldo pero no es realmente así. Son muy inteligentes y sabias en cuanto a uso de disco. Aunque suene como si todo no estuviese ahí, lo está.
# ll /srv/backups/snapshots/laptop drwxr-xr-x 4 root root 4096 Jan 3 01:47 daily.0 drwxr-xr-x 4 root root 4096 Dec 7 01:46 daily.1 drwxr-xr-x 4 root root 4096 Dec 6 01:48 daily.2 drwxr-xr-x 4 root root 4096 Dec 5 01:46 daily.3 drwxr-xr-x 4 root root 4096 Dec 4 01:46 daily.4 drwxr-xr-x 4 root root 4096 Dec 3 01:46 daily.5 drwxr-xr-x 4 root root 4096 Dec 2 01:46 daily.6 drwxr-xr-x 4 root root 4096 Oct 28 01:46 monthly.0 drwxr-xr-x 4 root root 4096 Sep 30 01:46 monthly.1 drwxr-xr-x 4 root root 4096 Sep 1 01:46 monthly.2 drwxr-xr-x 4 root root 4096 Nov 25 01:46 weekly.0 drwxr-xr-x 4 root root 4096 Nov 18 01:46 weekly.1 drwxr-xr-x 4 root root 4096 Nov 11 01:46 weekly.2 drwxr-xr-x 4 root root 4096 Nov 4 01:46 weekly.3
Si usted configura vertimientos de base de datos, usted encontrará un directorio laptop_databases dentro de cada directorio listado arriba. Por ejemplo:
# cd /srv/backups/snapshots/laptop/daily.0/laptop_databases # ll -rw-r--r-- 1 root root 692310 2008-01-04 02:15 wordpress.mysqldump -rw-r--r-- 4 root root 291379 2008-01-02 22:49 testpress.mysqldump -rw-r--r-- 2 root root 842345 2008-01-03 21:12 docmgr.pgsqldump
Además, usted puede utilizar la opción hourly si necesita respaldar directorios y bases de datos en intervalos de una hora, o si es extremadamente paranoico en lo que datos se refiere. En nuestro ejemplo no tenemos necesidad de ellos, pero al finalizar la guía, estamos seguro que usted puede hacerse una idea de cómo adicionar en los parámetros hourly lo que usted encuentre útil.
Para adicionar más anfitriones, simplemente siga los pasos de esta guía y complete exactamente el mismo proceso con el nuevo nombre de anfitrión en los ficheros que usted creó.
6. Corriendo rsnapshot manualmente
Para correr un snapshot de forma manual, usted puede ejecutar directamente desde la línea de comando con el parámetro apropiado.
# /usr/bin/rsnapshot -c /etc/rsnapshot/laptop.rsnapshot.conf {hourly,daily,weekly,monthly}
7. Reportes de rsnapshot
Si usted está muy ocupado, entonces rsnapshot tiene un pequeño script de reporte que es fácil de configurar. Este le enviará un pequeño mensaje de correo con unos pocos detalles, así como lo sucedido durante el respaldo. Es un reporte muy simple.
Primero, copie el script hacia algún lugar como /usr/local/bin y hágalo ejecutable.
# cp /usr/share/doc/rsnapshot-1.3.0/utils/rsnapreport.pl /usr/local/bin # chmod +x /usr/local/bin/rsnapreport.pl
Luego, adicione --stats a la sección argumento largo de rsync en su fichero rsnapshot de anfitrión. Recuerde que los espacios no son espacios sino tabuladores.
# vim /etc/rsnapshot/laptop.rsnapshot.conf rsync_long_args --stats --delete --numeric-ids --delete-excluded
Por último, edite la entrada del crontab que configuró anteriormente para pasarle el resultado de la ejecución rsnapshot al script rsnapreport.pl.
# crontab -e #MAILTO="" ########################################################## #minute (0-59), # #| hour (0-23), # #| | day of the month (1-31), # #| | | month of the year (1-12), # #| | | | day of the week (0-6 with 0=Sunday) # #| | | | | commands # ########################################################## 15 02 * * * /usr/bin/rsnapshot -c /etc/rsnapshot/laptop.rsnapshot.conf daily 2>&1 | \ /usr/local/bin/rsnapreport.pl | mail -s "laptop daily" me@myemail.com 15 03 * * Sun /usr/bin/rsnapshot -c /etc/rsnapshot/laptop.rsnapshot.conf weekly 2>&1 | \ /usr/local/bin/rsnapreport.pl | mail -s "laptop weekly" me@myemail.com 15 04 1 * * /usr/bin/rsnapshot -c /etc/rsnapshot/laptop.rsnapshot.conf monthly 2>&1 | \ /usr/local/bin/rsnapreport.pl | mail -s "laptop monthly" me@myemail.com
Recuerde la redirección de 2>&1 (standard errors), o ello estará perdido en stderr. Esto quiere decir que la redirección de errores estándar al mismo lugar que la salida estándar. Eso es para el reporte. Ahora, la próxima vez que se ejecute rsnapshot, usted debe tener un reporte en su dirección de correo. Este es parecido al siguiente:
SOURCE TOTAL FILES FILES TRANS TOTAL MB MB TRANS LIST GEN TIME FILE XFER TIME ----------------------------------------------------------------------------------------------------- laptop:/ 59076 1353 17279.45 7169.38 20.361 second 0.000 seconds
8. Conclusiones
En nuestro ejemplo usamos un sistema de escritorio con 2 disco duro de 200GB en un espejo RAID1. Esto es usado para respaldos tanto en laptops y un sistema asterisk. Si usted es inteligente, usted debe correr un espejo RAID1 o algún esquema de disco redundante para usarlo como su servidor rsnapshot.
Buena Suerte!