Mundo Pau

septiembre 1, 2009

Hacer copias de seguridad en linux

Filed under: Informática — Perdigue @ 16:04

1. Introducción

Hoy día, la utilización de herramientas de backup es imprescindible en cualquier empresa medianamente decente. En momentos puntuales nos pueden salvar de quebraderos de cabeza en infinitas situaciones. Un ejemplo de la importancia de estas herramientas se pudo ver el 15 de febrero del año 2005. El edificio Windsor de Madrid sufrió un enorme incendio que produjo grandes e irreparables daños. Todas las empresas que trabajaban en este edificio perdieron todos sus datos, pero sólo aquellas que utilizaron buenas políticas de backup pudieron recuperarse de esta catástrofe en un periodo corto.

Las políticas de backup son muy importantes en cualquier organización o institución y son una de las piezas que debe tener en consideración cualquier administrador de red. Una buena política de backup tiene que dar respuesta a las siguiente preguntas: ¿Qué datos son importantes para la institución?, ¿Cuál es la periodicidad de cambio de dichos datos?, ¿En qué medios de almacenamiento vamos a guardarlos? y ¿Dónde debe estar situada la copia de seguridad?.

Por tanto, cada institución tiene que analizar e identificar que información se considera primordial para ser asegurada (base de datos, repositorios de código fuente, etc..), conocer la frecuencia de modificación que permita al administrador de la red designar la periodicidad con las que se realizaran las copias: diaria, semanal o mensual y el tipo de ella: incremental, diferencial o completa. Unido al tipo y periodicidad se debe elegir el dispositivo de almacenamiento externo más adecuado para cada copia: disco duro, cd-rom, cinta, etc.. y seleccionar la situación donde se depositarán dichas copias.

Muchas de las organizaciones obvian la última pregunta, y esto supone un gran riesgo. Vamos a poner varios ejemplos:

  • Imaginaos una empresa que guarde sus copias de seguridad en la misma máquina donde se encuentra la información que acaba de asegurar. Si la máquina sufriera cualquier problema la copia de seguridad también la perderíamos.
  • Otro ejemplo de una mala política es mantener la copia de seguridad en las mismas instalaciones donde se encuentra la información asegurada. Aunque es mejor que la anterior, puede ocurrir cualquier desastre en esas instalaciones que haga que perdamos nuestras copias de seguridad.

Lo más adecuado, es mantener como mínimo dos copias de seguridad, situadas por ejemplo en la propia instalación de la organización y otra a una distancia mínima de unos 50 Km. Con esta medida, lo que conseguimos es reducir la probabilidad de que nuestra organización pierda por completo la información, ya que si ocurre alguna catástrofe en uno de las dos instalaciones siempre tenemos la información replicada en otro lugar de donde se produjo el incidente.

En el mercado, existe un gran número de herramientas de backup, hoy veremos una de ellas, se llama backup-manager. Es una herramienta con licencia GNU, que nos proporciona un gran número de posibilidades en la elaboración de estrategias de copias de seguridad

2. Backup Manager

Backup-manager, es una herramienta bastante completa y fácil de configurar, nos permite realizar copias de seguridad de sistema de ficheros locales y remotos (ssh), base de datos Mysql y repositorios Subversion pudiendo elegir entre diferentes algoritmos de compresión, incluso nos da la posibilidad de poder realizar otro tipo de copias que no cubran las anteriores lo que han llamando Generic Methods.

Esta herramienta, nos ofrece la posibilidad de realizar copias incrementales y completas, estás últimas realizadas diaria, semanal o mensualmente. También se le puede indicar que las copias tengan un tiempo de vida (TTL), a partir del cual dicha copia será eliminada del sistema. Una vez realizada el backup del sistema, backup-manager ofrece diferentes métodos de replicación de la copia que va desde ssh, rsync o ftp, pasando por la grabación en dvd-cdrom hasta poder subirlo a S3 (Simple Storage Service) de Amazon.

Además, backup-manager es capaz de ejecutar un script pre y post backup, utilizado por ejemplo para montaje y desmontaje de sistema de ficheros. De cualquier forma, todas las operaciones que se realicen con backup-manager podrán ser almacenadas a través del syslog.

Por último indicar que backup-manager permite ejecutar paralelamente varios procesos backup con diferentes ficheros de configuración.

Para ver todas las posibilidades que nos ofrece esta herramienta, pondremos un ejemplo de arquitectura en el que se utilicen la gran mayoría de las opciones que nos ofrece.

