Bacula 設定編① bacula-dir¶
2018/3/23¶
設定編① bacula-dir
今回はbacula-dirのみを対象とし、bacula-sd、bacula-fd、bconsoleは別途記載する。
環境については以下の通りとする。
環境¶
- バックアップ対象サイズ:約1TB
- FullBackup:毎月1回、最初の月曜日
- DifferentialBackup(差分バックアップ):週1回、月曜日(FullBackup時は除く)
- IncrementalBackup(増分バックアップ):毎日(Full,DiffBackup時は除く)
- バックアップ実行時間は4:05とする。
- Backup用Storageのサイズ:3TB
- Backup用Storageは別のサーバからNFSマウントしている
フルバックアップが毎月1回実行しての2世代保存とする。
ただし1ヶ月前の状態まで戻せることを目標とする。
2世代としている理由としては、フルバックアップ処理時に失敗した時、前回分のフルバックアップデータを消さないために2世代保管としている。
bacula-dirの設定¶
バックアップ方式の設定は主に以下のファイルで行う。
/etc/bacula/bacula-dir.conf
各リソースについて、順に説明する。
リソースとは{}で囲まれた区画のことを指す。
バックアップ対象はowncloudが入ったファイルサーバとしている。
owncloudの名前が設定に出てくるが、バックアップ対象を識別する名前となっている。
Director¶
Director {
Name = bacula-dir
DIRport = 9101
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/spool/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 20
Password = "パスワード"
Messages = Daemon
}
基本的にデフォルトの設定で良い。ただしパスワードを設定する必要がある。
bacula-dirのサービスで使用する通信ポートを変えたければDIRport
を変更する。
Job¶
バックアップジョブの取りまとめを行っているのがこのリソース。
JobDefs
で全Job共通のデフォルト設定を記載する。
Job
の箇所にバックアップジョブごとの別々の設定を記載する。
Job
での設定値はJobDefs
に上書きされる。
こうすることで、Job
に全部のパラメータの記載をする手間を省くことができるようになっている。
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Client = bacula-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = File1
Messages = Standard
Pool = File1
Write Bootstrap = "/var/spool/bacula/%c.bsr"
}
Job {
Name = "owncloud"
Type = Backup
Client = owncloud
FileSet = "owncloud"
Schedule = "owncloudCycle"
Storage = owncloud
Messages = Standard
Full Backup Pool = owncloud-Full
Incremental Backup Pool = owncloud-Inc
Differential Backup Pool = owncloud-Diff
Pool = File1
SpoolAttributes = yes
Priority = 10
Write Bootstrap = "/var/spool/bacula/%c.bsr"
}
Client,FileSet,Schedule,Storage
等のリソース設定が後に出てくるが、そこのName
部分とこのJobリソースに記載しているName
を同じにする必要がある。
したがってName
はバックアップ対象で共通化しておいたほうがわかりやすい。
今回の例でいえばowncloud
で共通化している。
リストアの設定もJobリソースにて行う。
Job {
Name = "Restoreowncloud"
Type = Restore
Client=owncloud
Storage = owncloud
FileSet="owncloud"
Full Backup Pool = owncloud-Full
Incremental Backup Pool = owncloud-Inc
Differential Backup Pool = owncloud-Diff
Pool = File1
Messages = Standard
Where = /tmp/bacula-restores
}
Type = Restore
はリストアの設定となる。
リストア操作はbconsoleで行う。(操作編に手順を記載)
Client,Storage,Pool
等、バックアップJobと共通の設定を行う。
Where
はリストアを行う先のパスの指定となる。
リストアを行った場合、クライアント上(上記の例だと/tmp/bacula-restores
)にリストアされる。
FileSet¶
バックアップ対象を記載する。
FileSet {
Name = "owncloud"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /exstorage/owncloud
File = /var/lib/pgsql/9.4/basebackup
File = /var/lib/pgsql/9.4/wal
File = /exstorage2/samba
}
}
Name
はJobリソースのFileSetと同じにする必要がある。Include{}
にて、バックアップファイルの指定を行う。File = "バックアップ対象のパス"
を書けば良い。
バックアップを除外したい場合はExclude{}
の中に、File = "バックアップを除外したいパス"
を書けば良い。
Options
についてはバックアップ取得時の圧縮方式等を指定することができる。
上記の例ではGZIP
圧縮している。
Schedule¶
バックアップ実行スケジュールの設定。
NameはJobリソースで設定したものと同じものを設定する。
フル、差分、増分のバックアップ日程をここで設定できる。
Schedule {
Name = "owncloudCycle"
Run = Full 1st mon at 04:05
Run = Differential 2nd-5th mon at 04:05
Run = Incremental tue-sun at 04:05
}
上記の設定は以下の通り
- Full 1st mon at 04:05
- 毎月最初の月曜日4:05からバックアップ開始
- フルバックアップ
- Differential 2nd-5th mon at 04:05
- 毎月2~5週目の月曜日、4:05からバックアップ開始
- 差分バックアップ
- Incremental tue-sun at 04:05
- 毎週火曜日〜日曜日、4:05からバックアップ開始
- 増分バックアップ
1st,2nd,3rd,4th,5thで毎月の何週目にやるかを指定できる。
sun,mon,tue,wed,thu,fri,sat で曜日が指定できる。
Client¶
バックアップ先情報を記載する。
Client {
Name = owncloud
Address = 192.168.1.10 # クライアントのIPアドレス
FDPort = 9102
Catalog = MyCatalog
Password = "パスワード"
File Retention = 35 days
Job Retention = 6 months
AutoPrune = yes
}
Name
はJobリソースと同じものを記載する必要がある。Address
はクライアント(バックアップ対象サーバ)のIPアドレスを記載するか、名前解決できればホスト名、FQDNで良い。Catalog
はバックアップ実行情報等を記録するバックアップカタログを指定する設定。デフォルトで良い。Password
はパスワード。File Retention
はCatalog
のデータベース保持期間であり、上記で35日間は保持する設定となっている。Job Retention
はジョブの実行記録であり、上記だと6ヶ月前までのジョブ実行履歴が確認できる。AutoPrune
は保持期間を過ぎたものを自動的に削除す家の設定でyes
だと削除される。Clientリソースの場合、Catalog
の情報を自動削除、となる。
Storage¶
バックアップ保存先のストレージ設定を行う。
Storage {
Name = owncloud
Address = 192.168.1.5 # bacula-sdの入っているサーバのIPアドレス
SDPort = 9103
Password = "パスワード"
Device = owncloud
Media Type = File
Maximum Concurrent Jobs = 10
}
NameはJobで記載したものと同一とする必要がある。
-
Address
の設定は注意。
Address
はlocalhost
と指定してはならない。
クライアント側から見たときの接続先をここに書く必要がある。
(クライアントが接続先情報としてこの設定値を使うため)
localhostと書いてしまうと、クライアントがサーバに接続しようとした時に、 接続先はlocalhost=クライアント自身となってしまい、バックアップデータを送ることができない。
バックアップサーバのIPアドレスを記載するか、クライアントが名前解決できればホスト名等でも良い。
なお、bacula-sdはbacula-dirのサーバとは分散できる。
今回は同一サーバなため、バックアップサーバのIPアドレスとしている。 -
SDPort
はbacula-sdのポート番号で9103。これはデフォルトのままで良い。 Device
の設定はbacula-sd.confの設定に関わる。
bacula-sd.confのDeviceリソースと名前を同一にする必要がある。
bacula-sd.confの説明は別途行う。-
Media Type
はFileとしている。HDD等のストレージ上(ファイルシステム上)にファイルを生成し、バックアップを行う。
テープバックアップなどにも対応しており、その場合はTapeと記載する。 -
Maximum Concurrent Jobs
はバックアップ処理の最大同時実行数となる。
あまり同時に動かすものもないのでデフォルトで問題ない。
Pool¶
このPoolの設定がバックアップ世代の管理の肝となる。
PoolはStorage上に生成される。
なお、StorageリソースのDeviceでbacula-sd.confの設定を参照しており、
実際のファイル配置先はbacula-sd.confに記載することになる。(bacula-sd編で記載)
# owncloudがフルバックアップ時に使うPool
Pool {
Name = owncloud-Full
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 1 months
Label Format = "owncloud-Full-"
Maximum Volume Bytes = 800G
Maximum Volumes = 3
}
# owncloudが差分バックアップ時に使うPool
Pool {
Name = owncloud-Diff
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 62 days
Label Format = "owncloud-Diff-"
Maximum Volume Bytes = 200G
Maximum Volumes = 5
}
# owncloudが増分バックアップ時に使うPool
Pool {
Name = owncloud-Inc
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 62 days
Label Format = "owncloud-Inc-"
Maximum Volume Bytes = 50G
Maximum Volumes = 10
}
Name
はJobのものと同一に設定する必要がある。
上記は3つのPoolをバックアップ方式ごとに分散している。
もちろん一つのPoolのみで済ませることもできる。
自身の場合、分けたほうが管理しやすいと考え分けることにした。
Recycle、AutoPrune
は名前の通りリサイクルをする、自動削除をする設定となる。
どちらもyesに設定されると、古いデータを削除してくれるようになる。
その削除対象となるのはVolume Retentionで指定した日付を超えたものとなる。Label Format
はバックアップ用のファイルを生成するときのファイルの命名ルールとなる。
ファイル生成時、勝手に番号を追記してくれる。Maximum Volume Bytes
はバックアップ用ファイルの1ファイルの最大容量となる。
1つファイルを生成し、そこにバックアップデータを追記していくのだが、この設定値を超えると新しいバックアップ用ファイルを生成する。Maximum Volumes
は最大何個のバックアップ用ファイルを生成するか、の設定となる。
この値を超えると古いものが削除される。
上記の例でいえばowncloud-Fullについて、以下の通りとなる。
- 1ヶ月を超えた古いバックアップ用ファイルは削除する
- バックアップ用ファイルの1ファイルは最大800GBとする
- バックアップ用ファイルは最大3つまで生成する
実際にバックアップを運用すると以下のようにファイルが生成される(2018/3/22時点)
合計 2.1T
-rw-r-----. 1 bacula tape 55G 3月 19 04:06 owncloud-Diff-0007
-rw-r-----. 1 bacula tape 800G 3月 5 12:03 owncloud-Full-0020
-rw-r-----. 1 bacula tape 425G 3月 5 17:36 owncloud-Full-0021
-rw-r-----. 1 bacula tape 800G 2月 5 12:58 owncloud-Full-0022
-rw-r-----. 1 bacula tape 15G 3月 22 04:05 owncloud-Inc-0005
フルバックアップを行うと1TB以上あるため、毎回800GBを超えて新しいファイルが生成される。
次回のフルバックアップ時(上記の例だと4月)、まずは800GBに達していない"owncloud-Full-0021"にデータを追記し、800GBを超えると保存期間を過ぎた"owncloud-Full-0022"を削除し、新しいバックアップ用ファイルを生成し、そこにバックアップを行っていく。
4月のバックアップでは3月バックアップデータを残しつつ2月のデータを削除する。
バックアップストレージサイズが3TBしかなかったため、このようにバックアップを回していくとうまく動かすことができた。
必要な設定は以上となる。
bacula-dir全体の設定例¶
最後にまるまる設定ファイルを貼り付けておく。
# パスワード以外はデフォルトのままで基本良い。
Director {
Name = bacula-dir
DIRport = 9101
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/spool/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 20
Password = "パスワード"
Messages = Daemon
}
# デフォルトのジョブ設定★
# 下記のJobリソースで設定を入れないものはこのDefsの設定が適用される
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Client = bacula-fd
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = File1
Messages = Standard
Pool = File1
Write Bootstrap = "/var/spool/bacula/%c.bsr"
}
# ジョブごとのバックアップ設定★
# owncloudのバックアップ設定
# バックアップ対象ごとに設定する。
Job {
Name = "owncloud"
Type = Backup
Client = owncloud
FileSet = "owncloud"
Schedule = "owncloudCycle"
Storage = owncloud
Messages = Standard
Full Backup Pool = owncloud-Full
Incremental Backup Pool = owncloud-Inc
Differential Backup Pool = owncloud-Diff
Pool = File1
SpoolAttributes = yes
Priority = 10
Write Bootstrap = "/var/spool/bacula/%c.bsr"
}
# バックアップカタログのバックアップ。
# 基本デフォルトのままで良い
# バックアップカタログとは、バックアップの実行記録等を保存しているデータベース。
# リストア時にこちらも必要となる。
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Schedule = "WeeklyCycleAfterBackup"
RunBeforeJob = "/usr/libexec/bacula/make_catalog_backup.pl MyCatalog"
RunAfterJob = "/usr/libexec/bacula/delete_catalog_backup"
Write Bootstrap = "/var/spool/bacula/%n.bsr"
Priority = 11
}
# リストアのための設定
# こちらは最初から記載されているもので変更する必要は特に無い
Job {
Name = "RestoreFiles"
Type = Restore
Client=bacula-fd
Storage = File1
FileSet="Full Set"
Pool = File1
Messages = Standard
Where = /tmp/bacula-restores
}
# owncloudのバックアップのリストア設定★
Job {
Name = "Restoreowncloud"
Type = Restore
Client=owncloud
Storage = owncloud
FileSet="owncloud"
Full Backup Pool = owncloud-Full
Incremental Backup Pool = owncloud-Inc
Differential Backup Pool = owncloud-Diff
Pool = File1
Messages = Standard
Where = /tmp/bacula-restores
}
# バックアップ対象の指定
# こちらはデフォルトの設定
FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
}
File = /
}
Exclude {
File = /var/spool/bacula
File = /tmp
File = /proc
File = /sys
File = /.journal
File = /.fsck
}
}
# owncloudのバックアップ対象の指定★
FileSet {
Name = "owncloud"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /exstorage/owncloud
File = /var/lib/pgsql/9.4/basebackup
File = /var/lib/pgsql/9.4/wal
File = /exstorage2/samba
}
}
# バックアップカタログのバックアップ対象の指定
FileSet {
Name = "Catalog"
Include {
Options {
signature = MD5
}
File = "/var/spool/bacula/bacula.sql"
}
}
# ジョブ実行スケジュール
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
}
# owncloudのバックアップジョブの実行スケジュール★
Schedule {
Name = "owncloudCycle"
Run = Full 1st mon at 04:05
Run = Differential 2nd-5th mon at 04:05
Run = Incremental tue-sat at 04:05
}
# バックアップカタログのバックアップのジョブ実行スケジュール
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 23:10
}
# バックアップ先の設定
# サーバ自身のバックアップカタログのバックアップも行うので
# こちらはサーバ自身の接続先の設定となる。基本デフォルトで良い。
Client {
Name = bacula-fd
Address = localhost
FDPort = 9102
Catalog = MyCatalog
Password = "パスワード"
File Retention = 60 days
Job Retention = 6 months
AutoPrune = yes
}
# owncloudのバックアップ先情報★
Client {
Name = owncloud
Address = 192.168.1.10 # クライアントのIPアドレス
FDPort = 9102
Catalog = MyCatalog
Password = "パスワード"
File Retention = 30 days
Job Retention = 6 months
AutoPrune = yes
}
# bacula-sdの動いているサーバの情報
# 今回はbacula-dirとbacula-sdは同じサーバとなる。
# Addressにlocalhostを指定してはならない(ここポイント)
Storage {
Name = File1
Address = 192.168.1.5 # bacula-sdの動いているサーバのIPアドレス
SDPort = 9103
Password = "パスワード"
Device = File1
Media Type = File
Maximum Concurrent Jobs = 10
}
# owncloudのジョブのストレージ情報★
Storage {
Name = owncloud
Address = 192.168.1.5 #bacula-sdの入っているサーバのIPアドレス
SDPort = 9103
Password = "パスワード"
Device = owncloud
Media Type = File
Maximum Concurrent Jobs = 10
}
# カタログに関する情報。デフォルトのままで良い。
Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "パスワード"
}
# ログ出力先に関する設定。基本デフォルトのままで良い。
# ログ出力先を変えたり、メール送信設定を変えるならここ。
Messages {
Name = Standard
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/sbin/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/log/bacula/bacula.log" = all, !skipped
catalog = all
}
Messages {
Name = Daemon
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/var/log/bacula/bacula.log" = all, !skipped
}
# バックアップ保存先のPool情報。
# バックアップ世代管理等はこちらに設定する
# 今回だとDefaultのPoolは使用していないが、
# こちらの設定は消さずに残してある。(特に理由はない)
Pool {
Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days
Maximum Volume Bytes = 50G
Maximum Volumes = 100
}
# バックアップカタログが使用しているPool
Pool {
Name = File1
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days
Maximum Volume Bytes = 50G
Maximum Volumes = 10
Label Format = "Vol-"
}
# owncloudが使用しているPool★
# こちらはFullBackupが使用
# Full,Diff,IncでPoolを分ける必要もないが、理由あって分けている(後述)
# こちらのほうがPool管理しやすいので個人的には分けたほうがいいと考えている。
Pool {
Name = owncloud-Full
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 1 months
Label Format = "owncloud-Full-"
Maximum Volume Bytes = 800G
Maximum Volumes = 3
}
# owncloudが差分バックアップ時に使うPool★
Pool {
Name = owncloud-Diff
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 62 days
Label Format = "owncloud-Diff-"
Maximum Volume Bytes = 200G
Maximum Volumes = 5
}
# owncloudが増分バックアップ時に使うPool★
Pool {
Name = owncloud-Inc
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 62 days
Label Format = "owncloud-Inc-"
Maximum Volume Bytes = 50G
Maximum Volumes = 10
}
# デフォルトのままで良い設定
Pool {
Name = Scratch
Pool Type = Backup
}
# Consoleに関する設定と思われるが、パスワードを設定する以外は
# デフォルトのままで良い。
Console {
Name = bacula-mon
Password = "パスワード"
CommandACL = status, .status
}