コミュニケーションパスを通じて疎通確認を行い、Quorum チェックを行います。クラスター内の過半数のノードと疎通ができることで、Quorum を持っていると判断します。本モードは、ノード数が奇数のクラスターで推奨されます。

Majority モードの設定

%LKROOT%/etc/default/LifeKeeper 設定ファイルで QUORUM_MODE の設定を majority に設定してください。QUORUM_MODE を majority に設定した場合、WITNESS_MODE は remote_verify に設定する必要があります。

Majority モードの場合の Witness モードの設定

QUORUM_MODE で majority を使用する場合、WITNESS_MODE を remote_verify に設定する必要があります。

Majority モードの期待される動作(標準の設定を仮定)

ノード A(リソースは稼働状態)、ノード B(リソースは待機状態)、そしてノード C(リソースは待機状態)の3ノード構成のクラスターの振る舞いについて説明します。

ノード障害に関するリソースの状態を変更し得るイベントは以下の3つです。

  • COMM_DOWN イベント
    ノード間のコミュニケーションパスが全て切断した時に呼び出されるイベント。
  • COMM_UP イベント
    COMM_DOWN 状態からコミュニケーションパスが復旧した際に呼び出されるイベント。
  • LCM_AVAIL イベント
    LCM の初期化が終わった時に呼び出されるイベントで、LifeKeeper 起動時に1度だけ呼び出される。一度 LCM_AVAIL になると、接続が確立されたコミュニケーションパス上でクラスター内の他ノードへのハートビートの伝送が開始される。また、他ノードからのハートビート要求の受信も受けられるようになる。LCM_AVAIL イベントの処理は必ず COMM_UP イベントの処理より前に行われる。

シナリオ 1

ノード A とノード B の間のコミュニケーションパス通信に障害が発生

この場合、以下のように動作します。

  1. ノード A とノード B は、COMM_DOWN イベントの処理を開始します。ただし、全く同時とは限りません。
  2. 両方のノードは Quorum チェックを実行し、両方共自身が Quorum を持っていると判断します(ノード A とノード B の両方からノード C が見えているため、既知の3ノードのうちの2ノードと疎通があるため多数派にいると判断します)。
  3. 各ノードは、まだ通信可能な別のノードに対し、自ノードと通信できなくなったノードの実際の状態について問い合わせ(Witness チェック)を行います。このシナリオでは、ノード A がノード B のステータスについてノード C に問い合わせ、ノード B がノード A のステータスについてノード C に問い合わせることになります。
  4. ノード A とノード B は共に ノード C への問い合わせによって他方のノードがまだ生存していると判断し、フェイルオーバー処理は発生しません。リソースはノード A で 稼働状態のままになります。

シナリオ 2

ノード A に障害が発生してノード A が停止

この場合、ノード B は以下の動作をします。

  1. ノード A との COMM_DOWN イベントの処理を開始します。
  2. ノード C と通信が可能なため、Quorum を持っていると判断します。
  3. ノード A が見えないことをノード C に確認した後、通常のフェイルオーバー処理を開始します。
  4. イクイバレンシーの値が最も低いノードがイベントの処理を続行し、保護されたリソースを 稼働状態にします。

ノード C は以下の動作をします。

  1. ノード A との COMM_DOWN イベントの処理を開始します。
  2. ノード B と通信が可能なため、Quorum を持っていると判断します。
  3. ノード A が見えないことをノード B に確認した後、通常のフェイルオーバー処理を開始します。
  4. イクイバレンシーの値が最も低いノードがイベントの処理を続行し、保護されたリソースを 稼働状態にします。

リソースがノード B で稼働中に、他のノードと通信可能な状態でノード A のサーバーが電源ON

この場合、ノード A は LCM_AVAIL イベントを処理します。ノード A は、Quorum を持っていると判断し、ノード B でリソースが稼働中のためリソースを起動させません。次に、ノード A とノード B、ノード A とノード C との COMM_UP イベントが各ノードで発生します(ノード A では2回発生する)。COMM_UP イベント中、各ノードは Quorum を持っていると判断し、またノード B でリソースが稼働中のためリソースは起動させません。

リソースがノード B で稼働中に、他のノードと通信不能な状態でノード A のサーバーが電源ON

