[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

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

Referencias

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:

  1. Edite el fichero de configuración /etc/ssh/sshd_config.

  2. Asegúrese de haber fijado a no las variables PasswordAuthentication y PermitEmptyPasswords.

  3. 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/

ArtWork/WikiDesign/icon-admonition-attention.png

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:

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/**
- *

ArtWork/WikiDesign/icon-admonition-idea.png

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.

ArtWork/WikiDesign/icon-admonition-info.png

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!


2023-09-11 07:23