Hi,
I'm having some performance challenges. I would appreciate some educated
guess from an experienced bacula user.
I'm changing old backup sw that writes to tape drive with bacula
writing to disk. The results are:
a) windows file server backup from a deduplicated drive (1.700.000
files, 900 GB data, deduplicated space used 600 GB). *Bacula: 12 hours,
old software: 2.5 hours*
b) linux file server backup (50.000 files, 166 GB data).*Bacula 3.5
hours, old software: 1 hour*.
I have tried to:
a) turn off compression&encryption. The result is the same: backup speed
around 13 MB/sec.
b) change destination storage (from a new ibm storage attached over nfs,
to a local SSD disk attached on bacula server virtual machine). It took
2 hours 50 minutes to backup linux file server (instead of 3.5 hours).
Sequential write test tested with linux dd command shows write speed 300
MB/sec for IBM storage and 600 MB/sec for local SSD storage (far better
than actual throughput).
The network bandwidth is 1 GB (1 GB on client, 10 GB on server) so I
guess this is not a problem; however I have noticed that bacula-fd on
client side uses 100% of CPU.
I'm using:
-bacula server version 9.6.5
-bacula client version 5.2.13 (original from centos 6 repo).
Any idea what is wrong and/or what performance should I expect?
I would also appreciate some answers on the questions bellow.
Kind regards,
Ziga Zvan
On 05.08.2020 10:52, Žiga Žvan wrote:
Dear all,
I have tested bacula sw (9.6.5) and I must say I'm quite happy with
the results (eg. compression, encryption, configureability). However I
have some configuration/design questions I hope, you can help me with.
Regarding job schedule, I would like to:
- create incremental daily backup (retention 1 week)
- create weekly full backup (retention 1 month)
- create monthly full backup (retention 1 year)
I am using dummy cloud driver that writes to local file storage.
Volume is a directory with fileparts. I would like to have seperate
volumes/pools for each client. I would like to delete the data on disk
after retention period expires. If possible, I would like to delete
just the fileparts with expired backup.
Questions:
a) At the moment, I'm using two backup job definitions per client and
central schedule definition for all my clients. I have noticed that my
incremental job gets promoted to full after monthly backup ("No prior
Full backup Job record found"; because monthly backup is a seperate
job, but bacula searches for full backups inside the same job). Could
you please suggest a better configuration. If possible, I would like
to keep central schedule definition (If I manipulate pools in a
schedule resource, I would need to define them per client).
b) I would like to delete expired backups on disk (and in the catalog
as well). At the moment I'm using one volume in a daily/weekly/monthly
pool per client. In a volume, there are fileparts belonging to expired
backups (eg. part1-23 in the output bellow). I have tried to solve
this with purge/prune scripts in my BackupCatalog job (as suggested in
the whitepapers) but the data does not get deleted. Is there any way
to delete fileparts? Should I create separate volumes after retention
period? Please suggest a better configuration.
c) Do I need a restore job for each client? I would just like to
restore backup on the same client, default to /restore folder... When
I use bconsole restore all command, the wizard asks me all the
questions (eg. 5- last backup for a client, which client,fileset...)
but at the end it asks for a restore job which changes all previously
defined things (eg. client).
d) At the moment, I have not implemented autochanger functionality.
Clients compress/encrypt the data and send them to bacula server,
which writes them on one central storage system. Jobs are processed in
sequential order (one at a time). Do you expect any significant
performance gain if i implement autochanger in order to have jobs run
simultaneously?
Relevant part of configuration attached bellow.
Looking forward to move in the production...
Kind regards,
Ziga Zvan
*Volume example *(fileparts 1-23 should be deleted)*:*
[root@bacula cetrtapot-daily-vol-0022]# ls -ltr
total 0
-rw-r--r--. 1 bacula disk 262 Jul 28 23:05 part.1
-rw-r--r--. 1 bacula disk 999935988 Jul 28 23:06 part.2
-rw-r--r--. 1 bacula disk 999935992 Jul 28 23:07 part.3
-rw-r--r--. 1 bacula disk 999936000 Jul 28 23:08 part.4
-rw-r--r--. 1 bacula disk 999935981 Jul 28 23:09 part.5
-rw-r--r--. 1 bacula disk 328795126 Jul 28 23:10 part.6
-rw-r--r--. 1 bacula disk 999935988 Jul 29 23:09 part.7
-rw-r--r--. 1 bacula disk 999935995 Jul 29 23:10 part.8
-rw-r--r--. 1 bacula disk 999935981 Jul 29 23:11 part.9
-rw-r--r--. 1 bacula disk 999935992 Jul 29 23:12 part.10
-rw-r--r--. 1 bacula disk 453070890 Jul 29 23:12 part.11
-rw-r--r--. 1 bacula disk 999935995 Jul 30 23:09 part.12
-rw-r--r--. 1 bacula disk 999935993 Jul 30 23:10 part.13
-rw-r--r--. 1 bacula disk 999936000 Jul 30 23:11 part.14
-rw-r--r--. 1 bacula disk 999935984 Jul 30 23:12 part.15
-rw-r--r--. 1 bacula disk 580090514 Jul 30 23:13 part.16
-rw-r--r--. 1 bacula disk 999935994 Aug 3 23:09 part.17
-rw-r--r--. 1 bacula disk 999935936 Aug 3 23:12 part.18
-rw-r--r--. 1 bacula disk 999935971 Aug 3 23:13 part.19
-rw-r--r--. 1 bacula disk 999935984 Aug 3 23:14 part.20
-rw-r--r--. 1 bacula disk 999935973 Aug 3 23:15 part.21
-rw-r--r--. 1 bacula disk 999935977 Aug 3 23:17 part.22
-rw-r--r--. 1 bacula disk 108461297 Aug 3 23:17 part.23
-rw-r--r--. 1 bacula disk 999935974 Aug 4 23:09 part.24
-rw-r--r--. 1 bacula disk 999935987 Aug 4 23:10 part.25
-rw-r--r--. 1 bacula disk 999935971 Aug 4 23:11 part.26
-rw-r--r--. 1 bacula disk 999936000 Aug 4 23:12 part.27
-rw-r--r--. 1 bacula disk 398437855 Aug 4 23:12 part.28
*Cache (deleted as expected):*
[root@bacula cetrtapot-daily-vol-0022]# ls -ltr
/mnt/backup_bacula/cloudcache/cetrtapot-daily-vol-0022/
total 4
-rw-r-----. 1 bacula disk 262 Jul 28 23:05 part.1
*Relevant part of central configuration*
# Backup the catalog database (after the nightly save)
Job {
Name = "BackupCatalog"
JobDefs = "CatalogJob"
Level = Full
FileSet="Catalog"
Schedule = "WeeklyCycleAfterBackup"
RunBeforeJob = "/opt/bacula/scripts/make_catalog_backup.pl MyCatalog"
# This deletes the copy of the catalog
RunAfterJob = "/opt/bacula/scripts/delete_catalog_backup"
#Prune
RunScript {
Console = "prune expired volume yes"
RunsWhen = Before
RunsOnClient= No
}
#Purge
RunScript {
RunsWhen=After
RunsOnClient=No
Console = "purge volume action=all allpools
storage=FSOciCloudStandard"
}
Write Bootstrap = "/opt/bacula/working/%n.bsr"
Priority = 11 # run after main backup
}
Schedule {
Name = "WeeklyCycle"
Run = Full 2nd-5th fri at 23:05
Run = Incremental mon-thu at 23:05
}
Schedule {
Name = "MonthlyFull"
Run = Full 1st fri at 23:05
}
# This schedule does the catalog. It starts after the WeeklyCycle
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 23:10
}
*Configuration specific to each client*
Client {
Name = oradev02.kranj.cetrtapot.si-fd
Address = oradev02.kranj.cetrtapot.si #IP or fqdn
FDPort = 9102
Catalog = MyCatalog
Password = "something" # password for FileDaemon: will be
match on client side
File Retention = 60 days # 60 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
##Job for backup ##
JobDefs {
Name = "oradev02-job"
Type = Backup
Level = Incremental
Client = oradev02.kranj.cetrtapot.si-fd #Client names: will be match
on bacula-fd.conf on client side
FileSet = "oradev02-fileset"
Schedule = "WeeklyCycle" #schedule : see in bacula-dir.conf
# Storage = FSDedup
Storage = FSOciCloudStandard
Messages = Standard
Pool = oradev02-daily-pool
SpoolAttributes = yes # Better for backup to disk
Max Full Interval = 15 days # Ensure that full backup exist
Priority = 10
Write Bootstrap = "/opt/bacula/working/%c.bsr"
}
Job {
Name = "oradev02-backup"
JobDefs = "oradev02-job"
Full Backup Pool = oradev02-weekly-pool
Incremental Backup Pool = oradev02-daily-pool
}
Job {
Name = "oradev02-monthly-backup"
JobDefs = "oradev02-job"
Pool = oradev02-monthly-pool
Schedule = "MonthlyFull" #schedule : see in bacula-dir.conf
(monthly pool with longer retention)
}
## Job for restore ##
Job {
Name = "oradev02-restore"
Type = Restore
Client=oradev02.kranj.cetrtapot.si-fd
Storage = FSOciCloudStandard
# The FileSet and Pool directives are not used by Restore Jobs
# but must not be removed
FileSet="oradev02-fileset"
Pool = oradev02-weekly-pool
Messages = Standard
Where = /restore
}
FileSet {
Name = "oradev02-fileset"
Include {
Options {
signature = MD5
compression = GZIP
}
# File = "D:/projekti" #Windows example
# File = /zz #Linux example
File = /backup/export
}
## Exclude ##
Exclude {
File = /opt/bacula/working
File = /tmp
File = /proc
File = /tmp
File = /sys
File = /.journal
File = /.fsck
}
}
Pool {
Name = oradev02-monthly-pool
Pool Type = Backup
Recycle = yes # Bacula can automatically
recycle Volumes
AutoPrune = no # Prune expired volumes (catalog
job handles this)
Action On Purge = Truncate # Allow to volume truncation
#Volume Use Duration = 14h # Create new volume for each backup
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
Label Format = "oradev02-monthly-vol-" # Auto label
Cache Retention = 1 days # Cloud specific (delete local
cache after one day)
}
Pool {
Name = oradev02-weekly-pool
Pool Type = Backup
Recycle = yes # Bacula can automatically
recycle Volumes
AutoPrune = no # Prune expired volumes (catalog
job handles this)
Action On Purge = Truncate # Allow to volume truncation
#Volume Use Duration = 14h # Create new volume for each backup
Volume Retention = 35 days # one month
Maximum Volume Bytes = 50G # Limit Volume size to something
reasonable
Maximum Volumes = 100 # Limit number of Volumes in Pool
Label Format = "oradev02-weekly-vol-" # Auto label
Cache Retention = 1 days # Cloud specific (delete local
cache after one day)
}
Pool {
Name = oradev02-daily-pool
Pool Type = Backup
Recycle = yes # Bacula can automatically
recycle Volumes
AutoPrune = no # Prune expired volumes (catalog
job handles this)
Action On Purge = Truncate # Allow to volume truncation
#Volume Use Duration = 14h # Create new volume for each backup
Volume Retention = 1 days # one week (for testing
purposes, after that change to 5)
Maximum Volume Bytes = 50G # Limit Volume size to something
reasonable
Maximum Volumes = 100 # Limit number of Volumes in Pool
Label Format = "oradev02-daily-vol-" # Auto label
Cache Retention = 1 days # Cloud specific (delete local
cache after one day)
}
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users