文書集 >
ユーザーズマニュアル >
メタデータ冗長化 - チュートリアル
メタデータ冗長化 - チュートリアル
English | 日本語
この文書では、メタデータサーバを1:1構成で冗長化する方法を説明します。
1. インストール
ここではマスターgfmdを起動するホストをhost-a、スレーブgfmdを起動するホストをhost-bとします。
host-a / host-bのそれぞれにおいて、Gfarmのインストールを行います。
インストールはINSTALLドキュメントを参照してください。
2. セットアップ
2.1 マスターメタデータサーバの設定
メタデータサーバ間の接続で利用される権限である_gfarmmdユーザを作成します。
# useradd -c "Gfarm gfmd" -m _gfarmmd
|
メタデータサーバのセットアップをrootユーザで行います。
メタデータ冗長化を有効にするため,SETUP.ja で解説されている
config-gfarm実行の手順において、オプションに-rを追加してください。
- 補足1
メタデータ冗長化に使用するジャーナルファイルは、デフォルトでは/var/gfarm-metadata/journalディレクトリに保存されます。変更する場合は、config-gfarmに-jオプションを指定します。
- 補足2
既存のメタデータサーバに対しメタデータ冗長化を有効にするためには、gfmdを停止しPostgreSQLを起動したままの状態で、-rオプションをつけてconfig-gfarm-updateを実行します。
Gfarmの新しいバージョンをインストール
# /etc/init.d/gfmd stop
# config-gfarm-update -r --update
# /etc/init.d/gfmd start
|
- 補足3
メタデータ冗長化を有効にするためには、バックエンド・データベースとしてPostgreSQLを利用する必要があります。
host-bをスレーブとして登録します。
gfmdhost コマンドは、
Gfarm のシステム管理者 (gfarmadm グループ権限を持つユーザー) が実行します。
config-gfarm の -A オプションで指定したユーザが、
デフォルトの Gfarm システム管理者です。
$ gfmdhost -c host-b
$ gfmdhost -l
+ master - m (default) host-a 601
- slave sync c (default) host-b 601
|
gfarm2.confにmetadb_server_listを追加して、全てのメタデータサーバのホスト名とポート番号の一覧を記述します。
metadb_server_list host-a:601 host-b:601
|
rootユーザでメタデータをダンプします。
config-gfarm の際に、--prefix オプションや -l オプションを指定していた場合は、
gfdump.postgresql に対しても同じオプションを与えてください。
# gfdump.postgresql -d -f gfarm-pgsql.dmp
|
メタデータサーバ間の接続で利用される_gfarmmdユーザの共有鍵を作成します。
# su _gfarmmd
$ gfkey -f -p 31536000
|
- 補足1
メタデータサーバ間の認証は、共有鍵認証のみサポートしています。
2.2 スレーブメタデータサーバの設定
メタデータサーバ間の接続で利用される_gfarmmdユーザを作成し、
マスターメタデータサーバから共有鍵をコピーします。
# useradd -c "Gfarm gfmd" -m _gfarmmd
マスターメタデータサーバから共有鍵(~_gfarmmd/.gfarm_shared_key)をコピー
|
次にスレーブメタデータサーバのセットアップをrootユーザで行います。
メタデータ冗長化を有効にするため config-gfarmに-rオプションをつけます。
rootユーザでメタデータをリストアします。
config-gfarm の際に、--prefix オプションや -l オプションを指定していた場合は、
gfdump.postgresql に対しても同じオプションを与えてください。
# gfdump.postgresql -r -f gfarm-pgsql.dmp
|
- 補足
現在のところ、複数のスレーブ・サーバを設定する場合、
スレーブで同時に config-gfarm -r を行なうことはできません。
かならず、それぞれのスレーブで gfdump.postgresql -r によるリストアまで
完了してから、次のスレーブの config-gfarm -r を行なうようにしてください。
マスターメタデータサーバでmetadb_server_listを追加した
gfarm2.confを、スレーブメタデータサーバにコピーします。
これは、スレーブメタデータサーバ上で gfmdhost コマンドのような
Gfarm クライアントを利用することがあるためです。
2.3 gfsdおよびクライアント
マスターメタデータサーバでmetadb_server_listを追加した
gfarm2.confを、ファイルシステムノードやクライアントノードにコピーします。
以降の設定はSETUPドキュメントを参照してください。
既に設定されている場合は、gfsdを再起動します。
再起動のためにはrootユーザで、次のコマンドを実行します。
各gfsdホスト:
# /etc/init.d/gfsd restart
|
ここまでの手順でマスタースレーブで冗長化されたメタデータサーバの構成が完了しました。
2.4 動作確認
gfmdhost -lでスレーブメタデータサーバが接続されていることを確認してください。
$ gfmdhost -l
+ master - m (default) host-a 601
+ slave sync c (default) host-b 601
|
rootユーザでgfjournalを実行し、
スレーブメタデータサーバに更新が伝達されているか確認してください。
# gfjournal /var/gfarm-metadata/journal/0000000000.gmj
records seqnum(min/max) record length(min/max/ave)
11 63/ 73 24/ 118/ 43
|
更新操作を行い、マスターおよびスレーブメタデータサーバで、
seqnumのmaxが等しければ更新が伝達されています。
3. スレーブgfmdをマスターgfmdに昇格する
これからは、マスターgfmdに障害が発生し、
スレーブgfmdをマスターgfmdに昇格する手順を説明します。
先にhost-aのgfmdを停止していることを確認します。
起動している場合は、host-aにおいてrootユーザで、次のコマンドで停止させます。
host-a:
- 注意
スレーブgfmdをマスターgfmdへ昇格するときは、以下のいずれかの条件を満たす必要あります。
- 現在のマスターgfmdが停止している。
- 現在のマスターgfmdが、スレーブgfmd / gfsd / クライアントと通信できない。
上記の条件を満たさない場合、マスターgfmd / スレーブgfmdのデータベース間で不整合が生じる可能性があります。
host-bにおいてrootユーザで、次のコマンドを実行します。
host-b:
# kill -USR1 <gfmdのプロセスID>
|
なお、別途配布している gfarm_zabbix パッケージには、
マスターgfmdの障害を検知し、自動的にスレーブを昇格させる機能が
含まれています。
4. 元のマスターgfmdを起動する
元のマスターgfmdが障害から回復し、
スレーブgfmdとして復活させる手順を説明します。
4.1 スレーブとしての起動
host-aにおいてrootユーザで、次のコマンドを実行します。
host-a:
# /etc/init.d/gfmd slavestart
|
4.2 動作確認
gfmdhost -lでスレーブメタデータサーバとして接続されていることを確認してください。
$ gfmdhost -l
+ slave sync c (default) host-a 601
+ master - m (default) host-b 601
|
ここで「+」と表示されている場合は、
スレーブメタデータサーバとして正しく動作しており、完了です。
ここで「x」と表示されている場合は、
「4.3 手動での同期」へ進みます。
4.3 手動での同期
「x」と表示されていた場合は、host-a が停止中に
発生したメタデータの更新量が多過ぎたため、自動更新ができなかったことを
意味します。
この場合、以下の手順で、host-bのデータベースをhost-aにコピーする必要が
あります。
host-b の rootユーザでメタデータをダンプします。
# gfdump.postgresql -d -f gfarm-pgsql.dmp
|
host-a の rootユーザでメタデータをリストアします。
# gfdump.postgresql -r -f gfarm-pgsql.dmp
|
次に「4.2 動作確認」からやり直します。
Gfarm File System <gfarmfs at gmail.com>