この場合、ノード A は LCM_AVAIL イベントを処理し、ノード B とノード C はノード A と通信できないので何もしません。ノード A は、3ノードのうちの1ノード(自分自身)としか通信できないため Quorum を持っていないと判断します。Quorum を持っていないため、ノード A はリソースを起動させません。

シナリオ 3

ノード A のネットワークに障害が発生(ノード A は稼働しているが、他のノードと通信不能)

この場合、ノード A は以下の動作をします。

  1. ノード B との COMM_DOWN イベントの処理を開始します(ほぼ同時に、ノードC との COMM_DOWN イベントの処理も開始されます)。
  2. ノード B ともノード C とも通信ができないため、Quorum を持っていないと判断します。
  3. LifeKeeper に設定されている QUORUM_LOSS_ACTION(OSU) パラメータの設定に従ってノードの強制再起動などの動作を行い、リソースを停止します。
  4. LifeKeeper は、QUORUM_QUARANTINE_SECS で指定された期間、すべてのノードとの通信を一時停止します。
  5. 指定した時間を過ぎると LifeKeeperは通信を再開します。

ノード B は以下の動作をします。

  1. ノード A との COMM_DOWN イベントの処理を開始します。
  2. ノード Cとまだ通信が可能なため、Quorum を持っていると判断します。
  3. ノード A が見えないことをノード C に確認(Witness チェック)した後、通常のフェイルオーバー動作を開始します。
  4. イクイバレンシーの値が最も低いノードがイベントの処理を続行し、保護されたリソースを 稼働状態にします。

ノード C は以下の動作をします。

  1. ノード A との COMM_DOWN イベントの処理を開始します。
  2. ノード B とまだ通信が可能なため、Quorum を持っていると判断します。
  3. ノード A が見えないことをノード B に確認(Witness チェック)した後、通常のフェイルオーバー動作を開始します。
  4. イクイバレンシーの値が最も低いノードがイベントの処理を続行し、保護されたリソースを 稼働状態にします。

リソースがノード B で稼働中に、ノード A の通信が回復

この場合、ノード B は COMM_UP イベントを処理し、Quorum を持っている(3ノードすべてが見える)ことと、稼働中のリソースを持っていることを判断します。ノード A は、COMM_UP イベントを処理し、Quorum を持っていることと、リソースが別のノードで稼働中であることを判断します。この時点では、ノード A はリソースを起動させません。

シナリオ 4

3つのノードすべてが他のノードと通信不能

この場合、ノード A は以下の動作をします。

  1. ノード B との COMM_DOWN イベントの処理を開始します(ほぼ同時に、ノード C との COMM_DOWN イベントの処理も開始されます)。
  2. ノード B ともノード C とも通信ができないため、Quorum を持っていないと判断します。
  3. LifeKeeper は QUORUM_LOSS_ACTION の設定に従って動作します。

ノード B は以下の動作をします。

  1. ノード A との COMM_DOWN イベントの処理を開始します(ほぼ同時に、ノード C との COMM_DOWN イベントの処理も開始されます)。
  2. ノード A ともノード C とも通信ができないため、Quorum を持っていないと判断します。
  3. 稼働状態のリソースがないので、QUORUM_LOSS_ACTION (OSU)に従った動作は行いません。

ノード C は以下の動作をします。

  1. ノード A との COMM_DOWN イベントの処理を開始します(ほぼ同時に、ノード B との COMM_DOWN イベントの処理も開始されます)。
  2. ノード A ともノード B とも通信ができないため、Quorum を持っていないと判断します。
  3. 稼働状態のリソースがないので、QUORUM_LOSS_ACTION (OSU)に従った動作は行いません。

コミュニケーションパスが復旧した場合、ノード A 上でリソースが起動します。なお、本動作となるためには、以下の 2条件を満たす必要があります。

  • ノード A のリソースに設定された初期化設定値が AUTORES_ISP であること。
  • リソースにセットされた優先度がノード A で最も高い値であること。

フィードバック

お役に立ちましたか?

はい いいえ
お役に立ちましたか
理由をお聞かせください
フィードバックありがとうございました

このトピックへフィードバック

送信