2.1 Instalación

Una vez que nos hayamos descargado la versión 0.7.5 desde la Web de Backup Manager (www.backup-manager.org), procedemos a instalarlo en nuestro sistema.

Descomprimimos el archivo:

[user@adictos user] tar -xvf backup-manager-0.7.5.tar.gz

Accedemos a la carpeta backup-manager-0.7.5 creada con la descompresión:

[user@adictos user] cd backup-manager-0.7.5

Para poder instalar backup-manager necesitamos realizar la instalación con el usuario root:

[user@adictos backup-manager-0.7.5] su root

A continuación procedemos a instalar backup-manager:

[root@adictos backup-manager-0.7.5] make install

Copiamos el directorio BackupManager en el directorio donde tengamos instalado perl, en nuestro caso /usr/share/perl5/ (necesario para ejecutar los scripts de backup-manager).

[root@adictos backup-manager-0.7.5] cp BackupManager /usr/share/perl5/

Y por último, copiamos el archivo backup-manager.conf.tpl al directorio /etc, donde se sitúan los fichero de configuración del sistema:

[root@adictos backup-manager-0.7.5] cp /usr/share/backup-manager/backup-manager.conf.tpl /etc/backup-manager.conf

Por fin tendremos nuestra herramienta de backup instalada en nuestro sistema, ahora debemos configurarla.

2.2 Configuración

Como hemos comentado anteriormente, vamos a proponer un arquitectura de ejemplo en la que podamos utilizar la mayoría de las características que nos proporciona esta herramienta de backup. Como se puede ver en el gráfico, nuestra organización ficticia dispone de un conjunto de máquinas de diferentes tipos (Servidor de base de datos, Servidor Web, repositorio SVN…) del que desea realizar copias de seguridad.

Entre esas máquinas, se encuentra el repositorio de control de versiones Subversion utilizado por nuestro departamento de desarrollo. La frecuencia de cambios en este servidor es continua por lo que se desea realizar una copia completa todas los meses, unido con copias incrementales cada uno de los días del mes, excepto los fines de semana ya que el equipo de desarrollo no trabaja. También se desea asegurar el entorno de producción de dicha organización, para ello se deben realizar backup del Servidor Web, Servidor de Aplicaciones y los esquemas almacenados en el Servidor de base de datos. La política que se ha decido con estas máquinas es realizar copias completas semanales del Servidor Web y de Aplicaciones (el equipo de desarrollo sólo realiza pases los miércoles) y la base de datos.

Finalmente, las copias elaboradas además de almacenarse en nuestro sistema de backup lo harán también en un sistema espejo situado en otra localización y en el servicio de almacenamiento proporcionado por Amazon (Amazon S3).

En este tipo de estructura son necesarios varios ficheros de configuración debido a la existencia de diferentes tipos y frecuencia de lanzamiento para realizar las copias. La herramienta que podemos utilizar para ejecutar cada unos de las copias con su correspondiente fichero de configuración es cron.

Conocido el entorno y que es lo que se quiere hacer, se necesitan definir dos ficheros de configuración, el primero encargado de realizar copia del repositorio Subversión, el segundo sobre el Servidor Web y de Aplicaciones y el servidor de base de datos.

2.2.1 Configuración Global

En este apartado veremos la configuración que se debe establecer en todos los ficheros que se creen debido a que son acciones realizadas por todos. En concreto debemos configurar cierto parámetros (almacenamiento de la copia en el sistema de archivo local, …) y la subida del backup en el sistema espejo y en Amazon S3.

