Bacula y los 1000 y un Servidores

Como primer post para entrenar blog voy a poner como montar un lindo bacula para hacer backup de todo un data center :P y bueno aca esta… suerte y que le sirva a alguien…?

Instalación y Configuración de Bacula.

Propósito
El fin de este documento es tener un procedimiento standard de instalación, configuración y puesta en marcha de un sistema automatizado de backup, con el cual se pueda tener centralizada toda la información de la empresa sobre una infraestructura de servidores especializados para esta tarea.
Los requisitos de este sistema son:
1.Gestión automática de Backups.
2.Aprovechamiento eficiente del espacio en disco.
3.Bajo consumo de CPU durante la realización del backup o la restauración.
4.Facilidad de implementación sobre la plataforma ya funcionando.
5.Eficiente uso de la conexión de red para transferir la información.

Este documento describe el procedimiento para la instalación y configuración de la herramienta bacula(disponible en http://www.bacula.org/) en un sistema debian etch 4.0r2 utilizando los repositorios oficiales de debian y sobre instalaciones limpias sin previas configuraciones.

¿Que es bacula?

Bacula es una colección de herramientas de respaldo muy amplia, capaces de cubrir eficientemente las necesidades de respaldo de equipos bajo redes IP. Se basa en una arquitectura cliente/servidor que resulta muy eficaz y fácil de manejar, dada la amplia gama de funciones y características que brinda; copiar y restaurar ficheros dañados o perdidos. Además, debido a su desarrollo y estructura modular, Bacula se adapta tanto al uso personal como profesional, para parques de ordenadores muy grandes.

Elementos
Los elementos necesarios para que Bacula funcione son:
Bacula-director
Es el demonio que gestiona la lógica de los procesos de backup y los demás servicios. El servidor de la base de datos debe estar accesible desde la máquina que ejecuta este demonio (o estar en ella misma y escuchar en localhost).
En el archivo de configuración de este demonio se especifica dónde y cómo acceder al resto de demonios y recursos, la contraseña para el acceso mediante bacula-console y los trabajos o jobs.

Bacula-storage daemon
Este demonio es el encargado de manejar los dispositivo de almacenamiento; esto exige que este demonio esté instalado en la máquina que posea la conexión física a los dispositivos de almacenamiento, tales como: discos locales, grabadoras de CD o DVD, unidades de cinta, volumenes NAS o SAN, autocargadores o librerías de cinta.
El fichero de configuración de este servicio define tanto los dispositivos de almacenamiento que maneja, como que directores pueden utilizarlo.

Bacula-file daemon
Mediante este demonio Bacula obtiene los ficheros que necesita respaldar, éste es el componente que hay que instalar en las máquinas que necesiten respaldo. Realiza la misma función que los “agentes” en otros sistemas de backup.
Este archivo de configuración es el más simple de todos, símplemente especifica qué directores pueden realizarle peticiones.
Para poder interactuar con el servicio de backup, necesitaremos un cliente:
Bacula-console

Todo el conjunto de elementos que forman Bacula trabaja en sincronía y es totalmente compatible con bases de datos como MySQL, SQLite y PostgreSQL.
Arquitectura de Bacula

sin-nombre-5.jpg

Características Básicas de Bacula

1.El almacenamiento y la recuperación de los datos se realiza a través de una sencilla aplicación, configurable y de fácil manejo.
2.Las copias de seguridad (backups) se realizan a gran velocidad, permitiendo al usuario seguir trabajando mientras se están ejecutando.
3.Los backups son únicos e incrementales: la información sólo se guarda una vez (si la herramienta detecta que los archivos que se quieren copiar ya están almacenados no los transmite de nuevo) y una vez hecha una copia de un archivo, las siguientes que se realicen sólo guardarán los cambios realizados sobre la copia inmediatamente anterior. De esta manera se optimizan la velocidad y el espacio de almacenamiento.
4.Es posible almacenar hasta n versiones diferentes de un mismo fichero. Si se modifica un fichero previamente almacenado, será almacenado como una nueva versión, siendo estas versiones totalmente accesibles en cualquier momento.
5.Puede recuperarse la información almacenada desde cualquier ordenador con acceso a la red. puede iniciar una copia de seguridad cuando lo desee).
6.Copias de seguridad selectivas de archivos.
7.Restauración total o selectiva de ficheros.
8.Dispone de un Historial y unos Informes de Actividad que le permitirán realizar un seguimiento de las copias realizadas.

