jueves, 13 de mayo de 2010

Sistema de backups con xdelta

2 comentarios
 
Un sistema de backups es a un entorno informático como la red anticaídas a un equilibrista, nos puede salvar la vida ante un tropezón. Un buen sistema debe permitir recuperar el estado de los datos lo más cercano posible al momento clave ante cualquier desastre, por improbable que parezca. Además debe permitir recuperar datos a una fecha más o menos lejana, sin mayores dificultades.

Para entornos de alta disponibilidad, y con datos muy críticos, la mejor opción sin duda es la replicación de bases de datos en vivo. Pero lo más habitual es que exista una tolerancia de un día, es decir, disponer siempre del backup de la noche anterior es suficiente. En estos casos, se puede optar por un sistema de backups incrementales, o por uno de backups siempre completos. El primero ahorra espacio, pero el segundo facilita una recuperación más rápida y simplifica los procesos de generación del backup. Existe una tercera vía, que es la de los backups completos y rotativos, más el uso de xdelta para ahorrar espacio, y ésa versión menos habitual es la que vamos a exponer aquí

xdelta es un software libre capaz de generar ficheros de diferencias a partir de dos ficheros binarios. También permite regenerar un fichero binario a partir de una versión antigua + un fichero de diferencias . Además se usará rsync para replicar usando poco ancho de banda. Para los usuarios de Debian, su instalación no puede ser más sencilla:

apt-get install xdelta rsync

Para implementar el sistema de backups, necesitamos un mínimo de 3 máquinas: los servidores de bases de datos, el servidor de backups y el servidor de réplicas remotas. El servidor de base de datos (pueden ser varios) y el de backups deben estar en el mismo datacenter, con una conexión LAN entre ellos. El servidor de réplicas remotas debe encontrarse en otra ubicación con una conexión dedicada SDSL o similar. A partir de aquí los pasos son:

1) En el servidor de backups, rotamos a diario 6 copias de seguridad de la semana, manteniendo una completa en daily.0 pero un diff binario respecto a la semanal en el resto.

rm -r daily.5
mv dailiy.4 daily.5
mv dailiy.3 daily.4
mv daily.2. daily.3
mv daily.1 daily.2
mv daily.0 dailiy.1
xdelta delta weekly.0/fichero daily.1/fichero daily.1/fichero.diff
rm daily.1/fichero
mkdir daily.0

2) En el servidor de base de datos, generamos a diario la copia completa en el disco local , y la replicamos sobre un servidor de backups (sobre daily.0)

3) Semanalmente, el servidor de backups convierte una copia diaria en una semanal:

cp -a daily.0 weekly.0

4) También semanalmente, el servidor de réplicas rota y copia las semanales mediante un rsync (cosa que sólo transfiere las diferencias de datos respecto a la semana anterior, en lugar de hacer una copia completa por línea):

rm -r weekly.4
mv weekly.3 weeky.4
mv weekly.2 weekly.3
mv weekly.1 weekly.2
cp -a weekly.0 weekly.1
rsync -av --timeout=180 -e "ssh -p 22" usuario@servidor_backups:/path/a/weekly.0 /path/a/weekly.0


Con este sistema podemos recuperar cualquier copia completa de la última semana, y copias semanales de todo el mes anterior. Si se considera necesario guardar más antiguedad, sólo hay que añadir una rotación mensual en el servidor de réplicas. Si hay problemas en el servidor de datos, podemos recuperar la copia nocturna del día anterior del servidor de backups, y si explotara el datacenter entero, tendríamos los datos recuperables con una máximo de una semana de antiguedad en el servidor de réplicas. Garantías más que suficientes para el 95% de los negocios. Y tus datos, ¿ están así de seguros ?

2 Responses so far.

  1. Resulta muy aconsejable que los nuevos equipos incorporen sistemas de copias de seguridad como el indicado, ya que es la mejor prevención ante una pérdida de datos y un plan básico para la posterior necesidad de la recuperación de datos.

  2. Anónimo says:

    Para recuperar el backup incremental se puede hacer así:

    xdelta patch -p schemas_manual.gz.diff ../../../weekly.0/cliente/schemas_manual.gz schemas_manual_restore.gz

Leave a Reply