miércoles, 6 de abril de 2011

Backups extendidos

Hace tiempo expliqué como realizar mirrors de páginas webs mediante 'wget'. Ahora vamos a utilizar estos mirrors para realizar pruebas locales y para comprobar que todo se está realizando correctamente.

Los pasos seguidos a continuación están sacado de este interesante post, antiguo pero muy útil. Algunas cosas ya las había experimentado, pero esto es como todo, siempre cogemos cosas de aquí y de allá para montar algo mejor.

Lo primero es comprobar que podemos recrear los ftps guardados en nuestro servidor en nuestra máquina de trabajo mediante un rsync:

$ rsync -avz -e ssh usuario@servidor:directorio_mirrors directorio_local

Si el comando se completa sin problema podremos pasar a la siguiente fase, establecer una sincronización periódica. Para ello necesitamos poder acceder al servidor sin necesidad de que nos pregunte la contraseña del usuario elegido. Para llevar a cabo esta operación debemos crearnos un par de claves mediante el comando:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:x root@cliente
The key's randomart image is:
+--[ RSA 2048]----+
...
+-----------------+

Con este comando se nos han creado dos archivos, dentro de '~/.ssh', 'id_rsa' y 'id_rsa.pub'. Ahora debemos copiar la clave pública al servidor:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@servidor

Con esto ya podemos ejecutar comandos en el servidor.

El problema nos surge cuando queremos hacer que los mirrors en la máquina de prueba sean accesibles mediante apache para comprobar directamente la corrección de las copias. Dado que en el servidor realizamos los mirrors mediante un script en el cron, el propietario de estos archivos sería root. La solución pasará por cambiar el propietario a root antes de realizar la sincronización, para que el uso de red se minimice.

Una primera aproximación a nuestro script de backup sería esta:

# Cambiamos el propietario del directorio 'mirrors' para hacer el rsync
chown -R root.root [directorio_mirrors_local]

# Sincronizamos
# Comprobación de si es domingo para limpiar los archivos borrados
if [ `date +%w` -eq 0 ]; then
rsync -avz -e ssh --delete root@servidor:[directorio_mirrors_servidor] [directorio_mirrors_local] 2>/dev/null >/dev/null
else
rsync -avz -e ssh root@servidor:[directorio_mirrors_servidor] [directorio_mirrors_local] 2>/dev/null >/dev/null
fi

if [ $? != 0 ]
then
# Aquí invocaremos un script que nos envía un correo automáticamente si falla algo
error=1
fi

# Volvemos a dejarlo accesible para el apache
chown -R www-data.www-data /almacen/mirrors

if [ $error = 0 ]
then
# Aquí invocaremos al mismo script pero notificando el éxito
fi

exit 0

El script para notificaciones será motivo de otro artículo, así como la generación de un índice de páginas accesibles localmente para la comprobación del funcionamiento de las mismas.

No hay comentarios:

Publicar un comentario