Skip to content
Branch: master
Find file History
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
COPYING
COPYING.LESSER
LICENSE
PLUGINS
README

README

deferred-sync

名前
 deferred-sync - 遅延した同期をおこないファイルを保護する

書式
 bin/run

説明
 GNU/Linux を利用していて、ファイルに非可逆な変更を加えた
あとで以前の状態に戻したくなることは稀にある。バージョン管理
システムであらかじめ管理していればいいが、システムの設定
ファイルやホームディレクトリのデータなどあらかじめ管理されて
いなかったファイルを戻したくなることも多い。

 deferred-sync は保護対象とするべきファイルを定期的に
一ヶ所にコピーして世代管理し、リモートホストへバックアップ
するといった目的で生み出された。

リポジトリサーバーやデータベースサーバーの対障害用バックアップ、
ファイルサーバーや NAS のバックアップ、VPS やクラウド上の
ホストの相互バックアップといった用途に広く利用できる。

実体はシェルスクリプトであるが、プラグイン形式で拡張すること
ができる。これによりデータのバックアップと同時に例えばシステム
のアップグレードやデータベースのダンプなど様々な用途に使う
ことのできる汎用的なフレームワークとなっている。

プラグインの詳細は PLUGINS ファイルを参照。

プラグインのうちどれを有効にするかは環境設定ファイルである
sync.conf で設定する。

ファイルの世代管理やリモートホストへの転送のためには rsync
を内部的に利用している。したがって耐障害性や信頼性は
rsync (及び ssh) に依存する。
詳しくは rsync(1) の man ページを参照のこと。


========
全体構成
========

主なディレクトリとファイルの構成は以下の通りである。
.
|
+-bin
|   run
|     実行ファイル
|     設定ファイルを読み込み 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/bin/run を定期的に
実行するように設定する。これにより保護対象のファイル
及びディレクトリが自動的に一箇所に集められる。

バックアップ用にリモートホストを異なる場所に設置して
おくことで、自動的に同期がおこなわれ、障害発生時などに
リモートから復旧することが可能となる。

またファイルは世代バックアップされているため、誤操作
でファイルを上書きした場合でも、以前の世代から復旧す
ることも可能である。保存する世代数は設定ファイルで
決定する。

+----------------------+
|     本 番 環 境      | (データセンター)
+----------------------+
           |
           | 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 を実行すると付属するテストをすべて実行する。

 bin/run の引数には設定ファイル名を指定することができる。
たとえば以下のように test/test.conf を指定することで
テスト用の設定で処理を実行できる。

$ bin/run test/test.conf

 また --test が引数に指定されると test/test.conf が
指定されたものと見なされる。
$ bin/run --test


You can’t perform that action at this time.