Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Imagenes y snapshots: Respaldo de servidores" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
Mi propósito era crear imágenes de todos los servidores del datacenter para que, en caso de cualquier contingencia, levantar un nuevo servidor identico simplemente traspasando la imágen de respaldo hacia ese servidor. Los sistemas estaban instalados usando volumenes lógicos (LVM) por lo que sería mucho más fácil crear imágenes y snapshots de respaldos. En un prinicpio pensé hacer directamente dd sobre los volumenes lógicos pero la imágen se corrompía y en muchos casos no podía volver a recuperarla. Existe la posibilidad de montar el volumen lógico en un directorio y respaldar, usando tar, bzip y esas cosas, sólo los archivos, pero no era mi propósito, ya que para restaurar solamente los archivos, debía tener una partición ya preparada, con el sistma de ficheros, sistema instalado, etc etc. En cambio, con la imágen simplemente hacia un dd para restaurarla, sin tener el sistema de archivos creado, etc.
Por twitter me recomendaron varias opciones. @Apostols me recomendó las herramientas “puppet” y “rlbackup”, mientras que @ssugasti “mondorescue”, pero yo seguia con mi idea de usar directamente “dd”. Debía hacer el mismo procedimiento en mas de 40 servidores, por lo que usar una aplicación “cliente->servidor” no era mi solución. Usar aplicaciones que requieran modo grafico o que requieran mucha interacción con el usuario tampoco me servian, yo necesitaba algo automatizado que pueda dejar corriendo de noche y volver al otro día y encontrar el trabajo hecho.
Leyendo el manual de LVM, especialmente el de lvcreate, encontré la opción “snapshot” que básicamente le toma una “foto” al volumen lógico de origen y crea un nuevo volumen con ese preciso instante en que se hizo el snapshot, de ésta forma la partición original podrá ser actualizara mientras que el snapshot se respalda sin problemas. Luego de eso, el snapshot se elimina y se guarda la imágen. La rutína sería mas o menos asi:
# lvcreate --snapshot /dev/Vol00/var --name var-snap -L100k
# dd if=/dev/Vol00/var-snap of=/backup/var.img
# lvremove -f /dev/Vol00/var-snap
De esta forma, creamos un snapshot llamado “var-snap” en base a la partición (o volumen) /dev/Vol00/var, luego, usando dd, creamos la imágen de dicha partición y la guardamos en /backup. Finalmente eliminamos el snapshot.
Para tener aún más certesa de que todo funcionaría, tambien decidí empaquetar, comprimir y guardar los ficheros, por lo que antes de eliminarla (lvremove) la debo montar y hacer un tar. La rutina quedaría así:
# lvcreate --snapshot /dev/Vol00/var --name var-snap -L100k
# dd if=/dev/Vol00/var-snap of=/backup/var.img
# mount /dev/Vol00/var-snap /mnt
# tar cfjv /bakcup/var.tbz2 /mnt
# umount /mnt
# lvremove -f /dev/Vol00/var-snap
En mi caso, /backup corresponde a un punto de montaje de red NFS.
Mi misión era realizar ésta misma rutina en más de 40 servidores, por lo que necesitaba hacer un script que se paseara por todos los servidores y ejecutara estos comandos.
#!/bin/bash IDENTITYFILE=$HOME/.ssh/id_rsa MACHINES=servidores.list DATE=$(date +%d%m%Y) NFS=/mnt/imagenes/servers/ DIR_SNAPSHOT=/mnt/snapshot for server in $(cat servidores.list); do echo "Respaldando $server ..." ssh -i $IDENTITYFILE $server "lvdisplay" >/tmp/lvdisplay_temp lvdisplay=$(awk ' /LV Name/ { name = $3 } /VG Name/ { print name","$3 } ' /tmp/lvdisplay_temp) for _logicalv in $lvdisplay; do lvname=$(echo $_logicalv |cut -f1 -d ","|cut -f4 -d "/") logicalv=$(echo $_logicalv |cut -f2 -d ",") echo -e "\tVolumen Logico: $lvname" ssh $server "lvcreate --size 100m --snapshot --name $lvname-snap /dev/$logicalv/$lvname" ssh $server "mount /dev/$logicalv/$lvname-snap $DIR_SNAPSHOT" ssh $server "mkdir $NFS$server" ssh $server "tar cfj $NFS$server/snapshot_$lvname-$DATE.tar.bz2 $DIR_SNAPSHOT" ssh $server "umount $DIR_SNAPSHOT" ssh $server "dd if=/dev/$logicalv/$lvname-snap of=$NFS$server/image_$lvname-$DATE.img" ssh $server "lvremove -f /dev/$logicalv/$lvname-snap" echo -e "\tArchivo imagen: $NFS$server/image_$lvname-$DATE.img" echo -e "\tArchivo tarball: $NFS$server/snapshot_$lvname-$DATE.tar.bz2" done done scp /tmp/lvdisplay_temp $server:$NFS$server/lvdisplay
El script trabaja con la salida del comando lvdisplay que entrega una salida con los detalles de cada volumen lógico. Lee un fichero llamado servidores.list y hace un recorrido línea por línea, conectándose a cada servidor y ejecutando las instrucciones necesarias. Para hacer el proceso más eficiente y automatizado es necesario, previamente, copiar todas las claves públicas a cada servidor, para evitar la autentificación.
Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Imagenes y snapshots: Respaldo de servidores" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
febrero 22, 2010 a las 11:46 pm
Interesante!
Saludos Zerial
febrero 23, 2010 a las 8:56 am
Muy buena idea para hacer backups.
Lo que veo de malo es que esos backups no serían incrementales, así que necesitas mucho espacio.
febrero 23, 2010 a las 2:40 pm
Asi es, no es un respaldo incremental por lo que no es recomendable hacerlo muy seguido.
marzo 9, 2010 a las 1:40 pm
Hola compadre tambien podrias hacer una imagen para tenerla de respaldo con
clonzilla que es como el ghost pero esta basado en Linux y es gratis
Saludos
marzo 9, 2010 a las 2:32 pm
@R4C3 F4C3: Hola! Clonezilla necesita reiniciar el servidor, por lo que el servidor dejaria de estar en produccion al momento de crea la imagen
abril 19, 2010 a las 8:22 pm
Hola, muy buena pero podrias escribir la manera como se restablece la imagen…
gracias de antemano.
abril 20, 2010 a las 10:31 pm
@cris: Puedes probar restablecer la imagen usando “dd”. Creas el nuevo volumen logico y cuanto este creado, haces dd desde el respaldo hacia el nuevo volumen.
abril 26, 2010 a las 10:05 pm
usa el http://www.dirvish.org/.. creo snap y luego entras a copiar con dirvish que tiene copias diferenciales.. llevo años usandolo y es lo mejor que hay en copias de seguridad.
Suerte
abril 27, 2010 a las 8:40 pm
@Miki: Gracias por el aporte!
mayo 8, 2010 a las 2:14 pm
ocupa rsnapshot, es para realizar backups completos por medio de rsnapshot y rsync copia todo sin tener problemas, es incremental.
noviembre 5, 2015 a las 10:49 am
Hola, esta super interesante el tema, por favor me puedes confirmar que herramienta utilizaste para codificar la shell que muestras en el post, yo utilizo notepad ++ pero no veo la opción para agregar numeración a las filas.
Gracias de antemano.