Contents
baculaとは
GPLで提供されているバックアップツールで大規模なバックアップシステムを構築できる。
似たようなソリューションとして、広く知られているAmandaが、またイメージとしてバックアップするMondo Rescueがある。
baculaの特徴としてはネットワーク越しに統括的な管理ができ、テープ装置やファイルサーバ等の違いを専用のデーモン(Storage Daemon)が吸収してくれ幅広い装置に対応する。その反面、DAT等の使用経験がないと「なぜラベルを付けるの?」とか理解しにくい箇所があるかも知れない。
はじめに
- director/storage/Fileデーモンそれぞれにパスワードを設定するので予めパスワードを決定しておく。運用体制によっては3つとも同じパスワードでも構わない。
- データベース名、データベース接続ユーザを指定する場合はそれらを決めておく。デフォルトでは共に「bacula」が使われる。
- データベースの接続パスワードを決めておく。
- ここではWindows版クライアントについては触れない。(プログラムは提供されている。)
- コマンドラインに拒否反応が出る人向けに、また、運用のハードルが低くなるように、今回はWebminを使った方法で説明している。
構成と役割
一般的には、バックアップを取りたいマシンでFile Daemonを動かし、その他をバックアップ管理サーバとして動かす。
なお、すべてを一台のマシンで動かしても構わない。
同じ構成のサーバが何台もあり、それらをバックアップする場合に特にbaculaが有用となる。
DBMの選定
baculaはバックアップ情報の保存にデータベースを使用する。
現在はMySQL/PostgreSQL/SQLiteが使える。Beagle/mSQL/GNU SQL/Oracleはライセンスなどの関係で見送っているようだ。
普段PostgreSQLで構築する事が多いので、ここでもPostgreSQLを利用する。
商用開発などソースを公開しない場合は、ライブラリ利用時のライセンスがグレーだとかGPLv2/v3の組み合わせが厄介なMySQLを避けPostgreSQLで構築する事が多い。
当然の事ながら商用ライセンス版のMySQLであれば、開発したソースを公開しなくて良く、他ソフトとのライセンスの組み合わせを調査するコストは不要となる。※MySQLでもbaculaシステムを構築したが、DBのインストールが違うだけでbaculaシステムを使用する上での差は感じなかった。
リポジトリの設定
標準リポジトリで提供されているbaculaはバージョンが古いのでepelから取得するようリポジトリを登録する。
1 2 | cd /etc/yum.repos.d wget http://repos.fedorapeople.org/repos/slaanesh/bacula/epel-bacula.repo |
サーバ側のインストール
先にPostgreSQLをインストール&構築しておく。
1 | yum -y install bacula-director bacula-storage bacula-console bacula-client |
Directorの設定
以下のハイライト部分を書き換える。
/etc/bacula/bacula-dir.conf
15 16 17 18 19 20 21 22 23 24 | Director { # define myself Name = bacula-dir DIRport = 9101 # where we listen for UA connections QueryFile = "/etc/bacula/query.sql" WorkingDirectory = "/var/spool/bacula" PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 Password = "@@DIR_PASSWORD@@" # Console password Messages = Daemon } |
・「@@DIR_PASSWORD@@」をdirectorのパスワードに変更する。
155 156 157 158 159 160 161 162 163 164 | Client { Name = bacula-fd Address = localhost FDPort = 9102 Catalog = MyCatalog Password = "@@FD_PASSWORD@@" # password for FileDaemon File Retention = 30 days # 30 days Job Retention = 6 months # six months AutoPrune = yes # Prune expired Jobs/Files } |
・「localhost」をバックアップクライアント(保存したいマシン)のホスト名/IPアドレスに変更する。
・「@@FD_PASSWORD@@」をFile Daemonのパスワードに変更する。
182 183 184 185 186 187 188 189 190 191 | # Definition of file storage device Storage { Name = File # Do not use "localhost" here Address = localhost # N.B. Use a fully qualified name here SDPort = 9103 Password = "@@SD_PASSWORD@@" Device = FileStorage Media Type = File } |
・「localhost」をStorage Daemonのホスト名/IPアドレスに変更する。DirectorとStorage Daemonが同一サーバであっても、File Daemonから見たStorage Daemonを指定するので、localhostと書くとFile Daemon自身になってしまう。
231 232 233 234 235 236 | Catalog { Name = MyCatalog # Uncomment the following line if you want the dbi driver # dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport = dbname = "bacula"; dbuser = "bacula"; dbpassword = "" } |
・dbdriverの行のコメント「#」を外し、「dbaddress」はデータベースサーバのIPアドレスに、「dbport」はPostgreSQLのポート(デフォルトは5432)、「dbpassword」はデータベースの接続パスワードに変更する。
※データベース名や接続ユーザを「bacula」から変更する場合はそれぞれ書き換える。
309 310 311 312 313 | Console { Name = bacula-mon Password = "@@MON_DIR_PASSWORD@@" CommandACL = status, .status } |
・「@@MON_DIR_PASSWORD@@」をdirectorのパスワードに変更する。
File Daemonの設定
/etc/bacula/bacula-fd.conf
13 14 15 16 | Director { Name = bacula-dir Password = "@@FD_PASSWORD@@" } |
・「@@FD_PASSWORD@@」をFile Daemonのパスワードに変更する。
22 23 24 25 26 | Director { Name = bacula-mon Password = "@@MON_FD_PASSWORD@@" Monitor = yes } |
・「@@MON_FD_PASSWORD@@」をFile Daemonのパスワードに変更する。
Storage Daemonの設定
/etc/bacula/bacula-sd.conf
24 25 26 27 | Director { Name = bacula-dir Password = "@@SD_PASSWORD@@" } |
・「@@SD_PASSWORD@@」をStorage Daemonのパスワードに変更する。
33 34 35 36 37 | Director { Name = bacula-mon Password = "@@MON_SD_PASSWORD@@" Monitor = yes } |
・「@@MON_SD_PASSWORD@@」をStorage Daemonのパスワードに変更する。
52 53 54 55 56 57 58 59 60 61 | Device { Name = FileStorage Media Type = File Archive Device = /tmp LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; } |
・アーカイブ保存場所の初期値が/tmpになっているが、tmpwatch等の絡みで思わぬトラブルを起こさないように/var/bacula等にディレクトリを作成し、そこに保存するよう変更する。
1 2 | mkdir /var/bacula chown bacula.tape /var/bacula |
consoleの設定
5 6 7 8 9 10 | Director { Name = bacula-dir DIRport = 9101 address = localhost Password = "@@DIR_PASSWORD@@" } |
・「@@DIR_PASSWORD@@」をDirectorのパスワードに変更する。
トレイモニタの設定
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Monitor { Name = bacula-mon Password = "@@MON_DIR_PASSWORD@@" # password for the Directors RefreshInterval = 30 seconds } Client { Name = bacula-fd Address = localhost FDPort = 9102 Password = "@@MON_FD_PASSWORD@@" # password for FileDaemon } Storage { Name = bacula-sd Address = localhost SDPort = 9103 Password = "@@MON_SD_PASSWORD@@" # password for StorageDaemon } |
・「@@MON_DIR_PASSWORD@@」をディレクターのパスワードに変更する。
・「@@MON_FD_PASSWORD@@」をFile Daemonのパスワードに変更する。
・「@@MON_SD_PASSWORD@@」をStorage Daemonのパスワードに変更する。
データベースの構築
データベース作成
1 2 3 | su - postgres cd /usr/libexec/bacula ./create_postgresql_database |
PostgreSQLのスーパーユーザになってからSQLスクリプトを動かす。
環境によってはスーパーユーザのパスワードを3回入力する。
なお、./create_postgresql_database -U postgres では、3回目の認証に-Uが効かないのでスーパーユーザになってから実行したが、ログインユーザのアカウントがスーバーユーザ権限で作ってあれば-Uの指定でも実行できると思われる。
CREATE DATABASEのデフォルトがUTF-8になるよう設定してあってもエンコーディングがSQL_ASCIIで作成されるが、これで良い。UTF-8だと管理上のファイル名が化けてしまう。
テーブル作成
1 | ./make_postgresql_tables |
権限設定
1 | ./grant_postgresql_privileges |
権限設定と同時にbaculaユーザが作られるので、パスワードを設定する。あるいは、grant_postgresql_privilegesの8行目付近でパスワードを空で設定しているので、そのスクリプト自体を書き換えてから実行する。
1 | psql |
1 2 3 4 5 6 7 8 | SELECT * FROM pg_user WHERE usename = 'bacula'; usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig ---------+----------+-------------+----------+-----------+---------+----------+----------+----------- bacula | 16742 | f | f | f | f | ******** | | (1 行) ALTER USER bacula WITH PASSWORD '[パスワード]'; ALTER ROLE \q |
・「[パスワード]」はbacula-dir.confの「dbpassword = 」に設定した値。
ラベル設定
バックアップメディアの作成
一旦DirectorとStorage Daemonを起動する。
1 2 | service bacula-dir start service bacula-sd start |
bconsoleコマンドでbacula consoleを起動する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | bconsole Connecting to Director localhost:9101 1000 OK: bacula-dir Version: 5.2.13 (19 February 2013) Enter a period to cancel a command. *label Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" Automatically selected Storage: File Enter new Volume name: lbl Defined Pools: 1: Default 2: File 3: Scratch Select the Pool (1-3): 1 Connecting to Storage daemon File at 192.168.1.15:9103 ... Sending label command for Volume "lbl" Slot 0 ... 3000 OK label. VolBytes=188 DVD=0 Volume="lbl" Device="FileStorage" (/var/bacula) Catalog record for Volume "lbl", Slot 0 successfully created. Requesting to mount FileStorage ... 3906 File device ""FileStorage" (/var/bacula)" is always mounted. You have messages. *quit |
・ラベルを付けるのでlabelと入力する。
・ラベル名を入力する。
・プール定義で1: Defaultを選択する。(場合によっては2: Fileも)
・quitでbconsoleを終了する。
サーバ起動時の設定
サービスを止める。
1 2 3 | service bacula-dir stop service bacula-sd stop service bacula-fd stop |
自動起動になっているか確認する。
1 2 3 | chkconfig --list bacula-dir chkconfig --list bacula-sd chkconfig --list bacula-fd |
該当runlevelがoffになっていたらonに変更する。
1 2 3 | chkconfig bacula-dir on chkconfig bacula-sd on chkconfig bacula-fd on |
確認事項
・ポートは開放されているか。
上記設定でポート番号を変えていなければ9101~9103。
クライアント側のインストール
1 | yum -y install bacula-client |
File Daemonの設定
意味は同じなので、サーバ側のインストールを参照。
確認事項
・ポートは開放されているか。
上記設定でポート番号を変えていなければ9102。
webminをインストール
インストールされていなければwebminのインストールを参考にインストールする。
また、コントロールパネル→java→セキュリティタブ→サイト・リストの編集でwebminサーバのアドレスおよびポートを追加しておく。
baculaのページにアクセスするには左カラムのメニューの「システム」→「Bacula Backup System」をクリックするが、この時
Failed to connect to the Bacula database : Failed to load the database DBI driver Pg at ./bacula-backup-lib.pl line 45. Maybe it is not set up, or the module configuration is incorrect.
などと表示された場合は、perlからデータベースにアクセスできるようにするためDBIモジュールとPostgreSLQのDBDモジュールをインストールする。
1 2 | yum -y install perl-DBI perl-DBD-Pg service webmin restart |
また「Bacula Backup System」自体が無い場合は、左カラムメニューの下にあるserach:の検索窓に「bacula」と入力してリターンキーを入力すると、「Bacula Backup System」と表示されるのでそれをクリックする。
Failed to connect to the Bacula database : Failed to login to the database bacula : fe_sendauth: no password supplied. Maybe it is not set up, or the module configuration is incorrect.
などと表示された場合は、リンクのmodule configurationをクリックし、先ほどbaculaユーザに設定したパスワードをPassword to login withに設定する。
baculaのトップ画面に戻ると「Process statuses: Bacula Director daemon – Down | Storage daemon – Down」と表示されており、まだ起動していない事がわかる。
「start bacula」をクリックしてデーモンを起動する。
「Volume Pools」をクリックする。
該当Poolをクリックして「Edit Volume Pool」画面を表示する。
「Maximum jobs per volume」を「1」にして1volumeに1jobとし、複数jobの追記はさせない。
「Automatically label volumes prefix」には新しくボリュームを作る時のラベルに付ける接頭辞を指定しておく。