Instación de Bacula Director, Bacula-fd(file daemon) y Bacula-sd(storage daemon)

Los paquetes necesarios para la instalacion son los siguientes:
bacula-common
bacula-client
bacula-console
bacula-director-common
bacula-director-mysql
bacula-fd
bacula-sd
bacula-sd-mysql
bacula-server
mysql-common
mysql-server
mysql-client
dbconfig-common
exim4
exim4-base
exim4-config
exim4-daemon-light
libdbd-mysql-perl
libdbi-perl
libmysqlclient15off
libnet-daemon-perl
libpcre3
libplrpc-perl
mime-support
mtx
perl
perl-modules
psmisc
python
python-minimal
python2.4
python2.4-minimal
ucf

instalandoce de la siguiente forma:

apta-get install bacula-common bacula-client bacula-console bacula-director-common bacula-director-mysql bacula-fd bacula-sd bacula-sd-mysql bacula-server mysql-common mysql-server mysql-client

Teniendo una salida por consola similar a la siguiente.

Aceptamos la solucion de dependencias que nos propone presionando las tecla “Y”, y esperamos que termine de bajar los paquetes.

sin-nombre-1.jpg

Nos armamos de paciencia mientras descarga los archivos necesarios.

Cuando terminen de instalarse los paquetes, nos aparecerá la siguiente salida de la consola:


En esta parte de la instalación seleccionamos la opción <yes>

sin-nombre-3.jpg

Como podemos leer ahora lo que nos esta preguntando es la contraseña del usuario administrativo de MySql, este debe ser un usuario que tenga suficientes privilegios para crear bases datos, usuarios y asignar permisos a otros usuarios. como por ejemplo root, como esta configuración se esta haciendo en una maquina debian recién instalada lo que debemos hacer es dejarlo en blanco y darle a <ok>.

sin-nombre-4.jpg

Ahora debemos introducir la contraseña que usara el bacula para conectarce al servidor MySql, si dejamos esta contraseñas en blanco el instalador generar una aleatoriamente, luego de escribirla seleccionamos <ok>.

Si por algun motivo se produce un error durante la configuracion de la base datos del director de bacula, con porner por consola el siguiente comando podemos solucionarlo facilmenten.
dpkg-reconfigure bacula-director-mysql
y nos volvera a hacer el mismo cuestionario con algunas opciones mas en caso que sea necesario. como por ejemplo:
1)Si queremos conectarnos al servidor Mysql por unix Socket o tcp/ip
2)Usuario administrativo de Mysql y su respectiva clave
3)Nombre de usuario para el Bacula
4)Contraseña para el usuario de Bacula
5)Nombre de la base de datos que usura Bacula

Archivos de Configuracion de Bacula-Director

ruta completa de este archivo de configuración:
/etc/bacula/bacula-dir.conf

