-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.ja
284 lines (221 loc) · 9.32 KB
/
README.ja
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
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