SyntaxHighlighter

viernes, 2 de agosto de 2013

Amanda Backup I: Instalación y Configuración

Amanda es una de las soluciones OpenSource (BSD License) de tipo empresarial que puedes utilizar para realizar copias de seguridad de tus servidores.

Una de las características que me hicieron elegir este software frente a otros a la hora de hacer backup de los datos más importantes de mi empresa es que no utilizar ningún tipo de formato propio para almacenar esas copias, es decir, puedes recuperar las copias de seguridad desde otra máquina sin la necesidad de tener instalado/configurado el software, puedes manejar todo el proceso con órdenes estándar del sistema operativo, como tar, mt, cron, etc.
Es un software muy potente comparable a Bacula, por ejemplo, y que tiene una estructura similar: habrá una máquina que hará de servidor de copias de seguridad que atenderá a varios clientes siguiendo una agenda determinada. La instalación y configuración es bastante sencilla, quizás más que la de Bacula, la herramienta

En esta entrada haré un repaso de la instalación y configuración del software en un equipo HP Proliant con una unidad de cinta Ultrium 232 (LTO1) algo antigua, en la que se ejecuta un sistema CentOS 6.

Backup en cintas

Para ejecutar Amanda usando la unidad Ultrium como dispositivo de copia de seguridad  debemos tener instaladas todas las herramientas de sistema que trabajarán de forma subyacente, especialmente mt-st:
yum install mt-st

Comprobamos la unidad de cinta:

[root@host ~]# cat /proc/scsi/scsi 
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: HL-DT-ST Model: CD-ROM GCR-8486B Rev: 2.00
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi3 Channel: 00 Id: 03 Lun: 00
  Vendor: HP       Model: Ultrium 1-SCSI   Rev: P61D
  Type:   Sequential-Access                ANSI  SCSI revision: 03
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: BENQ     Model: DVD DD EW162I    Rev: 47F9
  Type:   CD-ROM 
[root@host ~]# dmesg | grep -i tape
st 3:0:3:0: Attached scsi tape st0
osst :I: Tape driver with OnStream support version 0.99.4


Tenemos la unidad ultrium en st0. Aquí tenemos una de las primeras curiosidades con respecto a la gestión de dispositivos secuenciales: las interfaces /dev/st0 y /dev/nst0 ser refieren al mismo dispositivo, la diferencia es que si usamos st0 el sistema considerará el dispositivo como "rebobinable" en cambio si usamos nst0 accederemos a un dispositivo "no rebobinable". La diferencia es que después de cualquier operación sobre st0 la cinta se rebobinará, por lo tanto toda operación sobre la cinta comenzará en el bloque 0 lista para una operación de "rewrite". En el dispositivo nst0, después de una operación la cinta estará lista para una operación de "append" sin destruir los datos grabados hasta el momento.

Comprobaré que la cinta funciona correctamente, por ejemplo, extrayendo información sobre la misma o extrayendo la unidad:

mt -f /dev/nst0 offline # Extrae la cinta

[amandabackup@host root]$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=1, partition=0.
Tape block size 0 bytes. Density code 0x40 (DLT1 40 GB, or Ultrium).
Soft error count since last status=0
General status bits on (1010000):
 ONLINE IM_REP_EN


Al intentar ejecutar otras órdenes en las que si se accede a la cinta como mt -f /dev/nst0 tell, que dice el bloque en que se encuentra la cinta, da un error de entrada salida. Para solucionarlo se han de ejecutar estas dos órdenes: Más información sobre la configuración de las cintas Ultrium en los manuales de HP.

mt -f /dev/nst0 stsetoptions scsi2logical # Hace que el driver st use direccionamiento lógico
mt -f /dev/nst0 setblk 0                  # Establece la lectura de bloques de tamaño variable. Ver enlace de Info anterior.

Instalación y configuración de Amanda

Server: Instalación


Una vez comprobado el funcionamiento de la unidad de cinta continuamos con la instalación y configuración de Amanda en CentOS. Vamos a configurar Amanda para que realice copias de seguridad del mismo servidor (local), así que necesitamos instalar el software de cliente y de servidor. 

yum install amanda amanda-server amanda-client

