Difference between revisions of "Bacula"
From DHVLab
Wiki admin (talk | contribs) (Created page with "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 D...") |
Wiki admin (talk | contribs) |
||
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:Backup]] | ||
Bacula consists of multiple daemons. | Bacula consists of multiple daemons. | ||
# Bacula Director (bacula-dir): controls the backup and restore operations that are performed by the File and Storage daemons | # Bacula Director (bacula-dir): controls the backup and restore operations that are performed by the File and Storage daemons | ||
Line 4: | Line 5: | ||
# Catalog: maintains a database of files that are backed up. The database is stored in MySQL | # 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 | # Bacula Console (bconsole): A CLI that allows the administrator to control the Bacula Director | ||
+ | <br/> | ||
+ | Find more sample configuration files here [https://github.com/linuskohl/DHVLab/tree/master/configfiles/general/bacula Bacula config files]<br/> | ||
+ | Or have a look at the [http://wiki.bacula.org/doku.php official documentation]<br/> | ||
+ | For running jobs manually or restoring backups see [http://www.bacula.org/5.0.x-manuals/en/console/console/Bacula_Console.html bacula console documentation] | ||
== Layout == | == Layout == | ||
Line 121: | Line 126: | ||
=== Configure Director === | === Configure Director === | ||
To keep things clean we seperate configuration sections into different files <br/> | To keep things clean we seperate configuration sections into different files <br/> | ||
+ | As you will see, all the configuration is done in configuration files on the Bacula-Director.<br/> | ||
bacula-fd.conf | bacula-fd.conf | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 147: | Line 153: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === Configure Console === | ||
conf.d/console.conf | conf.d/console.conf | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 155: | Line 163: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === Configure Catalog === | ||
Now we connect Bacula to the MySQL database throuth the <br/> | Now we connect Bacula to the MySQL database throuth the <br/> | ||
conf.d/catalog.conf | conf.d/catalog.conf | ||
Line 167: | Line 177: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === Configure Schedules === | ||
Next we specify Schedules for the backups <br/> | Next we specify Schedules for the backups <br/> | ||
conf.d/schedules.conf | conf.d/schedules.conf | ||
Line 181: | Line 193: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === Configure Job Defaults === | ||
Default values that can be used by our backup jobs are defined in the <br/> | Default values that can be used by our backup jobs are defined in the <br/> | ||
conf.d/defjobs.conf | conf.d/defjobs.conf | ||
Line 197: | Line 211: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === Configure Connection to Storage === | ||
conf.d/storage.conf | conf.d/storage.conf | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 218: | Line 234: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === Configure Storage Pools === | ||
conf.d/pools.conf | conf.d/pools.conf | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
Line 238: | Line 256: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | == Enable the services on BACKUP == | |
Now enable the required services on BACKUP | Now enable the required services on BACKUP | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 246: | Line 264: | ||
systemctl enable bacula-dir | systemctl enable bacula-dir | ||
systemctl enable bacula-sd | systemctl enable bacula-sd | ||
+ | systemctl enable bacula-fd | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | == Sample host (NODE) == | ||
+ | === Config on Bacula Director === | ||
+ | /etc/bacula/conf.d/fd-NODE.conf | ||
+ | <syntaxhighlight lang="text"> | ||
+ | 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" | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Install File-Daemon === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | yum install bacula-fd | ||
+ | </syntaxhighlight> | ||
+ | /etc/bacula/bacula-fd.conf | ||
+ | <syntaxhighlight lang="text"> | ||
+ | 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 | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | #enable service | ||
+ | systemctl start bacula-fd | ||
systemctl enable bacula-fd | systemctl enable bacula-fd | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 19:45, 10 September 2016
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
For running jobs manually or restoring backups see bacula console 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