# Configuración de red del director de bacula
Director {
# Nombre que utilizara el director al conectarce al resto de los demonios
# Este nombre debe ser igual al que esta configurado en el resto de los demonios como director
# de los que aceptaran conexiones
Name = bacula-dir-dir
# Puerto donde escuchara y utilizara el bacula-director
DIRport = 9101
# Ruta donde esta el archivo que usa de template para manipular la DB
QueryFile = “/etc/bacula/scripts/query.sql”
# Ruta de trabajo
WorkingDirectory = “/var/lib/bacula”
# Ruta del Pid
PidDirectory = “/var/run/bacula”
# Máximos trabajos de backup o restore que se ejecutaran simultaneamente
Maximum Concurrent Jobs = 1
# Password que deberan usar los demonios para conectarce con el bacula
Password = “TUPASS”
Messages = Daemon
# Direccion ip donde escuchara el Director
DirAddress = 0.0.0.0
}
# Definicion de los trabajos de backup
JobDefs {
#Nombre del trabajo
Name = “DefaultJob”
# Tipo
Type = Backup
# Nivel: Incremental, Completo
Level = Incremental
# Equipo sobre el cual se efectuara
Client = bacula-dir-fd
# Tipo de template de archivos a respaldar
FileSet = “Full Set”
# Ciclo de tiempo en el cual se realizara
Schedule = “WeeklyCycle”
# Storage sobre el cual se respaldara la información
Storage = File
# Tipo de reporte del backup
Messages = Standard
# Set de volumenes donde se almacenara
Pool = Default
# Prioridad
Priority = 10
}

Job {
Name = “Client1″
JobDefs = “DefaultJob”
Write Bootstrap = “/var/lib/bacula/Client1.bsr”
}

Job {
Name = “BackupCatalog”
JobDefs = “DefaultJob”
Level = Full
FileSet=”Catalog”
Schedule = “WeeklyCycleAfterBackup”
RunBeforeJob = “/etc/bacula/scripts/make_catalog_backup -u<user> -p<password>”
RunAfterJob = “/etc/bacula/scripts/delete_catalog_backup”
Write Bootstrap = “/var/lib/bacula/BackupCatalog.bsr”
Priority = 11 # run after main backup
}

Job {
Name = “RestoreFiles”
Type = Restore
Client=bacula-dir-fd
FileSet=”Full Set”
Storage = File
Pool = Default
Messages = Standard
Where = /tmp/bacula-restores
}
Schedule {
Name = “WeeklyCycle”
Run = Full 1st sun at 23:05
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}

Schedule {
Name = “WeeklyCycleAfterBackup”
Run = Full sun-sat at 23:10
}

FileSet {
Name = “Catalog”
Include {
Options {
signature = MD5
}
File = /var/lib/bacula/bacula.sql
}
}

Client {
Name = bacula-dir-fd
Address = bacula-dir
FDPort = 9102
Catalog = MyCatalog
Password = “TUPASS”
File Retention = 30 days
Job Retention = 6 months
AutoPrune = yes
}
# Configuración de los storages
Storage {
#Nombre del Storage
Name = File
# Direccion IP del storage
Address = 10.3.0.91
# Puerto en el cual esta escuchando el demonio de storage
SDPort = 9103
# Passowrd que se usara para conectarse al storage
Password = “TUPASS”
# Nombre del dispositivo que esta configurado en el storage
Device = FileStorage
# Tipo de almacenamiento
Media Type = File
}

Catalog {
Name = MyCatalog
dbname = bacula; DB Address = “”; user = bacula; password = “TUPASS”
}

Messages {
Name = Standard
mailcommand = “/usr/lib/bacula/bsmtp -h localhost -f \”\(Bacula\) %r\” -s \”Bacula: %t %e of %c %l\” %r”
operatorcommand = “/usr/lib/bacula/bsmtp -h localhost -f \”\(Bacula\) %r\” -s \”Bacula: Intervention needed for %j\” %r”
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = “/var/lib/bacula/log” = all, !skipped
}

