社内サーバのバックアップは以前までARCserveを使ってたんですが、Backup対象も増えて限界が来たので最近Baculaにしました。
その時の備忘録として、最初のインストールからどんな運用をしてるかまでを
設定例含めて紹介します!!
今回は【構築手順編その1】です。
レッドブルよりライフガード派です。
matsBです。(๑•̀ㅂ•́)و✧
Baculaって何?って方も結構多いかと思いますが、ざっくり説明すると「統合管理バックアップソフト」でNetVaultやARCserveとかに近いオープンソースのソフトです。
※厳密には違いますが、統合管理バックアップってとこだけを取った意味です。
Baculaは「構築が面倒」とか「動くまでに時間がかかる」とか言われてますが、こんな感じに作れば簡単だよーって事を紹介します!
環境
CentOS 6.7
MySQL 5.6
Bacula 7.4.4
前提
前提環境
MySQLをインストール済。
iptables等のFirewallは一旦無視してます。
サーバ情報
役割 | ホスト名 | IPアドレス |
---|---|---|
Director | quick-dir | 10.0.0.1 |
Client | quick-fd | 10.0.0.2 |
Client(DR用) | quick-dr | 10.0.0.3 |
Storage | quick-sd | 10.0.0.10 |
下準備
リポジトリの追加
Baculaの7系を入れるためにBaculaのリポジトリを追加。
【CentOS6用】 [root@quick-dir ~]# wget https://copr.fedorainfracloud.org/coprs/slaanesh/Bacula/repo/epel-6/slaanesh-Bacula-epel-6.repo -O /etc/yum.repos.d/slaanesh-Bacula-epel-6.repo
bacula-dir(Bacula Director)の準備
yum でインストール
[root@quick-dir ~]# yum install -y bacula-client bacula-common bacula-console bacula-console-bat bacula-debuginfo bacula-devel bacula-director bacula-docs bacula-libs bacula-libs-sql bacula-traymonitor ※下記の2ファイル通りに実行すれば詰まるところは無いはずで、この記事も基本的に下記ファイルに則ってます。 [root@quick-dir ~]# /usr/share/doc/bacula-common-7.4.4/README.Redhat [root@quick-dir ~]# /usr/share/doc/bacula-common-7.4.4/quickstart_mysql.txt
BacualがMySQL使用するための準備
- 使用DBの選択
今回はMySQLを使用するので、MySQLを選択します [root@quick-dir ~]# alternatives --config libbaccats.so 3 プログラムがあり 'libbaccats.so' を提供します。 選択 コマンド ----------------------------------------------- 1 /usr/lib64/libbaccats-mysql.so 2 /usr/lib64/libbaccats-sqlite3.so *+ 3 /usr/lib64/libbaccats-postgresql.so Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1 [root@quick-dir ~]#
- DB/table/baculaユーザの作成
・DBの作成 [root@quick-dir ~]# /bin/sh /usr/libexec/bacula/create_mysql_database -u root -p Enter password: #←MySQLのパスワード(今回だったらrootのパスワード) Creation of bacula database succeeded. ・tableの作成 [root@quick-dir ~]# /bin/sh /usr/libexec/bacula/make_mysql_tables -u root -p Enter password: #←MySQLのパスワード(今回だったらrootのパスワード) Creation of Bacula MySQL tables succeeded. ・MySQLのbaculaユーザの作成 ※デフォルトだとパスワードなしになってしまいます。 [root@quick-dir ~]# /bin/sh /usr/libexec/bacula/grant_mysql_privileges -u root -p Enter password: #←MySQLのパスワード(今回だったらrootのパスワード) Created MySQL database user: bacula Enter password: #←MySQLのパスワード(今回だったらrootのパスワード) Host User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv Create_tablespace_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections plugin authentication_string password_expired password_last_changed password_lifetime account_locked localhost root Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y 0 0 0 0 mysql_native_password *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B N 2016-08-04 18:26:57 NULL N % bacula N N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0 mysql_native_password *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 N 2017-04-06 17:57:51 NULL N localhost bacula N N N N N N N N N N N N N N N N N N N N N N N N N N N N N 0 0 0 0mysql_native_password *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 N 2017-04-06 17:57:51 NULL N Privileges for user bacula granted on database bacula.
grant_mysql_privilegesをそのまま使うと、baculaユーザはパスワード無しです。
パスワードをちゃんと掛けたい場合は、MySQLで直接パスワード付けるか、grant_mysql_privileges内の「db_password=」にパスワードを入れてやってください。
#!/bin/sh # # shell script to grant privileges to the bacula database # # Copyright (C) 2000-2016 Kern Sibbald # License: BSD 2-Clause; see file LICENSE-FOSS # db_user=${db_user:-bacula} bindir=/usr/bin db_name=${db_name:-bacula} db_password=bacula_quick #bacula_quickってパスワードを付けたい場合 if [ "$db_password" != "" ]; then pass="identified by '$db_password'" fi
BacualのConfigの準備
- 権限周りを適切なのに変更していきます。
[root@quick-dir ~]# chown -R root:root /etc/bacula [root@quick-dir ~]# chmod 755 /etc/bacula [root@quick-dir ~]# chmod 640 /etc/bacula/* [root@quick-dir ~]# chgrp bacula /etc/bacula/bacula-dir.conf /etc/bacula/query.sql
- config内のBacula間で使用するパスワードを一括で置換します。
[root@quick-dir ~]# sed -i -e 's/@@DIR_PASSWORD@@/dir-password/g' \ -e 's/@@FD_PASSWORD@@/fd-password/g' \ -e 's/@@SD_PASSWORD@@/sd-password/g' \ -e 's/@@MON_DIR_PASSWORD@@/mon-dir-password/g' \ -e 's/@@MON_FD_PASSWORD@@/mon-fd-password/g' \ -e 's/@@MON_SD_PASSWORD@@/mon-sd-password/g' \ /etc/bacula/*.conf
- bconsoleを設定します。
[root@quick-dir ~]# cat /etc/bacula/bconsole.conf Director { Name = quick-dir # Director名 DIRport = 9101 # Directorポート address = 10.0.0.1 # DirectorのIPアドレス Password = "dir-password" # Directorのパスワード }
- 記述に問題無いかConfigをコマンドで確認します。
[root@quick-dir ~]# bconsole -t -c /etc/bacula/bconsole.conf [root@quick-dir ~]# bacula-dir -t -c /etc/bacula/bacula-dir.conf
- 問題なけば再起動して、bconsoleでstatusを取れるか確認します。
[root@quick-dir ~]# /etc/init.d/bacula-dir restart Stopping bacula-dir: [ OK ] Starting bacula-dir: [ OK ] [root@quick-dir ~]# echo status dir=quick-dir | bconsole Connecting to Director localhost:9101 1000 OK: 102 bacula-dir Version: 7.4.4 (20 September 2016) Enter a period to cancel a command. status dir=quick-dir bacula-dir Version: 7.4.4 (20 September 2016) x86_64-redhat-linux-gnu redhat Daemon started 05-Apr-17 18:15, conf reloaded 05-Apr-2017 18:15:06 Jobs: run=13, running=0 mode=0 Heap: heap=385,024 smbytes=345,677 max_bytes=393,653 bufs=947 max_bufs=1,202 Scheduled Jobs: Level Type Pri Scheduled Job Name Volume ===================================================================================
bacula-dir(Bacula Director)の設定
弊社ではDirectorの設定やテンプレートと、バックアップ対象のクライアントでConfigファイルを分割させて記述しています。って言うのも、作成経験のある方は分かると思いますが、バックアップクライアントが多くなるとbacula-dir.confの行が無限に増えてってConfigの上に行ったり下に行ったり、、、メンテナンスが凄くやりにくいです。
/etc/bacula/bacula-dir.conf
基本的に下記を設定してしまえば、その後そんなに困らずにクライアントを追加できるようになるはずです。
ちょいちょい必要な事は修正してますが、ほとんどがデフォルトのままで使用しています。
[root@quick-dir ~]# cat /etc/bacula/bacula-dir.conf ######################################################################## # # Director Information # ######################################################################## Director { Name = quick-dir DIRport = 9101 QueryFile = "/etc/bacula/query.sql" WorkingDirectory = "/var/spool/bacula" PidDirectory = "/var/run" Maximum Concurrent Jobs = 20 Password = "dir-password" Messages = Daemon } ######################################################################## # # Job Template # ######################################################################## JobDefs { Name = "DefaultJob" Type = Backup Level = Differential Client = localhost Schedule = "WeeklyCycle" Storage = backup-server Messages = Standard Pool = Default SpoolAttributes = yes Priority = 10 Write Bootstrap = "/var/spool/bacula/%c.bsr" } ######################################################################## # # Schedule # ######################################################################## Schedule { Name = "WeeklyCycle" Run = Full sun at 2:05 Run = Differential mon-sat at 2:05 } ######################################################################## # # bacula-sd Information # ######################################################################## Storage { Name = quick-sd Address = 10.0.0.10 SDPort = 9103 Password = "sd-password" Device = FileChgr1 Media Type = FileStorage Maximum Concurrent Jobs = 10 } ######################################################################## # # Messages Information # ######################################################################## 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 } # # Message delivery for daemon messages (no job). 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 Template # ######################################################################## Pool { Name = Default Pool Type = Backup Recycle = no AutoPrune = yes Volume Retention = 28 days Maximum Volume Jobs = 1 Maximum Volumes = 100 Label Format = "${Client}-${Level}Vol-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}_${JobId}" } Pool { Name = etc-Pool # ※1 Pool Type = Backup Recycle = no AutoPrune = yes Volume Retention = 1 days Maximum Volume Jobs = 1 Maximum Volumes = 10 Label Format = "${Client}-${Level}Vol-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}_${JobId}" } ######################################################################## # # Console Information # ######################################################################## Console { Name = bacula-mon Password = "mon-dir-password" CommandACL = status, .status } ######################################################################## # # Catalog Information # ######################################################################## Client { Name = localhost Address = localhost FDPort = 9102 Catalog = MyCatalog Password = "fd-password" File Retention = 30 days Job Retention = 1 months AutoPrune = yes } 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 = 12 # ※2 } Schedule { Name = "WeeklyCycleAfterBackup" Run = Full sun-sat at 2:10 } FileSet { Name = "Catalog" Include { Options { signature = MD5 } File = "/var/spool/bacula/bacula.sql" } } Catalog { Name = MyCatalog dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_quick" } ######################################################################## # # Bacula Clients # ######################################################################## @/etc/bacula/client/quick-fd.conf
※1【運用手順編】で説明しますが、空のバックアップJobのVolumeを保存する為にPoolを作成してます。
※2 デフォルトのPriorityは「11」ですが、【運用手順編】に出てくる空のバックアップJobの関係で「12」にしています。
※3 DR(disaster recovery)を目的としたクライアントです。
各バックアップクライアントのconfig
bacula-dir.confには外部ファイルとして読み込ませていますが、各クライアント毎にconfigを分けて運用するようにしました。 新しいバックアップクライアントを追加する場合、quick-fdを他のホスト名に一括置換すれば、すぐにクライアントが追加できるようになります。
[root@quick-dir ~]# cat /etc/bacula/client/quick-fd.conf ############################ # Job Information ############################ Job { Name = "quick-fd-job" Client = quick-fd JobDefs = "DefaultJob" FileSet= "quick-fd File Set" Full Backup Pool = quick-fd-Pool-Full # FullとDiffでPoolを分けてます Differential Backup Pool = quick-fd-Pool ClientRunBeforeJob = "/var/spool/bacula/mysql_backup.sh" # MySQLを使用してる想定で、 ClientRunAfterJob = "/var/spool/bacula/mysql_backup_del.sh" # Before/Afterでスクリプトをセット } ############################ # FileSet ############################ FileSet { Name = "quick-fd File Set" Include { Options { signature = MD5 Compression = GZIP } Options { wildfile = "*.log" # logやtmpをバックアップ対象から除外 wilddir = "*/logs" wilddir = "*/tmp" exclude = yes } File = /var/www/quick-fd # バックアップ対象 File = /etc File = /var/spool/cron File = /var/spool/bacula Options { Compression = GZIP # 上のOptionsでGZIPが効かなかったのでここでもセットしてます } } } ############################ # quick-fd Information ############################ Client { Name = quick-fd Address = 10.0.0.2 FDPort = 9102 Catalog = MyCatalog Password = "fd-password" File Retention = 30 days Job Retention = 1 months AutoPrune = yes } ############################ # Pool Information ############################ Pool { Name = quick-fd-Pool-Full Pool Type = Backup Recycle = no # Volumeの再利用はさせないように AutoPrune = yes # 保管期間が終わったらPurgedになるように Volume Retention = 28 days # 保管期間を4週間に Maximum Volume Jobs = 1 # 1Volumeに1Jobしか入らないように Maximum Volumes = 100 Label Format = "${Client}-${Level}Vol-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}_${JobId}" # ↑のフォーマットはパット見で分かりやすいようにしました。 # 上記の例で動かすとボリューム名は↓のようになります。 # Fullの場合:quick-fd-FullVol-2017-04-05_954 # Diffの場合:quick-fd-DifferentialVol-2017-04-05_954 # お尻に付けてるJobIDは、ボリューム名が被らないようにって理由で付けてます。 } Pool { Name = quick-fd-Pool Pool Type = Backup Recycle = no AutoPrune = yes Volume Retention = 28 days Maximum Volume Jobs = 1 Maximum Volumes = 100 Label Format = "${Client}-${Level}Vol-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}_${JobId}" }
とりあえずこれで、Director単体の設定は完了です。 次回は【構築手順編その2】 として、bacula-sd(Storage Daemon)とbacula-fd(Backup Client)の設定例と疎通確認方法を書きたいと思います。