Vamos a ver cómo instalar y configurar Bacula en CentOS.
Bacula es una solución de backup de red, de código abierto, que nos permite crear backups y reestablecer los datos salvaguardados en nuestros sistemas. Es flexible y robusto.
En este artículo:
- Componentes de Bacula
- Instalar MySQL y Bacula
- Crear los directorios de backups y restauración de backups
- Configurar Bacula Director
- Configuramos los jobs locales
- Configurar FileSet
- Configurar la conexión del Daemon de almacenamiento
- Configurar la conexión del Catálogo
- Configurar el Pool
- Revisar la configuración de Bacula Director
- Configurar el daemon de almacenamiento (SD)
- Verificar la configuración del demonio de almacenamiento (SD)
- Configurar los passwords de los componentes Bacula
- Generar y establecer el password de Director
- Generar y establecer el password de SD (StorageDaemon / daemon de almacenamiento)
- Generar y establecer el password de FD (local File Daemon / daemon de archivos – el software de cliente Bacula)
- Iniciar componentes de Bacula
Componentes de Bacula
—> Los componentes principales del servidor bacula son:
- Bacula Director : el software que controla las operaciones de copia de seguridad y restauración, controladas por los daemons de archivos y de almacenamiento.
- Storage Daemon (SD) : el software que realiza las operaciones de lectura y escritura de los archivos sobre los dispositivos de almacenamiento usados en las backups.
- Catalog : servicios que mantienen una base de datos de los archivos salvaguardado en las copias de seguridad. La base de datos es MySQL o PostgreSQL.
- Bacula console : una interfaz de línea de comandos que nos permite interactuar y controlar el bacula director.
—> Para el cliente Bacula:
un cliente bacula ejecuta el componente File Daemon (FD), se trata del software que permite al servidor bacula acceder a los archivos que serán salvaguardados.
Instalar MySQL y Bacula
Instalamos bacula y los paquetes del servidor MariaDB en CentOS con yum:
sudo yum install -y bacula-director bacula-storage bacula-console bacula-client mariadb-server |
Iniciamos mySQL:
sudo systemctl start mariadb |
Ahora que MariaDB está instalado y en ejecución, crearemos el usuario de la base de datos Bacula y las tablas:
/usr/libexec/bacula/grant_mysql_privileges /usr/libexec/bacula/create_mysql_database -u root /usr/libexec/bacula/make_mysql_tables -u bacula |
ejecutamos un script de seguridad para eliminar algunos valores predeterminados peligrosos:
sudo mysql_secure_installation |
nos pedirá la contraseña de root actual;si acabamos de instalar mySQL es probable que no tengamos una. Lo dejamos en blanco y pulsamos enter.
Después nos preguntará si queremos establecer una contraseña para root;
la establecemos y configuramos el resto de opciones:
Establecemos la contraseña para el usuario de la base de datos bacula:
mysql -u root -p MariaDB [(none)]> UPDATE mysql.user SET Password=PASSWORD('bacula_db_password') WHERE User='bacula'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> exit |
Habilitamos MariaDB para que arranque de forma automática en el inicio:
sudo systemctl enable mariadb |
Configuramos bacula para usar la biblioteca mySQL (por defecto bacula está configurado para usar PostgreSQL).
ejecutamos:
sudo alternatives --config libbaccats.so |
Veremos el siguiente mensaje (seleccionamos la primera opción, num 1)
Hay 3 programas que proporcionan 'libbaccats.so'. Selección Comando ----------------------------------------------- 1 /usr/lib64/libbaccats-mysql.so 2 /usr/lib64/libbaccats-sqlite3.so *+ 3 /usr/lib64/libbaccats-postgresql.so Presione Intro para mantener la selección actual[+], o escriba el número de la selección: 1 |
Ya tenemos correctamente instalados los componentes del servidor bacula y del cliente bacula.
Ahora tenemos que crear los directorios de backup y restauración.
Crear los directorios de backup y restauración
Bacula necesita un directorio para almacenar las copias de seguridad, y un directorio donde colocar los archivos restaurados.
Creamos entonces estos dos directorios:
sudo mkdir -p /bacula/backup /bacula/restore |
Modificamos permisos para que solo el usuario bacula y un superusuario puedan acceder a dichos directorios
sudo chown -R bacula:bacula /bacula sudo chmod -R 700 /bacula |
Configurar Bacula Director
Editamos el archivo de configuración de Bacula Director:
sudo vi /etc/bacula/bacula-dir.conf |
Configuramos el recurso Director para escuchar sobre localhost, añadiendo la línea “DirAddress”:
DirAddress = 127.0.0.1 |
De forma que el archivo de configuración quede así:
Director { # define myself Name = bacula-dir DIRport = 9101 # where we listen for UA connections QueryFile = "/etc/bacula/query.sql" WorkingDirectory = "/var/spool/bacula" PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 Password = "@@DIR_PASSWORD@@" # Console password Messages = Daemon DirAddress = 127.0.0.1 } |
Configuramos los jobs locales
Un job se usa para definir trabajos de copia de seguridad y restauración de archivos. Ahora definimos los jobs que se usarán para realizar backups de los ficheros locales:
Buscamos el recurso “Job” con el nombre de “BackupClient1“, y cambiamos el valor a “BackupLocalFiles”
Job { Name = "BackupLocalFiles" JobDefs = "DefaultJob" } |
Ahora localizamos el recurso “Job” que se llama “RestoreFiles“, y modificamos los valores de “Name” y “Where“:
Job { Name = "RestoreLocalFiles" Type = Restore Client=BackupServer-fd FileSet="Full Set" Storage = File Pool = Default Messages = Standard Where = /bacula/restore } |
Así hemos configurado el job “RestoreLocalFiles” para restaurar ficheros en /bacula/restore, el directorio que creamos previamente.
Configurar FileSet
“FileSet” define un conjunto de directorios que deseamos incluir o excluir de la copia de seguridad.
Encontramos esta opción con nombre “Full Set“.
Aquí podemos hacer varios cambios interesantes:
- Añadir la opción para usar gzip para comprimir las backups.
- Cambiar el Include de
/usr/sbin
a
/
- Añadir a la sección de Excludes:
File = /bacula
FileSet { Name = "Full Set" Include { Options { signature = MD5 compression = GZIP } File = / } Exclude { File = /var/lib/bacula File = /proc File = /tmp File = /.journal File = /.fsck File = /bacula } } |
Configurar la conexión del Daemon de almacenamiento
Hemos de definir el daemon de almacenamiento al que Bacula Director se conectará.
Reemplazamos el valor de “Address“, localhost, por la IP del servidor de backups, o un nombre FQDN.
Storage { Name = File # Do not use "localhost" here Address = localhost, IP, o nombre FQDN del servidor SDPort = 9103 Password = "@@SD_PASSWORD@@" Device = FileStorage Media Type = File } |
Configurar la conexión del Catálogo
Localizamos el recurso de Catálogo, llamado “MyCatalog” y actualizamos el valor de “dbpassword” con el valor de la password que tenga el usuario bacula de la base de datos.
# Generic catalog service Catalog { Name = MyCatalog # Uncomment the following line if you want the dbi driver # dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport = dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_db_password" } |
Configurar el Pool
Un Pool define el conjunto de almacenamiento utilizado por bacula para escribir copias de seguridad. Podemos modificar el valor “label” para identificar correctamente nuestras backups.
Añadimos
Label Format = Local- |
De forma que esta sección quede así:
# File Pool definition Pool { Name = File Pool Type = Backup Label Format = Local- Recycle = yes # Bacula can automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 365 days # one year Maximum Volume Bytes = 50G # Limit Volume size to something reasonable Maximum Volumes = 100 # Limit number of Volumes in Pool } |
Revisar la configuración de Bacula Director
Hecha toda la configuración, vamos a revisar que no haya fallos.
sudo bacula-dir -tc /etc/bacula/bacula-dir.conf |
Si no hay errores no recibiremos ningún mensaje.
Si tenemos errores de configuración, veremos un mensaje de advertencia con los errores que debemos corregir:
[root@centos7 ~]# sudo bacula-dir -tc /etc/bacula/bacula-dir.conf bacula-dir: dird.c:1015-0 Could not open Catalog "MyCatalog", database "bacula". bacula-dir: dird.c:1020-0 mysql.c:210 Unable to connect to MySQL server. Database=bacula User=bacula MySQL connect failed either server not running or your authorization is incorrec t. 13-abr 11:38 bacula-dir ERROR TERMINATION Please correct configuration file: /etc/bacula/bacula-dir.conf |
Configurar el daemon de almacenamiento
Casi hemos terminado de configurar nuestro servidor bacula, pero aún nos fañta configurar el daemon de almacenamiento, necesario para indicar a bacula dónde ha de guardar las copias de seguridad.
Abrimos y editamos el archivo de connfiguración del daemon de almacenamiento:
sudo vi /etc/bacula/bacula-sd.conf |
Configurar los recursos de almacenamiento
Buscamos el recurso “Storage“. Aquí se define dónde escuchará el proceso SD (Storage Daemon / Demonio de almacenamiento) para establecer conexiones.
Añadimos el parámetro “SDAddress” , y lo asignamos a la IP de nuestro servidor de backups o nuestro nombre FQDN
Storage { # definition of myself Name = BackupServer-sd SDPort = 9103 # Director's port WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run/bacula" Maximum Concurrent Jobs = 20 SDAddress = localhost, IP, o nombre FQDN del servidor. } |
Configurar el dispositivo de almacenamiento
Lo siguiente es localizar el recurso llamado “FileStorage”, y actualizar el valor de “Archive Device” para que coincida con nuestro directorio de backups:
Device { Name = FileStorage Media Type = File Archive Device = /bacula/backup LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; } |
Verificar la configuración del demonio de almacenamiento (SD)
sudo bacula-sd -tc /etc/bacula/bacula-sd.conf |
Configurar los passwords de los componentes Bacula
Todos los componentes de Bacula, como el Director, FD y SD, usan passwords para comunicarse.
Podemos configurar manualmente dichos passwords, pero también podemos generarlos de forma aleatoria (estos passwords no necesitamos conocerlos, y no tendremos que introducirlos en ningún otro caso).
Generar y establecer el password de Director
bconsole conecta a Director, así que también hemos de establecer la password.
-
DIR_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
-
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bacula-dir.conf
-
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bconsole.conf
Generar y establecer el password de SD (StorageDaemon / daemon de almacenamiento)
-
SD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
-
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-sd.conf
-
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-dir.conf
Director conecta a SD, así que también hemos de establecer la contraseña.
Generar y establecer el password de FD (local File Daemon / daemon de archivos – el software de cliente Bacula)
Director conecta a FD, así que también hemos de establecer la contraseña.
-
FD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
-
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-dir.conf
-
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-fd.conf
Iniciar componentes de Bacula
Ahora podemos iniciar Bacula Director, el Daemon de Almacenamiento (SD), y el daemon de archivos locales (FD):
sudo systemctl start bacula-dir |
sudo systemctl start bacula-sd |
sudo systemctl start bacula-fd |
Si se inician correctamente, ya podemos habilitarlos para que inicien junto con el sistema:
sudo systemctl enable bacula-dir |
sudo systemctl enable bacula-sd |
sudo systemctl enable bacula-fd |
Ahora ya podríamos comenzar a configurar backups de Bacula.