La instalación en CentOS crea el usuario amandabackup que será desde el que realizaremos la mayoría de las interacciones con Amanda. También crea los grupos disk y tape en los que incluirá al usuario amandabackup, estos grupos tendrán permisos para acceder a varios directorios, dispositivos y ficheros de configuración necesarios. También crea archivos de configuración que tendremos que modificar. En el directorio /etc/amanda y /etc/amanda/DailySet1 tenemos también plantillas de archivos de configuración.
Amanda se ejecuta vía xinetd, así que tendremos que configurar el servicio. Aunque la instalación ha creado el archivo en /etc/xinetd.d/amanda sustituimos por el archivo xinetd.amandaserver que encontramos en el directorio /etc/amanda/DailySet1/. Este archivo define los servicios de Amanda que estarán activos en el servidor, estos servicios vienen determinados por el parámetro server_args.

  • amdump. Es el servicio (máquina cliente y servidor) que se encarga de realizar las copias de seguridad.
  • amindexd. Es el servicio (servidor) que mantiene el catálogo de Amanda. Muchas herramientas de Amanda se comunican con este servicio. Es necesario para ejecutar amrecover, la herramienta interactiva de recuperación de datos, es muy similar a un servicio de FTP que es accedido por la herramienta amrecover.
  • amidxtaped. Servicio (servidor) que se comunica con la unidad de cinta.
Archivo /etc/xinetd.d/amanda

# default: on
#
# description: Amanda services for Amanda server and client.
#
service amanda
{
        disable         = no
        flags           = IPv6
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = amandabackup
        group           = disk
        groups          = yes
        server          = /usr/lib64/amanda/amandad
        server_args     = -auth=bsdtcp amdump amindexd amidxtaped
}

Siempre que hagamos algún cambio en este archivo debemos recargar xinetd con la orden service xinetd reload.

Server: Configuración de los trabajos de copia

La configuración de los trabajos de copia de seguridad se hace desde los subdirectorios dentro de /etc/amanda. Por ejemplo, hemos copiado la configuración por defecto que incluye la instalación al directorio DailySet1. Dentro de este directorio establecemos todos los parámetros para realizar las copias de seguridad. Hay que tener en cuenta que para casi cualquier operación que hagamos con Amanda tendremos que especificar este identificador.
El fichero principal es el fichero amanda.conf dentro del directorio de configuración. Los cambios más importantes son:
mailto= "admin@email.es"     # Email que recibirá las notificaciones. Hay que modificar .mailrc en /var/lib/amanda/ para que funcione. Después se explica.
dumpuser="amandabackup"     # Usuario que se utiliza para ejecutar dump en el cliente.

dumpcycle 1 weeks           # Asegura al menos haya una copia completa cada 1 semana
runspercycle 4              # Cuantas veces se lanza el dump cada dumpcycle
tapecycle 4 tapes           # Número de cintas que se conservan antes de empezar a reciclar.

runtapes 1                  # Número de cintas que se permiten para un trabajo de copia. Si una copia no cabe en una cinta debemos subirlo. Sólo se usan las necesarias.
#tpchanger "scrtip"         # Script que se encarga de cambiar cintas. Como cambiaremos las cintas manualmente comentamos.
tapedev "tape:/dev/nts0"    # Dispositivo que se usa para realizar las copias.
tapetype HP-ULTRIUM-LTO1    # Tipo de cinta. HP-ULTRIUM-LTO1 debe estar definido como tipo de cinta en la sección ''define tapetype''. Ver más adelante.
labelstr "^DailySet1-[0-9][0-9]*$"     # Expresión regular que restringe la etiqueta de las cintas que se aceptan. Todas las cintas ser etiquetadas según este patrón.

#holdingdisk  hd1 {         # Discos buffer en los que se hará un dump previo, después se copiará a la cinta. Desactivado (comentado) por problemas de espacio en el servidor.
#...
#}

infofile "/etc/amanda/DailySet1/curinfo"    # database DIRECTORY
logdir   "/etc/amanda/DailySet1"            # log directory
indexdir "/etc/amanda/DailySet1/index"              # index directory
tapelist "/etc/amanda/DailySet1/tapelist"   # list of used tapes

define tapetype HP-ULTRIUM-LTO1 {          # Definición de la cinta. Extraída del enlace http://tirpitz.iat.sfu.ca/wiki/index.php?title=Backups_with_AMANDA
    comment "LTO-1. Añadido por Emilio"    # Amanda puede examinar la cinta para obtener su definición usando la orden 'amtapetype -f /dev/nst0'
    length 96512 mbytes
    filemark 0 kbytes
    speed 13611 kps
}

# A continuación vienen las definiciones de los tipos de dumps estándares. En el fichero se comentan todas las opciones posibles y se pueden crear nuevos o modificar existentes, 
# que después habrá que especificar en el fichero disklist. Estas definiciones se pueden anidar, como se ve en el ejemplo. Estamos usando comp-user-tar, cuya definición es:
define dumptype global {
    comment "Global definitions"
    # This is quite useful for setting global parameters, so you don't have
    # to type them everywhere.  All dumptype definitions in this sample file
    # do include these definitions, either directly or indirectly.
    # There's nothing special about the name `global'; if you create any
    # dumptype that does not contain the word `global' or the name of any
    # other dumptype that contains it, these definitions won't apply.
    # Note that these definitions may be overridden in other
    # dumptypes, if the redefinitions appear *after* the `global'
    # dumptype name.
    # You may want to use this for globally enabling or disabling
    # indexing, recording, etc.  Some examples:
    # index yes
    # record no
    # split_diskbuffer "/raid/amanda"
    # fallback_splitsize 64m
    auth "bsdtcp" # Añadido para forzar la autenticación bsdtcp
}


