Buscar en este blog

15.7.07

Sincronizar directorios situados en máquinas remotas contra uno local

Este procedimiento es utilizado para la realización de backups de múltiples máquinas a través de la red. Para ello hay un servidor central (Servidor de Backup) que tendrá acoplados los dispositivos de backup (cintas, discos, etc...).


Las herramientas a utilizar en GNU/Linux (disponibles en otras muchas plataformas) son:

-RSYNC: Permite realizar la sincronización de contenidos entre directorios en local o de alguna máquina remota. Tiene multiples modos de funcionamiento y muchísimas opciones. El comando principal es "rsync".

-SSH: "rsync" puede operar por si mismo o utilizando otros protocolos para conectarse a máquinas remotaas via red. Uno de estos es SSH, que además de ser un protocolo de transmisión cifrado, es posible que ya esté disponible en los equipos a utilizar, no teniendo que abrir más puertas a los sistemas (utilizando las existentes).


El modo de operación es (suponiendo que hay dos servidores remotos):
-En el servidor de backup hay un disco dedicado a esta operación. En él se definen dos directorios "secundarios o imagen". Estos son los que, después de la sincronización, deberán tener exactamente los mismos contenidos que los "originales o maestros" que están en cada servidor.
-El servidor emite un comando "rsync" vía "SSH" contra los servidores y abren la comunicación. El programa "rsync" se encarga de saber que datos debe sincronizar entre los directorios remotos y locales.
- Finalmente en el servidor hay una copia exacta de los contenidos de los directorios remotos.

NOTA: La herramienta "rsync" está enormemente avanzada y maneja sin ningún problema los bloqueos de los archivos que estén abiertos. De todas formas se aconseja utilizarlo cuando el directorio remoto no esté en uso.


PROCEDIMIENTO (El uso del usuario "root" en el procedimiento indica que el "login" remoto será como "root"):
- Se fideliza el acceso SSH del servidor en los clientes para permitir operaciones desatendidas (conexiones sin necesidad de introducir la contraseña in-situ por el administrador).
- Crear el par de claves (pública-privada) del servidor:
ssh-keygen -t rsa (no indicar ninguna clave cuando lo requiera)

- Las claves se crearán en "/root/.ssh" y serán: id_rsa (privada) e id_rsa.public (publica)

- En los servidores remotos se debe añadir el contenido de "id_rsa" al archivo "/root/.ssh/authorized_keys

Con esto ya se podría hacer login vía SSH en el sistema remoto sin que nos pidiera la contraseña.

- Situarse en el directorio "imagen" del servidor local

- Ejecutar "rsync":

rsync -v -u -a --delete --rsh=ssh --stats usuario@192.168.x.x:/dir_maestro_remoto ./

Siendo: (usuario = root), (192.168.x.x = ip del servidor remoto), (/dir_maestro_remoto = ruta COMPLETA al directorio del servidor remoto que queremos respaldar), ('--rsh=ssh' indica que la conexión se ha de realizar por un tunel SSH.)


-SI TODO VA BIEN..... Se puede escribir un pequeño 'script' que se ejecute via "cron" a la hora que se indique.
-SI TODO VA MAL..... (probablemente sea una errata de esta receta)