Messages {
Name = Daemon
mailcommand = “/usr/lib/bacula/bsmtp -h localhost -f \”\(Bacula\) %r\” -s \”Bacula daemon message\” %r”
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = “/var/lib/bacula/log” = all, !skipped
}
# Pool de volumenes grupo de archivos y/o dispositivos donde se almacenara la información
Pool {
# Nombre del Pool de Datos
Name = Default
# Destino del Pool
Pool Type = Backup
# Esto permite reciclar los volumenes o cintas en forma automatica
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Accept Any Volume = yes # write on any volume in the pool
# Formato que se usuara para crear volumenes automaticamente en caso que todos los
# volúmenes que existan esten completos
LabelFormat = “Vol”
# Tamaño maximo en bytes que se permite por volumen
Maximum Volume Bytes = 524288000
}
# Configuración de la consola del Bacula
# La consola se utiliza para administrar el bacula
Console {
# Nombre del equipo donde esta corriendo la consola generalmente es el mismo que el director
Name = bacula-dir-mon
# Password que hay que usar para conectarse a la consola
Password = “TUPASS”
CommandACL = status, .status
}
#Definicion del cliente
Client {
#Nombre del cliente
Name = la-chanchita-fd
#Password que usara el director para conectarse al cliente
Password = TUPASS
# Direccion IP donde esta escuchando el cliente
Address = 10.3.0.60
# Puerto donde esta escuchando el cliente
FDPort = 9102
# Calago
Catalog = MyCatalog
# Tiempo durante el cual mantendra la información del backup antes de ser sobre escrita
File Retention = 30 days
Job Retention = 6 months
}
# Definicion de tamplate de archivos a respaldar
FileSet {
# Nombre del template
Name = Documentos
# Archivos a incluir
Include {
File = /home/
#Opciones especiales del tamplate
Options {
# Metodo hash por el cual comprobar la diferencias de archivo y la correcta copia
signature = MD5
# Metodo de compresión y nivel de compresión
compression = GZIP9
}
}
# Archivo a excluir del respaldo
Exclude {
File = /home/bacula/
File = /home/bacula/*
}
}
# Definicion de un trabajo de backup
Job {
# Nombre del trabajo que sera usado despues para identificarlo
Name = homes
# Tipo de trabajo
Type = Backup
#Nivel de backup
Level = Incremental
# Cliente sobre el cual aplicarlo
Client = la-chanchita-fd
# Tamplete de archivos a respaldar
FileSet = Documentos
# Ciclo de respaldo de datos
Schedule = WeeklyCycle
# Storage sobre el cual se almacenara la información
Storage = File
# Pool de Volumenes donde se almacenara la información
Pool = Default
# Tipo de reporte del resultado del backup
Messages = Standard
}
FileSet {
Name = Logs
Include {
File = /var/log/
Options {
signature = MD5
}
}
}
Job {
Name = Logs
Type = Backup
Level = Incremental
Client = bacula-dir-fd
FileSet = Logs
Schedule = WeeklyCycle
Storage = File
Pool = Default
Messages = Standard
}
Job {
Name = Logs-Chancha
Type = Backup
Level = Incremental
Client = la-chanchita-fd
FileSet = Logs
Schedule = WeeklyCycle
Storage = File
Pool = Default
Messages = Standard
}
Client {
Name = replicaweb-fd
Password = TUPASS
Address = 10.3.2.66
FDPort = 9102
Catalog = MyCatalog
File Retention = 30 days
Job Retention = 6 months
}
Job {
Name = BackupWebs
Type = Backup
Level = Incremental
Client = replicaweb-fd
FileSet = Documentos
Schedule = WeeklyCycle
Storage = idcmon
Pool = Default
Messages = Standard
}
Client {
Name = windows-fd
Password = TUPASS
Address = 10.3.2.157
FDPort = 9102
Catalog = MyCatalog
File Retention = 30 days
Job Retention = 6 months
}
FileSet {
Name = Windows-Video
Include {
File = D:/
Options {
signature = MD5
}
}
}
Job {
Name = Windows-Video
Type = Backup
Level = Incremental
Client = windows-fd
FileSet = Windows-Video
Schedule = WeeklyCycle
Storage = File
Pool = Default
Messages = Standard
}
Storage {
Name = idcmon
Password = TUPASS
Address = 10.0.0.220
SDPort = 9103
Device = Miami
Media Type = File
}

Configuración del Bacula-sd (Storage Daemon)

Storage { # definition of myself
Name = la-chanchita-sd
SDPort = 9103 # Director’s port
WorkingDirectory = “/var/lib/bacula”
Pid Directory = “/var/run/bacula”
Maximum Concurrent Jobs = 20
}

Director {
Name = bacula-dir-dir
Password = “TUPASS”
}

Director {
Name = bacula-dir-mon
Password = “TUPASS”
Monitor = yes
}

Device {
Name = FileStorage
Media Type = File
Archive Device = /home/bacula
Random Access = yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
LabelMedia = yes
}

Messages {
Name = Standard
director = bacula-dir-dir = all
}

Configuracion de Bacula-fd cliente ( File Daemon )
Ubicación del archivo de configuración
/etc/bacula/bacula-fd.conf

Director {
# Nombre del director que tiene control sobre este cliente
Name = bacula-dir-dir
# Password que debe proporcionar el director para poder conectarce
Password = “TUPASS”
}

Director {
#Nombre del director que hace de monitoreo
Name = bacula-dir-mon
# Password para el director de monitoreo
Password = “TUPASS”
# Habilita monitoreo
Monitor = yes
}

FileDaemon { # this is me
# Nombre que usa el file daemon para reportarse al director al momento de conectarse
Name = bacula-dir-fd
# Puerto donde esta escuchando el File daemon
FDport = 9102 # where we listen for the director
# Ruta de trabajo
WorkingDirectory = /var/lib/bacula
# Ruta donde colocar el pid del demonio
Pid Directory = /var/run/bacula
# Maximo de trabajos que se permiten ejecutar simultaneamente
Maximum Concurrent Jobs = 20
# Dirección IP donde escucha el file daemon
FDAddress = 0.0.0.0
}

Messages {
Name = Standard
director = bacula-dir-dir = all, !skipped, !restored
}

Instalación de Bacula-fd en una maquina cliente

En esta sección se describe como realizar una instalación de solo el cliente de bacula (bacula-fd) y como configurarlo para que use un director en la red.

Primero por consola debemos escribir el siguiente comando:

apt-get install bacula-fd

la respuesta de la consola sera similar a la siguiente:
root@template1:~# apt-get install bacula-fd
Reading package lists… Done
Building dependency tree… Done
The following extra packages will be installed:
bacula-common
Suggested packages:
bacula-doc bacula-traymonitor
The following NEW packages will be installed:
bacula-common bacula-fd
0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
Need to get 526kB of archives.
After unpacking 1069kB of additional disk space will be used.
Do you want to continue [Y/n]?

Seleccionamos la opcion Y si queremos hacer la instalacion
Si la instalacion se realizo correctamente la salida de consola deberia ser similar a la siguiente:

Get:1 http://ftp.br.debian.org etch/main bacula-common 1.38.11-8 [345kB]
Get:2 http://ftp.br.debian.org etch/main bacula-fd 1.38.11-8 [180kB]
Fetched 526kB in 10s (48.1kB/s)
Selecting previously deselected package bacula-common.
(Reading database … 14459 files and directories currently installed.)
Unpacking bacula-common (from …/bacula-common_1.38.11-8_all.deb) …
Selecting previously deselected package bacula-fd.
Unpacking bacula-fd (from …/bacula-fd_1.38.11-8_i386.deb) …
Setting up bacula-common (1.38.11-8) …

Setting up bacula-fd (1.38.11-8) …
Starting Bacula File daemon: bacula-fd.

una vez terminado este proceso debemos editar el archivo que esta ubicado en la siguiente ruta:
/etc/bacula/bacula-fd.conf

el contenido del archivo nos deberia quedar similar al siguiente ejemplo:
cat /etc/bacula/bacula-fd.conf

Director {
Name = bacula-dir-dir #o el nombre del director
Password = “TUPASS”
}
Director {
Name = bacula-dir-mon
Password = “TUPASS”
Monitor = yes
}
#
# “Global” File daemon configuration specifications
#
FileDaemon { # this is me
Name = template1.1-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress = 127.0.0.1
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = template1.1-dir = all, !skipped, !restored
}
Bibliografia:
http://es.wikipedia.org/wiki/Bacula
http://www.bacula.org

Leave a Reply

*