define dumptype root-tar {
    global
    program "GNUTAR"
    comment "root partitions dumped with tar"
    compress none
    index
#   exclude list "/etc/amanda/exclude.gtar"
    priority low
}
define dumptype user-tar {
    root-tar
    comment "user partitions dumped with tar"
    priority medium
}
define dumptype comp-user-tar {
    user-tar
    compress client fast
}

...
...
Puede que al hacer un amcheck <ID> no se pueda conectar al cliente dando este error:

[amandabackup@host root]$ amcheck DailySet1
Amanda Tape Server Host Check
-----------------------------
read label `DailySet1-04', date `20130314070502'.
Tape with label DailySet1-04 is still active and cannot be overwritten.
       (expecting tape DailySet1-01 or a new tape)
Server check took 0.096 seconds

Amanda Backup Client Hosts Check
--------------------------------
WARNING: host: selfcheck request failed: timeout waiting for ACK
Client check: 1 host checked in 30.036 seconds.  1 problem found.

(brought to you by Amanda 2.6.1p2)
Se soluciona especificando en amanda.conf el tipo de autenticación en la definición dumptype. Yo lo he añadido en la definición de dumptype global, como aparece en el enlace.

Ahora debemos indicar a Amanda las máquinas a las que tendrá que acceder, los datos que deberá respaldar y el tipo de dump que realizará para cada uno. Esto se hace mediante el archivo disklist dentro del directorio /etc/amanda/DailySet1:

host  /var/backups comp-user-tar
host  /etc   comp-user-tar

Antes de poder hacer copias de seguridad debemos etiquetar las cintas para que sean reconocidas por amanda. Para ello introducimos una por una las cintas y las etiquetamos de la siguiente forma, donde XX es el número de cinta:
amlabel DailySet1 DailySet1-XX

Cada vez que etiquetemos una cinta se añadirá al archivo /etc/amanda/[id]/tapelist. Se puede listar este fichero para ver las cintas.
Para comprobar que funciona podemos ejecutar:
[amandabackup@host root]$ amcheck DailySet1
Amanda Tape Server Host Check
-----------------------------
read label `DailySet1-02', date `20130312070502'.
Tape with label DailySet1-02 is still active and cannot be overwritten.
       (expecting a new tape)
WARNING: tapecycle (4) <= runspercycle (4).
Server check took 0.097 seconds

Amanda Backup Client Hosts Check
--------------------------------
Client check: 1 host checked in 2.135 seconds.  0 problems found.

OJO! Esta salida se obtiene una vez configurado todo, la salida real en esta etapa de configuración debería ser similar, lo importante es que no aparezcan problemas en el resultado.

Server: Cron

En el directorio /etc/amanda/ hay un ejemplo de cron. Se puede modificar el cron del usuario amandabackup para programar las copias. Cambiarse al usuario amandabackup y hacer un crontab -e. El contenido actual (pruebas) es el siguiente:

#Amanda Backup
00 07 * * 1-5    /usr/sbin/amcheck -m DailySet1
05 07 * * 1-4    /usr/sbin/amdump DailySet1

Server: Notificaciones por email

Para que funcionen las notificaciones de las copias de seguridad hay que configurar los parámetros de envío creando el archivo /var/lib/amanda/.mailrc:

set smtp=[smtp server]
set from=[admin@email.es]

Client

Primero debemos configurar el servicio amanda en xinetd. Esto ya lo hemos hecho ya que el servidor también es el cliente. Permitir al servidor que acceda al servicio amanda. Para esto se modifica el fichero /var/lib/amanda/.amandahosts:

# host user services. 
# root en el cliente accederá a los servicios amindexdx y amidxtaped para recuperar ficheros.
# amandabackup accederá al servicio amdump
server1 root amindexd amidxtaped
server1 amandabackup amdump

En un segundo post haré un repaso por las órdenes más útiles para hacer copias de seguridad, restauraciones, extraer información del catálogo... Además del manejo de las copias realizadas con herramientas del sistema como mt o tar.

1 comentario:

Unknown dijo...

Buenos dias me gustaria saber si me podrias apoyar en una implementacion de amanda tedejo mi correo electronico : fbustamante@softtoolsit.com

Saludos cordiales
Atte. Francisco