#Directorio donde backup-manager depositará los ficheros que genere. Sino existe se creará
#con el usuario:grupo root:root, esto puede cambiarse a través de las variables
#BM_REPOSITORY_USER y BM_REPOSITORY_GROUP
BM_REPOSITORY_ROOT=”/home/backup/repositorio“
#Indicamos a backup-manager que queremos personalizar los permisos de esos fichero de lo
#contrario todos los archivos serán creados como root:root
BM_REPOSITORY_SECURE=”true”
#Propietario que establecerá al archivo y directorio
BM_REPOSITORY_USER=”backup”
#Grupo que se establecerá al archivo y directorio
BM_REPOSITORY_GROUP=”backup”
BM_REPOSITORY_CHMOD=”770”
BM_ARCHIVE_CHMOD=”660”
#Indicamos a backup-manager que deseamos limpiar las copias duplicadas. Cuando backup-manager genera
#una nueva copia, todas las copias anteriores idénticas a la generada se sustituirán por un enlace simbólico a
#la nueva copia.
BM_ARCHIVE_PURGEDUPS=”true”
#Con esta variable añadimos un prefijo al nombre de los archivos generados. En nuestro caso situaremos el nombre de la máquina.
BM_ARCHIVE_PREFIX=”$HOSTNAME”
#Insertamos los métodos que vamos a utilizar para subir las copias
BM_UPLOAD_METHOD=”SSH S3”
#Indicamos al backup-manager las máquinas donde se hará una copia por el método de subida SSH
#de los archivos generados. En ella se puede establecer una lista de host separados por espacios.
BM_UPLOAD_SSH_HOSTS=”bruce”
#Path absoluto donde almacenaremos las copias en los host por el método de subida SSH indicados anteriormente.
BM_UPLOAD_SSH_DESTINATION=”/home/backup/repositorio/”
#Usuario con el que nos conectaremos para realizar la copia en las máquinas remotas.
BM_UPLOAD_SSH_USER=”backup”
#Path donde se encuentra la clave privada para autenticarnos sobre la máquinas remotas.
(Previamente debemos haber añadido a las máquinas remotas la clave pública.)
BM_UPLOAD_SSH_KEY=”/home/backup/.ssh/id_ssa”
#Con esta variable indicaremos el puerto de conexión ssh.
BM_UPLOAD_SSH_PORT=”22”
#El comportamiento es idéntico al descrito para la variable BM_ARCHIVE_PURGEDUPS pero aplicado sobre los archivos remotos.
BM_UPLOAD_SSH_PURGE=”true”
#Indicamos el almacén donde se almacenará la copia. Si no existe la creará como almacén privado.
BM_UPLOAD_S3_DESTINATION=”backup”
#Insertamos la clave de acceso proporcionada por amazon para subir las copias.
BM_UPLOAD_S3_ACCESS_KEY=”clave_acceso”
#Insertamos la clave necesaria para escribir en nuestro almacén.
BM_UPLOAD_S3_SECRET_KEY=”clave_secreta”
#Indicamos si queremos que backup-manager elimine copias antiguas.
BM_UPLOAD_S3_PURGE=”true”
#Activamos la generación de mensajes en el syslog
BM_LOGGER=”true”
#Indicamos cual es la aplicación que genera el mensaje
BM_LOGGER_FACILITY=”cron”

2.2.2 Configuración backup Subversion (backup-manager-subversion.conf)

