文書集 > ユーザーズマニュアル > メタデータ冗長化 - チュートリアル

# メタデータ冗長化 - チュートリアル

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を追加してください。

    # 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オプションをつけます。

    # 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:

    # /etc/init.d/gfmd stop

- 注意
  スレーブ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 動作確認」からやり直します。