deferred-sync 名前 deferred-sync - 遅延した同期をおこないファイルを保護する 書式 exec/deferred-sync 説明 GNU/Linux を利用していて、ファイルに非可逆な変更を加えた あとで以前の状態に戻したくなることは稀にある。バージョン管理 システムであらかじめ管理していればいいが、システムの設定 ファイルやホームディレクトリのデータなどあらかじめ管理されて いなかったファイルを戻したくなることも多い。 deferred-sync は保護対象とするべきファイルを定期的に 一ヶ所にコピーして世代管理し、リモートホストへバックアップ するといった目的で生み出された。 リポジトリサーバーやデータベースサーバーの対障害用バックアップ、 ファイルサーバーや NAS のバックアップ、VPS やクラウド上の ホストの相互バックアップといった用途に広く利用できる。 実体はシェルスクリプトであるが、プラグイン形式で拡張すること ができる。これによりデータのバックアップと同時に例えばシステム のアップグレードやデータベースのダンプなど様々な用途に使う ことのできる汎用的なフレームワークとなっている。 プラグインの詳細は PLUGINS ファイルを参照。 プラグインのうちどれを有効にするかは環境設定ファイルである sync.conf で設定する。 ファイルの世代管理やリモートホストへの転送のためには rsync を内部的に利用している。したがって耐障害性や信頼性は rsync (及び ssh) に依存する。 詳しくは rsync(1) の man ページを参照のこと。 ======== 全体構成 ======== 主なディレクトリとファイルの構成は以下の通りである。 . | +-exec | deferred-sync | 実行ファイル | 設定ファイルを読み込み lib/load を動作させ | その標準出力及びエラー出力をロギングする | +-config | これら設定ファイルの実体は /etc/opt/ 以下に移動し | このファイルはシンボリックリンクとするのが望ましい | | sync.conf | 全体の動作を決定する設定ファイル | exclude.conf | 処理対象外を羅列したファイル | 一行ずつファイル名または拡張子を記述する | いずれかにマッチしたファイルは処理の対象外となる | +-lib | load | プラグインを順次読み込む | | plugins | プラグインと呼ばれるスクリプトが格納される | 既定で用意されたプラグインには以下のものがある | | get_resources | リソースの取得をおこなう | system_upgrade | システムを最新化する | dump_svn | SVN ダンプを取得する | dump_mysql | MySQL ダンプを取得する | incremental_backup | 世代バックアップをする | backup_to_remote | リモートホストへ同期する | get_remote_dir | リモートのディレクトリをローカルに同期する | +-install.sh | 引数で指定したディレクトリに deferred-sync を | インストールする | 引数を省略した場合 /opt/deferred-sync にインストールされる | +-cron | deferred-sync | オプション無しでインストーラーを実行した場合 | ここにある cron スクリプトが配置される | +-test | このディレクトリにはテストのためのファイルが置かれる | +-test.sh | テストをすべて実行する | +-doc README 本ドキュメント PLUGINS プラグイン一覧 ====== 運用例 ====== cron から deferred-sync/exec/ を定期的に 実行するように設定する。これにより保護対象のファイル 及びディレクトリが自動的に一箇所に集められる。 バックアップ用にリモートホストを異なる場所に設置して おくことで、自動的に同期がおこなわれ、障害発生時などに リモートから復旧することが可能となる。 またファイルは世代バックアップされているため、誤操作 でファイルを上書きした場合でも、以前の世代から復旧す ることも可能である。保存する世代数は設定ファイルで 決定する。 +----------------------+ | 本 番 環 境 | (データセンター) +----------------------+ | | cron で毎日実行され同期される | +----------------------+ | バックアップサーバー | (遠隔地) +----------------------+ これらは物理マシンである必要はなく、物理的に独立した ハイパーバイザー上の別の仮想マシンでも良い。 ======== 動作環境 ======== 一般的な GNU/Linux 及び UNIX 互換環境で動作する。 - Red Hat Enterprise Linux 5 以降 - CentOS 5 以降 - Scientific Linux 5 以降 - Debian GNU/Linux 5 以降 - Ubuntu 8.04 LTS 以降 - Solaris 10 以降 - Mac OS X 10.5 以降 一部のプラグインは Solaris と Mac OS X に未対応である。 ============ インストール ============ install.sh を実行することで ソフトウェアをインストールすることができる。 第 1 引数にはインストール先のディレクトリを指定する。 デフォルトは /opt/deferred-sync である。 このディレクトリは通常 root 権限が無いと書き込めない ため、内部的に sudo を利用する。 第 2 引数には nosudo を指定する。 たとえば第 1 引数に ~/local/deferred-sync を指定した 場合は sudo を利用する必要が無い。 (ユーザーのホームディレクトリにインストールする例) $ install.sh ~/local/deferred-sync nosudo (/usr/local/deferred-sync にインストールする例) $ install.sh /usr/local/deferred-sync (/opt/deferred-sync にインストールする例) $ install.sh インストールが完了したら次項に示す設定ファイルを 編集し、動作をカスタマイズする。 引数無しで実行した場合は、自動的に /etc/cron.daily と /etc/logrotate.d にファイルが配置され、日常の自動実行と ログローテーションが自動設定される。 ============================= 設定ファイル config/sync.conf ============================= deferred-sync の設定ファイルであり全体の動作を定義 する。パラメータは以下のように一行ずつ定義する。 値=定義 # が出現した場合残りはコメント扱いとなる。 定義が複数の場合は " " で囲みスペースを開けて羅列する。 各プラグインで必要な変数はすべてこの設定ファイル config/sync.conf 内に定義できる。 設定のなかにはパスワードそのものを記述することもある。 したがって、この設定ファイルは管理担当ユーザーが 参照のみ可能となるようパーミッションを設定しておく ことが望ましい。 ============== 主要な設定項目 ============== 設定ファイル config/sync.conf は単なる実行形式の スクリプトとして読み込まれるため柔軟な設定が可能である。 主な設定項目としては以下がある。 DRY_RUN true にした場合 rsync を使うタイプのプラグインでの 処理は実際には実行されない。 EXCLUDEFILE 処理の対象外とするファイル名。一行ごとにファイル名の パターンを記述する。ここに記述した文字列に合致する ファイルは処理対象外となる。 JOBLOG 実行結果のログファイル名。 STARTSCRIPT 全プラグインの処理を開始する前に起動するスクリプト名。 前処理を記述する。 ENDSCRIPT 全プラグインの処理を終了した後に起動するスクリプト名。 後処理を記述する。 ADMIN_MAIL_ADDRESS ここにシステム管理者のメールアドレスを記載すると 終了時に結果がメールされる。 メールを送信する場合は mail と nkf コマンドを利用する。 したがって mailx 及び nkf パッケージを予めシステムに インストールしておく必要がある。 LOAD_PLUGINS_ALL 強制的にすべてのプラグインを読み込む。 通常は false に設定する。 PLUGINS ロードするプラグイン名を個別に指定する。 たとえば SVN のダンプを取得し世代管理した上で リモートホストに転送するなら以下の通りになる。 PLUGINS=" dump_svn incremental_backup backup_to_remote " ================ テストの実施方法 ================ deferred-sync にはユニットテスト機構があり 本番環境で動作させる前にテスト実行して正常な実行を 確認することができる。 test.sh を実行すると付属するテストをすべて実行する。 exec/deferred-sync の引数には設定ファイル名を指定することができる。 たとえば以下のように test/test.conf を指定することで テスト用の設定で処理を実行できる。 $ exec/deferred-sync test/test.conf また --test が引数に指定されると test/test.conf が 指定されたものと見なされる。 $ exec/deferred-sync --test