Rsync

Forums: 

Estoy trabajando en un proyecto para sincronizar el contenido de dos servidores web, ServidorA, ServidorB remotamente, me decidí por rsync sobre ssh, después de un rato de leer y de hacer unos ensayos conseguí que funcionara. Todo esto lo hice en CentOS 5.X.
Para hacer esto debemos tener varias cosas, tener rsync y ssh instalado ;), configurar el ssh para que acepte conexiones por key.
Por defecto el ssh y el rsync vienen instalados, asi que ya tenemos nuestro primer paso, para aquellos que no lo tengan instalado

yum install ssh rsync

las condiciones que tengo son:
ServidorA CentOS 5.X
ServidorB CentOS 5.X
directorios a copiar
/var/lib/mysql
/var/www/html
rsync se ejecuta como comando desde un script

Para nuestro ejercicio el ServidorA es la fuente, donde tenemos los archivos, y el ServidorB es el destino, donde queremos copiarlos.
En ServidorA:

ssh-keygen -t rsa

Salida del comando

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ce:ba:49:XX:c5:f6:XX:13:cd:XX:57:19:XX:9c:4c:XX root@firewall.localdomain

el comando anterior nos pide dos cosas
1. el directorio donde se va a guardar el key, por defecto /root/.ssh/
2. una contraseña
se dejan los dos en blanco presionando la tecla enter
una vez hecho esto se generan dos archivos:
id_rsa --> key privada
id_rsa.pub --> key publica
copiamos el contenido del archivo id_rsa.pub, el contenido de este archivo suele empezar por ssh-rsa

en ServidorB
en este servidor tenemos que pegar el contenido del archivo id_rsa.pub de ServidorA, el contenido debe ser pegado en el archivo authorized_keys ubicado en /root/.ssh
si el archivo no esta lo creamos:

mkdir /root/.ssh
touch /root/.ssh/authorized_keys

una vez tenemos esto podemos probar la conexion ssh desde el ServidorA hacia ServidorB, la primera vez que se hace esta conexion sale un mensaje de la forma:

The authenticity of host 'ipservidorb (ipservidorb)' can't be established.
RSA key fingerprint is 91:50:82:XX:89:00:XX:5c:9b:XX:ac:d7:XX:04:16:XX.
Are you sure you want to continue connecting (yes/no)?

tipeamos yes, y estaremos conectados al servidor remoto.

ahora sigue la parte mas facil, con una lista de lo que deseamos copiar hacemos el script y lo guardamos en ServidorA


#!/bin/bash

#copiamos directorio mysql
rsync -avrcR -l --exclude-from '/firewall/exclude_mysql.txt' /var/lib/mysql --rsh=/usr/bin/ssh ipservidorb:/

#copiamos directorio www
rsync -avrcR -l --exclude-from '/firewall/exclude_www.txt' /var/www/html --rsh=/usr/bin/ssh ipservidorb:/

veamos cada parametro del comando
-avrcR
a: archive mode --> copia en modo archivo, preservando permisos
v: verbose -->
r: recursive --> modo recursivo en los directorios
c: checksum --> skip basado en checksum
R: relative --> usa rutas relativas

-l copia los enlaces simbolicos, como enlaces simbolicos
--exclude-from contiene la ruta a un archivo que tiene lo que no se va a copiar, directorios, archivos, cada uno en una linea
/var/lib/mysql archivos fuente
--rsh/usr/bin/ssh ipservidorb:/ se conecta a servidorb por ssh, el :/ es la ruta destino

listo ya se pueden sentar a ver como se copian los archivos fuentes al destino, recuerden darle permisos de ejecucion al script que contiene los comandos de rsync, y que este se ejecuta desde ServidorA, fuente.

Buen post! te falto agregarle

Imagen de falcom

Buen post! te falto agregarle algunas cosillas como agregar en el crontab -e la ejecucion/programacion del script
puedes complementarlo con un cliente windoze (generalmente son los mas usados) para sacarle respaldo... hay tambien una aplicacion q trabaja con rsync
tambien te falto complementar el tipo de respaldos q realiza? incremental/full etc...
bueno son solo ideas pero muy buen aporte!

A menos que tengas la base de

A menos que tengas la base de datos apagada durante el proceso, no es buena idea usar rsync para replicarla. Si la base es pequeña puedes mejor hacer un mysqldump.

Saludos,

- Edwin

----
Edwin Boza
about.me/edwinboza

buena idea

inicialmente esto es lo que tengo, ya lo ire completando con las ideas que me vayan dando.
lo del crontab si me falto, se me paso.
lo del cliente windows, proximamente lo estare haciendo para hacerle copia un SQL.
encuanto a utilizar rsync sin detener el mysql, pues lo que he leido es que no hay problema, proximamente posteare lo que me a su cedido con respecto a este tema.

gracias

KuzCO