4.5. ヒーリングとスプリットブレイン – GlusterFS Community ではじめる分散ファイルシステム

.

ヒーリングデーモン

ヒーリングデーモンは GlusterFS の機能の一つでヒーリングを行うプロセスです。

GlusterFS のレプリケート系ボリュームオプションを利用している時に次のような障害が発生した場合について考えます。

  • レプリカ構成を取っているノードA と Bのうち、A が落ちた
  • ノード B には継続して書き込みが行われる
  • 少したった後、ノード Aが復旧した

この時、ノード A ― B 間のレプリケーションでは不整合が発生(B が最新の状態)しています。GlusterFS ではこの状態の時に復旧を行う必要がありますが、これをヒーリングと呼んでいます。

GlusterFS のヒーリングは Self heal daemon(セルフヒールデーモン)と呼ばれるプロセスが 10分間隔で監視を行い、必要とあれば自動でヒーリングを行います(以前は一度ボリュームを停止し、手動で行う必要がありました)。

スプリットブレイン

ヒーリングと関連した問題としてスプリットブレインもあります。これは GlusterFS というよりもそもそもネットワーク技術の問題でもあります。

ネットワーク内のノードは互いに強調して動作しますが、このノード間の通信が切れてしまった場合、どちらが主導権(マスタ)を取るのか分からず複数のノードが一斉にマスタになってしまったりする場合が発生しえます。これをスプリットブレインと呼びます。

ミドルウェアの起動を管理するクラスタリングソフト(Veritas Cluster Server、CLUSTERPRO等)でもこの問題は存在します。ただ、この状態が発生すると全てがマスタとして動作して障害が起きることを避ける為にクラスタリングソフトでは全てのノードを停止することが多くなっています。

GlusterFS でもノードが分断され、復旧した時、復旧したノードと他のノード間でどちらのファイルが最新か把握ができなくなってしまうケースが発生します。

この場合、GlusterFS では読み書きともにできなくなる場合があります。この対処として GlusterFS 3.4.2 では quorum(クォラム)が実装されました。

quorum

クォラムはネットワーク分断に備えて一定数(通常は過半数以上)のノードが分断時に存在していればそのノードグループが正しいものと考えてサービス継続を行う機能です。

GlusterFS では quorum はボリュームパラメータとして設定します。このパラメータは過半数である 50% 以上のパーセンテージで次のように指定することが可能です。

gluster volume set <ボリューム> cluster.server-quorum-type <none/server>
gluster volume set all cluster.server-quorum-ratio <パーセンテージ>%

利用する時は次のようにコマンドを実行します。

# gluster volume set test-vol cluster.server-quorum-type server
# gluster volume set all cluster.server-quorum-ratio 60%

コマンド中の cluster.server-quorum-type は quorum を有効にするパラメータで、quorum のパーセンテージは cluster.server-quorum-ratio で設定します。

この例だとネットワークが分断されても 60% のノードを保持するノードのグループがいればそのグループを生としてサービスを継続することになります。

この quorum の機能はサービスの信頼性に大きく関係するパラメータですのでぜひとも設定しておくことをお勧めします。