2006年 11月 21日 火曜日
やっぱり Sun がスキ!
ZFS のレプリカを作成する
今回は、ZFS のファイルシステムを筐体間でレプリカを作成する方法を
紹介します。
ZFS は、ファイルシステムのスナップショットをバックアップ/リストアする
機能を備えており、これを使う事でファイルシステムのリモートコピーを作成す
る事ができます。
さらに、ZFSはスナップショットの差分バックアップも取得可能なので、
バックアップ/リストアする為のデータ量を最小限に抑える事も可能です。
それでは、実際にファイルシステムのレプリカを作成してみましょう。
今回は、motoサーバにある pool/testdata1 ファイルシステムを、sakiサーバ
の pool/testdata2 にレプリカを作成してみます。
このテストを行う前提環境として、ファイルシステムのレプリカ情報を ssh で自動
転送する為に、root 権限で ssh の自動ログインが可能な環境を構築する必要があります。
<Step.1>
まずは、コピー元のサーバ(moto)にて最新のスナップショット(pool/testdata1@snap-1) を作成します。moto# zfs snapshot pool/testdata1@snap-1
<Step.2>
最初の一回だけ ZFS pool 内の全データをコピー先サーバ(saki)に転送します。moto# zfs send pool/testdata1@snap-1 | ssh saki zfs recv pool/testdata2@snap-1この時点でコピー元サーバ(moto)のスナップショット testdata1@snap-1 がコピー先サーバ(saki)に 反映されました。
<Step.3>
ここで差分を作成する為に pool/testdata1ファイルシステム内に新規ファイルを数個作成します。
<Step.4>
最新ファイルシステムのスナップショット(pool/testdata1@snap-2)を作成します。moto# zfs snapshot pool/testdata1@snap-2
<Step.5>
差分データ(snap-1と snap-2 の差分)を抽出してレプリカを作成します。
もし、コピー先のファイルシステムに対して内容が変更され、前回のスナップショット (pool/testdata2@snap-1) と違う 内容になっていた場合、前回のスナップショットにロールバックする必要があります。moto# zfs send -i pool/testdata1@snap-1 pool/testdata1@snap-2 | \ ssh saki zfs recv pool/testdata2
これで正・副ファイルシステムの同期が可能になりました。これ以降は Step.4 〜 Step.5 を
繰り返す事により差分バックアップによる ZFS ファイルシステムの筐体間レプリカが作成可能
になります。
この手順は、リアルタイムでの同期は難しいですが、一日一回の同期をとる(バックアップをとる) 運用には向いているのではないでしょうか? X4500 などニアラインストレージとして使用する場合、 ファイルシステムのレプリカを別筐体に作成する運用も多いと思います。
[注意事項]
レプリケート実行中は、コピー先のファイルシステムはアンマウントされる為、
アンマウントができない状態の時は失敗します。
[エラー内容]
cannot unmount '/pool/testdata2': デバイスは使用中です cannot receive: dataset is busy cannot mount '/pool/testdata2': directory is not empty
Posted at 06:02午後 11 21, 2006 by Naoyuki Yamada in Sun | 投稿されたコメント[1]