10.4. フェンシング遅延

2 ノードクラスターでクラスター通信が失われると、一方のノードがこれを先に検出し、他方のノードをフェンスすることがあります。ただし、両方のノードが同時に検出した場合、各ノードが他方のノードのフェンシングを開始した結果、両方のノードの電源がオフになるかリセットされる可能性があります。フェンシング遅延を設定すると、両方のクラスターノードが相互にフェンスし合う可能性を減らすことができます。3 つ以上のノードを持つクラスターでも遅延を設定できますが、クォーラムのあるパーティションしかフェンシングを開始しないため、通常は利点がありません。

システム要件に応じて、さまざまなタイプのフェンシング遅延を設定できます。

  • 静的フェンシング遅延

    静的フェンシング遅延は、事前に定義された固定の遅延です。1 つのノードに静的遅延を設定すると、そのノードがフェンシングされる可能性が高くなります。これは、通信の切断を検出した後、他のノードが先にフェンシングを開始する可能性が高まるためです。active/passive クラスターでは、passive ノードに遅延を設定すると、通信が切断されたときに passive ノードがフェンスされる可能性が高くなります。静的遅延を設定するには、pcs_delay_base クラスタープロパティーを使用します。このプロパティーは、各ノードに個別のフェンスデバイスが使用される場合、または単一のフェンスデバイスがすべてのノードに使用される場合に設定できます。

  • 動的フェンシング遅延

    動的フェンシング遅延はランダムです。この遅延は変化する可能性があり、フェンシングが必要なタイミングで決定されます。ランダム遅延を設定し、ベース遅延とランダム遅延を組み合わせた最大値を pcs_delay_max クラスタープロパティーで指定します。各ノードのフェンシング遅延がランダムの場合、どのノードがフェンスされるかもランダムです。この機能は、active/active 設計のすべてのノードに対して単一のフェンスデバイスを使用してクラスターが設定されている場合に便利です。

  • 優先フェンシング遅延

    優先フェンシング遅延は、アクティブなリソースの優先度に基づきます。すべてのリソースの優先度が同じ場合、実行中のリソースが最も少ないノードがフェンスされます。ほとんどの場合、遅延関連のパラメーターは 1 つしか使用しませんが、複数のパラメーターを組み合わせることも可能です。遅延関連のパラメーターを組み合わせると、リソースの優先度の値が加算されて、総遅延となります。優先フェンシング遅延は、priority-fencing-delay クラスタープロパティーを使用して設定します。この機能を使用すると、ノード間の通信が失われたときに、実行中のリソースが最も少ないノードがフェンスされる可能性が高くなるため、active/active クラスター設計で役立つ場合があります。

pcmk_delay_base クラスタープロパティー

pcmk_delay_base クラスタープロパティーを設定すると、フェンシングのベース遅延が有効になり、ベース遅延の値が指定されます。

pcmk_delay_base プロパティーに加えて pcmk_delay_max クラスタープロパティーを設定すると、この静的遅延にランダム遅延を追加した合計値が最大遅延を下回るように、全体の遅延が導出されます。pcmk_delay_base を設定し、pcmk_delay_max を設定しない場合は、遅延にランダムなコンポーネントは含まれず、遅延は pcmk_delay_base の値となります。

pcmk_delay_base パラメーターを使用して、ノードごとに異なる値を指定できます。これにより、ノードごとに異なる遅延を使用して、単一のフェンスデバイスを 2 ノードクラスターで使用できます。別個の遅延を使用するために 2 つの別個のデバイスを設定する必要はありません。ノードごとに異なる値を指定するには、pcmk_host_map と同様の構文を使用して、ホスト名をそのノードの遅延値にマップします。たとえば、node1:0;node2:10s は、node1 をフェンシングするときに遅延を使用せず、node2 をフェンシングするときに 10 秒の遅延を使用します。

pcmk_delay_max クラスタープロパティー

pcmk_delay_max クラスタープロパティーを設定すると、フェンシング操作のランダム遅延が有効になり、ベース遅延とランダム遅延を組み合わせた最大値である最大遅延が指定されます。たとえば、ベース遅延が 3 で、pcmk_delay_max が 10 の場合、ランダム遅延は 3 - 10 になります。

pcmk_delay_max プロパティーに加えて pcmk_delay_base クラスタープロパティーを設定すると、この静的遅延にランダム遅延を追加した合計値が最大遅延を下回るように、全体の遅延が導出されます。pcmk_delay_max を設定し、pcmk_delay_base を設定しない場合は、遅延に静的なコンポーネントは含まれません。

priority-fencing-delay クラスタープロパティー

priority-fencing-delay クラスタープロパティーを設定すると、スプリットブレインが発生した場合に、リソースの実行数が最も少ない、または実行中のリソースの重要性が最も低いノードがフェンスされるように、2 ノードクラスターを設定できます。

priority-fencing-delay プロパティーは期間に設定できます。このプロパティーのデフォルト値は 0 (無効) です。このプロパティーがゼロ以外の値に設定されている場合や、priority メタ属性が 1 つ以上のリソースに対して設定されている場合は、スプリットブレインが発生すると、実行中の全リソースの合計優先度が最も高いノードが稼働状態を維持する可能性が高くなります。たとえば、pcs resource defaults update priority=1pcs property set priority-fencing-delay=15s を設定し、他の優先度が設定されていない場合には、最も多くのリソースを実行するノード以外はフェンシングを開始するまで 15 秒間待機するため、最も多くのリソースを実行するノードが稼働状態を維持する可能性が高くなります。特定のリソースが他のリソースよりも重要である場合は、優先度を高く設定できます。

昇格可能なクローンに優先度が設定されている場合、そのクローンのプロモートロールを実行しているノードの優先度が 1 ポイント追加されます。

フェンシング遅延の相互作用

複数のタイプのフェンシング遅延を設定すると、以下のようになります。

  • priority-fencing-delay プロパティーで遅延を設定すると、その遅延は pcmk_delay_basepcmk_delay_max のフェンスデバイスプロパティーの遅延に追加されます。この動作により、両方のノードの優先度が同等の場合、またはノードの損失以外の理由で両方のノードをフェンシングする必要がある場合 (たとえば、on-fail=fencing がリソースモニター操作用に設定されている場合)、ある程度の遅延を許容します。これらの遅延を組み合わせて設定する場合は、優先ノードが優先されるよう、priority-fencing-delay プロパティーを、pcmk_delay_base および pcmk_delay_max の最大遅延よりもはるかに大きい値に設定します。このプロパティーを 2 倍の値に設定すると、常に安全です。
  • Pacemaker 自体がスケジュールしたフェンシングしか、フェンシング遅延を監視しません。dlm_controld などの外部コードでスケジュールされるフェンシングや、pcs stonith fence コマンドで実装されるフェンシングは、フェンスデバイスに必要な情報を提供しません。
  • 個々のフェンスエージェントの中には遅延パラメーターが実装されたものがあります。このパラメーターは、エージェントによって決定された名前を持ち、pcmk_delay_* プロパティーで設定された遅延の影響は受けません。両方の遅延が設定されている場合は、その両方が一緒に追加され、通常は併用されません。