Bacula
From DHVLab
Revision as of 19:06, 10 September 2016 by Wiki admin (talk | contribs)
Bacula consists of multiple daemons.
- Bacula Director (bacula-dir): controls the backup and restore operations that are performed by the File and Storage daemons
- Storage Daemon (bacula-sd): Software that performs reads and writes on the storage devices used for backups
- Catalog: maintains a database of files that are backed up. The database is stored in MySQL
- Bacula Console (bconsole): A CLI that allows the administrator to control the Bacula Director
Find more sample configuration files here Bacula config files
Or have a look at the official documentation
Layout
- The Bacula-Director runs on BACKUP. On the same host as the MariaDB instance for the Bacula-Catalog.
- Then there are two Storage-Daemons, one on BACKUP, the other on OVIRT.
- Then every other machine that needs files to be backed up need a running instance of the Bacula-File-Daemon
- The VMs use the Storage-Daemon of BACKUP, the physical hosts the OVIRT one.
- OVIRTs File-Daemon takes care of backing up the VM export backups, while OVIRT backs up SAN disks that are used inside the virtual environment.
BACKUP
Installation
yum install bacula-director bacula-storage bacula-console bacula-client mariadb-server
==== MariaDB ====
#setup MariaDB
systemctl enable mariadb
systemctl start mariadb
#let bacula create tables
/usr/libexec/bacula/grant_mysql_privileges
/usr/libexec/bacula/create_mysql_database -u root
/usr/libexec/bacula/make_mysql_tables -u bacula
#secure MariaDB
mysql_secure_installation
#secure bacula
mysql -u root -p
> UPDATE mysql.user SET Password=PASSWORD('BACULA_DB_PASSWORD') WHERE User='BACULA_USER';
> FLUSH PRIVILEGES;
> exit
#tell bacula to use MySQL instead of PostgreSQL
sudo alternatives --config libbaccats.so
# select /usr/lib64/libbaccats-mysql.so
Configure Storage Daemon
Tapes will be stored on a SAN disk that is mounted on /san, so we will create a directory /san/backup
mkdir /san/backup
#fix permissions
chown -R bacula:bacula /san/backup
sudo chmod -R 700 /san/backup
bacula-sd.conf
Storage {
Name = backup-sd
SDPort = 9103
WorkingDirectory = "/var/spool/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
SDAddress = BACKUP.DMZ.YOUR_DOMAIN
}
Director {
Name = backup-dir
Password = XXXXXXX
}
Director {
Name = bacula-mon
Password = XXXXXX
Monitor = yes
}
Device {
Name = SAN
Media Type = SAN
Archive Device = /san/backup/
LabelMedia = yes
Random Access = yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
}
Messages {
Name = Standard
director = bacula-dir = all
}
Configure Console
bconsole.conf
Director {
Name = backup-dir
DIRport = 9101
address = BACKUP.dmz.YOUR_DOMAIN
Password = XXXXXX
}
Configure File-Daemon
bacula-fd.conf
Director {
Name = backup-dir
Password = XXXXXX
}
Director {
Name = bacula-mon
Password = XXXXXXX
Monitor = yes
}
FileDaemon {
Name = fd-s_backup
FDport = 9102
WorkingDirectory = /var/spool/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
FDAddress = localhost
}
Messages {
Name = Standard
director = bacula-dir = all, !skipped, !restored
}
Configure Director
To keep things clean we seperate configuration sections into different files
As you will see, all the configuration is done in configuration files on the Bacula-Director.
bacula-fd.conf
@/etc/bacula/conf.d/director.conf
@/etc/bacula/conf.d/console.conf
@/etc/bacula/conf.d/catalog.conf
@/etc/bacula/conf.d/messages.conf
@/etc/bacula/conf.d/schedules.conf
@/etc/bacula/conf.d/defjobs.conf
@/etc/bacula/conf.d/storage.conf
@/etc/bacula/conf.d/pools.conf
The first thing is the configuration of the director itself. connf.d/director.conf
Director {
Name = backup-dir
DIRport = 9101
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/spool/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = XXXXXX
Messages = Daemon
DirAddress = BACKUP.dmz.YOUR_DOMAIN
}
Configure Console
conf.d/console.conf
Console {
Name = bacula-mon
Password = XXXXXXX
CommandACL = status, .status
}
Configure Catalog
Now we connect Bacula to the MySQL database throuth the
conf.d/catalog.conf
Catalog {
Name = YOUR_CATALOG
dbdriver = "dbi:mysql";
dbaddress = localhost;
dbname = "BACULA_DB";
dbuser = "BACULA_DB_USER";
dbpassword = "BACULA_DB_PASSWORD";
}
Configure Schedules
Next we specify Schedules for the backups
conf.d/schedules.conf
Schedule {
Name = "MonthlyCycle"
Run = Level=Full 1st mon at 1:05
Run = Level=Differential mon at 1:05
Run = Level=Incremental mon-sun at 16:35
}
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 3:00
}
Configure Job Defaults
Default values that can be used by our backup jobs are defined in the
conf.d/defjobs.conf
JobDefs {
Name = "DefaultJob"
Schedule = "MonthlyCycle"
Storage = backup-sd
Messages = Standard
}
JobDefs {
Name = "DefaultJobCluster"
Schedule = "MonthlyCycle"
Storage = cluster-storage
Messages = Standard
}
Configure Connection to Storage
conf.d/storage.conf
Storage {
Name = backup-sd
Address = localhost
SDPort = 9103
Password = XXXXXX
Device = SAN
Media Type = SAN
Maximum Concurrent Jobs = 20
}
Storage {
Name = cluster-storage
Address = OVIRT.backup
SDPort = 9103
Password = XXXXXX
Device = SAN_CLUSTER
Media Type = SAN_CLUSTER
Maximum Concurrent Jobs = 20
}
Configure Storage Pools
conf.d/pools.conf
Pool {
Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days
}
Pool {
Name = File
Pool Type = Backup
Label Format = Local-
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days
Maximum Volume Bytes = 50G
Maximum Volumes = 100
}
Enable the services on BACKUP
Now enable the required services on BACKUP
systemctl start bacula-dir
systemctl start bacula-sd
systemctl start bacula-fd
systemctl enable bacula-dir
systemctl enable bacula-sd
systemctl enable bacula-fd
Sample host (NODE)
Config on Bacula Director
/etc/bacula/conf.d/fd-NODE.conf
Client {
Name = fd-NODE
Address = NODEXX.nodes.YOUR_DOMAIN
FDPort = 9102
Catalog = MyCatalog
Password = XXXXXX
File Retention = 1 years
Job Retention = 6 months
AutoPrune = yes
}
FileSet {
Name = fs-NODE
Include {
File = /etc
File = /backup
File = /opt/tomcat
File = /var/lib/guacamole
File = /var/log/
Options {
signature = MD5
Compression = GZIP5
}
}
}
Pool {
Name = p-NODE-full
Use Volume Once = yes
Pool Type = Backup
LabelFormat = NODE-full-
AutoPrune = yes
Volume Retention = 1 year
Maximum Volumes = 15
Recycle = yes
}
Pool {
Name = p-NODE-incr
Use Volume Once = yes
Pool Type = Backup
LabelFormat = NODE-incr-
AutoPrune = yes
Volume Retention = 1 month
Maximum Volumes = 15
Recycle = yes
}
Pool {
Name = p-NODE-diff
Use Volume Once = yes
Pool Type = Backup
LabelFormat = NODE-diff-
AutoPrune = yes
Volume Retention = 14 days
Maximum Volumes = 15
Recycle = yes
}
Job {
Name = j-NODE
Client = fd-NODE
JobDefs = "DefaultJob"
Type = Backup
Level = Full
FileSet = fs-NODE
Schedule = MonthlyCycle
Pool = p-NODE-full
Full Backup Pool = p-NODE-full
Incremental Backup Pool = p-NODE-incr
Differential Backup Pool = p-NODE-diff
Write Bootstrap = "/var/spool/bacula/%n.bsr"
}
Install File-Daemon
yum install bacula-fd
/etc/bacula/bacula-fd.conf
Director {
Name = backup-dir
Password = XXXXXX
}
Director {
Name = bacula-mon
Password = XXXXXX
Monitor = yes
}
FileDaemon {
Name = fd-NODE
FDport = 9102
WorkingDirectory = /var/spool/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
FDAddress = NODE.nodes.YOUR_DOMAIN
}
Messages {
Name = Standard
director = backup-dir = all, !skipped, !restored
}
#enable service
systemctl start bacula-fd
systemctl enable bacula-fd