Ahora veremos las opciones que debemos configurar para poder realizar backup`s de nuestro repositorio Subversion. Sabemos que el método de backup es del tipo incremental que vamos a lanzar todos los días de la semana excepto los sábados y domingos. Además el periodo que vamos a establecer para que backup-manager limpie de copias antiguas será de unos 31 días, debido a que la copia completa es mensual. El lanzamiento de esta tarea se hará como veremos más adelante con la herramienta cron.

Al establecer para el repositorio de subversion una política incremental no podemos utilizar el método específico que backup-manager dispone para este tipo de repositorio de código fuente. La razón reside en que el método de backup “svn “ utiliza la opción “dump“ del comando “svnadmin“ impidiendo que podamos realizar copias incrementales. De cualquier modo, os enseñaremos ha utilizar los dos modos:

2.2.3 Configuración con el método svn

#Esta variable es utilizada por backup-manager si tenemos activada BM_ARCHIVE_PURGEDUPS. Le
#indica el número de días a partir de la fecha actual que puede estar almacenado una copia antigua. En las
#copias completas solo se eliminará si existe una copia completa más reciente si no es así se seguirá
#manteniendo hasta que backup-manager genere una.
BM_ARCHIVE_TTL=”31”
#Establecemos el tipo de copia que vamos a realizar (tarball, tarball-incremental, mysql o svn)
BM_ARCHIVE_METHOD=”svn”
#Indicamos el formato de los nombres de los ficheros generados (long o short).
Long se crea el fichero con el path absoluto o short con solo el nombre.
BM_TARBALL_NAMEFORMAT=”long”
#Esta variable indica cada cuanto tiempo se realiza una copia completa (weekly o monthly).
BM_TARBALLINC_MASTERDATETYPE=”monthly”
#Indicamos el día que se realiza la copia completa.
BM_TARBALLINC_MASTERDATEVALUE=”1”
#Path donde se encuentra nuestro repositorio de subversion. En nuestro caso al estar en una máquina
#distinta donde realizamos el backup debemos montar con samba o nfs el directorio donde se encuentra el
#respositorio. Para ello utilizamos las variables BM_PRE_BACKUP_COMMAND y
#BM_POST_BACKUP_COMMAND
BM_SVN_REPOSITORIES=”/var/lib/svn/repositories/backup-manager”
#Algoritmo de compresión que vamos a utilizar (bzip2 o gzip)
BM_SVN_COMPRESSWITH=”bzip2”
#Script que monta en local el repositorio de subversion.
BM_PRE_BACKUP_COMMAND=”/home/backup/scripts/preSubversion.sh”
#Script que desmonta el repositorio de subversion.
BM_PRE_BACKUP_COMMAND=”/home/backup/scripts/postSubversion.sh”

El script que lanza backup-manager antes de realizar el backup sería:

#!/bin/bash
#Montamos a través de samba el repositorio de subversion situado en la máquina marc
mount -t smbfs -o username=backup,password=xxxx //marc/subversion /var/lib/svn/repositories/backup-manager

El script que lanza backup-manager despues de realizar el backup sería:

#!/bin/bash
#Desmontamos el repositorios
umount /var/lib/svn/repositories/backup-manager

2.2.4 Configuración con el método tarball-incremental

#Esta variable es utilizada por backup-manager si tenemos activada BM_ARCHIVE_PURGEDUPS. Le
#indica el número de días a partir de la fecha actual que puede estar almacenado una copia antigua. En las
#copias completas solo se eliminará si existe una copia completa más reciente si no es así se seguirá
#manteniendo hasta que backup-manager genere una.
BM_ARCHIVE_TTL=”31”
#Establecemos el tipo de copia que vamos a realizar (tarball, tarball-incremental, mysql o svn)
BM_ARCHIVE_METHOD=”tarball-incremental”
#Indicamos el formato de los nombres de los ficheros generados (long o short).
Long se crea el fichero con el path absoluto o short con solo el nombre.
BM_TARBALL_NAMEFORMAT=”long”
#El formato con el que generaremos el fichero. (tar, tar.gz, tar.bz2, tar.lz, zip o dar).
Es importante que el compresor lo tengamos instalado en nuestro sistema de lo contrario no funcionará.
BM_TARBALL_FILETYPE=”tar.bz2”
#Indicamos cual es el tamaño máximo de los ficheros que puede generar backup-manager. Si lo supera los partirá.
BM_TARBALL_SLICESIZE=”1000M”
#Con esto backup-manager si se activa sustituye todos los enlaces simbólicos por el archivo al que apunta.
Tenemos que tener mucho cuidado con esta opción ya que se pueden generar ciclos, entrando en un bluce infinito.
BM_TARBALL_DUMPSYMLINKS=”false”
#Esta variable indica cada cuanto tiempo se realiza una copia completa (weekly o monthly).
BM_TARBALLINC_MASTERDATETYPE=”monthly”
#Indicamos el día que se realiza la copia completa.
BM_TARBALLINC_MASTERDATEVALUE=”1”
#Establecemos la lista de directorios que deseamos copiar.
BM_TARBALL_TARGETS[0]=”/var/lib/svn/repositories/backup-manager”
#Lista negra de los directorios y archivos que no se van a copiar en el backup.
BM_TARBALL_BLACKLIST=”/tmp”
#Script que monta en local el repositorio de subversion.
BM_PRE_BACKUP_COMMAND=”/home/backup/scripts/preSubversion.sh”
#Script que desmonta el repositorio de subversion.
BM_PRE_BACKUP_COMMAND=”/home/backup/scripts/postSubversion.sh”

2.2.5 Configuración backup: servidor web, servidor aplicaciones y base de datos. (backup-manager-servidores.conf)

Como podéis ver, se ha utilizado un único fichero para realizar el backup de estos tres servidores. En él se ha indicado que se deben lanzar scripts de montaje y desmontaje de los directorios donde se encuentran el servidor web y de aplicaciones y que las copias son completas con una frecuencia semanal y un TTL de 7 días. Una alternativa a esta configuración, consistiría en realizar la copia del servidor web y aplicación a través de ssh. El problema es que esta solución es más complicada y nos obliga a crear varios ficheros de configuración

#Esta variable es utilizada por backup-manager si tenemos activada BM_ARCHIVE_PURGEDUPS. Le
#indica el número de días a partir de la fecha actual que puede estar almacenado una copia antigua. En las
#copias completas solo se eliminará si existe una copia completa más reciente si no es así se seguirá
#manteniendo hasta que backup-manager genere una.
BM_ARCHIVE_TTL=”7”
#Establecemos el tipo de copia que vamos a realizar (tarball, tarball-incremental, mysql o svn)
BM_ARCHIVE_METHOD=”tarball”
#Indicamos el formato de los nombres de los ficheros generados (long o short).
Long se creá el fichero con el path absoluto o short con solo el nombre.
BM_TARBALL_NAMEFORMAT=”long”
#El formato con el que generaremos el fichero. (tar, tar.gz, tar.bz2, tar.lz, zip o dar).
Es importante que el compresor lo tengamos instalado en nuestro sistema de lo contrario no funcionará.
BM_TARBALL_FILETYPE=”tar.bz2”
#Indicamos cual es el tamaño máximo de los ficheros que puede generar backup-manager. Si lo supera los partirá.
BM_TARBALL_SLICESIZE=”1000M”
#Con esto backup-manager si se activa sustituye todos los enlaces simbólicos por el archivo al que apunta.
Tenemos que tener mucho cuidado con esta opción ya que se pueden generar ciclos, entrando en un bluce infinito.
BM_TARBALL_DUMPSYMLINKS=”false”
#Esta variable indica cada cuanto tiempo se realiza una copia completa (weekly o monthly).
BM_TARBALLINC_MASTERDATETYPE=”weekly”
#Indicamos el día que se realiza la copia completa.
BM_TARBALLINC_MASTERDATEVALUE=”1”
#Establecemos la lista de directorios que deseamos copiar.
BM_TARBALL_TARGETS[0]=”/home/backup/mount/oliver”
BM_TARBALL_TARGETS[1]=”/home/backup/mount/tom”
#Lista de negra de los directorios y archivos que no se van a copiar en el backup.
BM_TARBALL_BLACKLIST=”/tmp”
#Script que monta en local el repositorio de subversion.
BM_PRE_BACKUP_COMMAND=”/home/backup/scripts/preMountSevers.sh”
#Script que desmonta el repositorio de subversion.
BM_PRE_BACKUP_COMMAND=”/home/backup/scripts/postMountSevers.sh”
#Ponemos la lista de la base de datos que queremos hacer una copia. Con el valor “__ALL__”
#realizaremos una copia completa.
BM_MYSQL_DATABASES=”__ALL__”
BM_MYSQL_SAFEDUMPS=”true”
#Usuario de conexión para realizar el dump
BM_MYSQL_ADMINLOGIN=”backup”
#Máquina donde se encuentra la base de datos.
BM_MYSQL_HOST=”benji”
BM_MYSQL_PORT=”3306”
BM_MYSQL_FILETYPE=”bzip2”

El script que lanza backup-manager antes de realizar el backup sería:

#!/bin/bash
#Montamos a través de samba el servidor web y de aplicaciones.
mount -t smbfs -o username=backup,password=xxxx //oliver/apache /home/backup/mount/oliver/apache
mount -t smbfs -o username=backup,password=xxxx //tom/jboss /home/backup/mount/tom/jboss

El script que lanza backup-manager despues de realizar el backup sería:

#!/bin/bash
#Desmontamos los servidores
umount /home/backup/mount/oliver/apache
umount /home/backup/mount/tom/jboss

2.3 Configuración Cron

Finalizados los ficheros de configuración procedemos a configurar cron. Para el fichero que hace el backup del repositorio subversion debemos lanzar todos los días de la semana excepto los fines de semana el comando “backup-manager -c /etc/backup-manager-subversion.conf” con el usuario “root”. Mientras que para la copia de los servidores web, aplicación y base de datos se debe lanzar los lunes de cada semana el comando “backup-manager -c /etc/backup-manager-servidores.conf” con el usuario “root”.

Ejecutamos el comando “crontab -e”, añadimos las siguientes líneas y guardamos el fichero:

#todos los días de la semana excepto los sábados y domingos a la 1 de la mañana
0 1 * * 1-5 backup-manager -c /etc/backup-manager-subversion.conf
#todos los lunes a las 4 de la mañana
0 3 * * 1 backup-manager -c /etc/backup-manager-servidores.conf
Fuente: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=backupmanager
Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: