Cómo realizar copias de seguridad con rsyncd


Una de las tareas más importantes de un administrador, y muchas veces olvidada, es la realización de copias de seguridad. Hay multitud de aplicaciones comerciales y open source que nos permiten realizarlas de una forma más o menos potente o sencilla. En este artículo vamos a explicar mediante un ejemplo práctico como obtener una réplica de la información de un servidor mediante el comando rsync. Para ello antes de nada vamos a dar una breve introducción a este comando y sus características fundamentales, las cuales nos permitirán montar el sistema de réplica en muy pocos pasos y de forma sencilla. Dejamos al interés del usuario el ir más allá y montar sistemas más potentes aprovechando todas las posibilidades existentes.

Introduction a rsync
La utilidad rsync, escrita inicialmente por Andrew Tridgell y Paul Mackerras, viene prácticamente con la totalidad de distribuciones Linux y sistemas Unix. En caso de no ser así se dispone del código fuente en rsync.samba.org. La principal utilidad de rsync es la de sincronizar estructuras de árboles de directorios a través de la red, aunque puede ser utilizado perfectamente también dentro de una máquina de forma local.
Es muy fácil de utilizar y configurar, y al contrario que la utilización de programas de script basados en FTP, ofrece una serie de funcionalidades que lo diferencian claramente. El algoritmo que utiliza envía únicamente la información que ha cambiado dentro de cada archivo, evitando enviar el archivo completo, y permite comprimirla para reducir la utilización de ancho de banda, o enviarlo a través de ssh si se requiere un nivel extra de seguridad en la transmisión.
Hay diferentes maneras de utilizar rsync en función de lo que necesitemos. Permite realizar copias locales, copias desde y hasta un servidor que corra un demonio de rsync, copias desde y hasta un servidor utilizando un shell remoto como transporte, y por último nos permite listar archivos de un servidor remoto. Todas estas características nos permiten realizar multitud de posibilidades como copias locales, copias de servidores remotos, sistemas de mirroring, mantenimiento sincronizado de sistemas de preproducción y producción, etc…

Qué es lo que queremos hacer
En el ejemplo que desarrollaremos esta basado en un servidor remoto que que corre un demonio rsync, que exporta diferentes arboles de directorios llamados modulos. y utilizaremos otra maquina que actuara como backup, donde salvaremos toda la informacion del servidor.

Los backups que se realizan de esta forma son realmente una réplica de lo que hay en el servidor, por lo que si tenemos algún problema bastará con subir los archivos o carpetas directamente.

Estas son las carpetas del servidor de las que queremos hacer copias:

/usr/local/www/ (Directorio raiz de apache)
/var/lib/mysql/ (Directorio raiz de mysql)

Esta es la carpeta donde haremos las copias de seguridad en la maquina que actua como backup.

/var/salvas/

Esta carpeta debemos de crearla con permiso 600 en la maquina backup para que solo sea accesible por el root de ese sistema.Debemos de tener en cuenta que hay espacio suficiente en la particion donde realizaremos las copias.

Configuración del servidor

Debemos instalar rsync en el servidor.

Para preparar la configuración del servidor debemos editar/crear dos archivos:

/usr/local/etc/rsyncd.conf
/usr/local/etc/rsyncd.secrets.

El primero de ellos contiene la configuración de los módulos exportados, mientras que el segundo contiene la información de los usuarios que tienen permisos para realizar conexiones. Estos son los contenidos de cada archivo:

rsyncd.conf

uid = nobody
use chroot = yes
max connections = 1
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid

#Modulo MySql
[mysql]
#Directorio que vamos ha exportar
path = /var/lib/mysql/
#Un comentario
comment = Directorio de las Bases de Datos
#Enjaular para no escalar directorios
use chroot = true
#Una sola conexion permitida
max connections = 1
#Solamente leer
read only = true
#No se permite listar
list = false
#Un usuario con permiso sobre este directorio, puede ser root, pero no es recomendable
uid = mysql
#Usuario de autenticacion contra el servidor rsyncd
auth users = backup
#Donde se encuentra el fichero que contiene el password
secrets file = /usr/local/etc/rsyncd.secrets
strict modes = true
#Solo permitido desde esta ip
hosts allow = 172.16.7.1

#Modulo de WWW
[www]
path = /usr/local/www
comment = Directorio del web
use chroot = true
max connections = 1
read only = true
list = false
uid = www-data
auth users = backup
secrets file = /usr/local/etc/rsyncd.secrets
strict modes = true
hosts allow = 172.16.7.1

El archivo rsyncd.conf se puede observar que se compone de una primera parte en la que se configuran parámetros genéricos del servidor, y una segunda parte donde se muestra la configuración exacta de cada módulo exportado. En la configuración se ha puesto por defecto que se use como usuario local nobody, y que se haga bajo un entorno chroot por seguridad. Esto hace que por defecto cuando nos conectemos a un módulo lo hagamos con ese usuario, y no podamos salir de él a otras zonas del servidor. Dentro de cada módulo se indica la carpeta a la que apunta, se dice que únicamente se pueden leer archivos, mediante read only = true, pero no modificarlos ni crear nuevos. Se dice también que si se socilita un listado de módulos al servidor estos estén ocultos, que se utilice como datos de conexión un usuario de nombre backup cuyo password está en el archivo /usr/local/etc/rsyncd.secrets, y que únicamente se permitan conexiones desde la ip 172.16.7.1

Editamos el fichero /usr/local/etc/rsyncd.secrets y dentro escribimos el usuario y la clave de conexion de la siguiente forma:

backup:clave

backup: es el usuario que hemos declarado en cada modulo, donde dice:

auth users = backup

clave: puede ser cualquiera.

Estos deben ser lor permisos para ambos archivos:

-rw-r–r– 1 root root 472 Dec 31 14:01 rsyncd.conf
-rw——- 1 root root 21 Dec 31 14:00 rsyncd.secrets

Solo falta añadir el servicio para que se inicie con el sistema. Editamos el fichero /etc/rc.conf y añadirmos.

rsyncd_enable=”YES”

Ahora podemos dar un rehash para actualizar el path del sistema.

Configuración del Cliente

Nos vamos ha la maquina que actuara de respaldo de nuestros ficheros e instalamos el rsyncd de la misma forma que en el servidor.

Despues el directorio /var/salvas/ lo debemos de crear con permiso 600, tambien podemos seleccionar otra ubicacion, siempre teniendo en cuenta el espacio que necesitaremos.

Dentro de la carpeta /var/salvas/ creamos el archivo password.rsync, en el que escribimos el password con el que queremos conectarnos al servidor rsync:

clave

Esta clave debe ser identica ha la escrita en el fichero rsyncd.secrets en el servidor, de lo contrario las copias no se realizaran.

Debemos darle permisos de sólo lectura para el usuario que vaya a ejecutar la copia.

# chmod 600 password.rsync

ademas de presionar enter al final de la clave para que funcione correctamente.

Ahora ya podemos probar la conexión al servidor, para ello lo más sencillo es pedirle que nos dé un listado de lo exportable en uno de de los módulos, por ejemplo :

rsync –password-file=/var/salvas/password.rsync rsync://backup@server.dominio.cu/www

Con esta orden el servidor nos contestará con el conjunto de archivos y carpetas disponibles en el módulo www. Si quisiéramos que lo hiciera de manera recursiva, recorriendo las subcarpetas, deberíamos haberle pasado el parámetro -r. Hay que prestar atención a como acaba la información que pedimos al servidor.

Si el servicio no funciona disponemos de la opción de mirar el log del servidor /var/log/rsyncd.log para investigar las posibles causas del problema. Conviene asegurarse de que el servicio está disponible en xinetd reiniciando éste si es necesario, y que los datos de usuario son correctos.

Una vez probado que funciona el servicio podemos preparar un pequeño script que ejecute la petición al servidor para cada módulo disponible. Este script podríamos luego incorporarlo a un cron, o modificarlo lo que hiciera falta para montar copias totales semanales e incrementales diarias.

Creamos el archivo replica.sh:

#!/bin/sh
#Carpeta www
rsync –delete -arzvl –password-file=/var/salvas/password.rsync rsync://backup@server.dominio.cu/www /var/salvas/www

#Carpeta mysql
rsync –delete -arzvl –password-file=/var/salvas/password.rsync rsync://backup@server.vn.pri.jovenclub.cu/mysql /var/salvas/mysql

Dándole permisos de ejecución ya es suficiente para lanzar el script y obtener una copia de toda la información del servidor. Sucesivas ejecuciones del script producirán que se actualice la información existente en base al algoritmo de rsync, consiguiendo una replica actualizada con un consumo de ancho de banda óptimo.

La opcion –delete hace que se borren los fichero que han cambiado, dando la posibilidad de tener una replica bien actualizada.

La opcion del final, /var/salva/www hace que la salva se realice justo en esa ruta.

Para finalizar

# chmod 755 replica.sh
#./replica.sh

Ahora podemos ejecutar el scrip ./replica.sh y veremos como se crea una replica de los directorios que tenemos en el servidor en la carpeta /var/salva/, la proxima ves que se ejecute el script solo se transferiran los ficheros que cambien en el servidor. de esta forma podemos tener una replica de todos los datos que deseemos actualizada

Anuncios

2 comentarios

  1. Necesito que te pongas en contacto conmigo porque estoy haciendo algo parecido a lo tuyo.
    Lo mio es un sincronismo entre dos servidores. Si yo hago un cambio en el pc1 que el pc2 automaticamente me haga el mismo cambio.

    • Oscar tambin yo necesito que dentro de tus posibilidades, me brindes tus experiencias respecto a este trabajo ya que estoy tratando de hacer algo parecido a lo tuyo
      Gracias desde ahora

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: