4.4.4. フェンシング遅延
2 ノードクラスターでは、通信障害が同時に発生すると、ノード同士が互いにフェンシングし、クラスター全体が停止する可能性があります。この競合状態を防ぐために、フェンシング遅延を設定します。大規模なクラスターでは、クォーラムによってフェンシングの権限が決定されるため、遅延は必要ありません。
システム要件に応じて、さまざまなタイプのフェンシング遅延を設定できます。
静的フェンシング遅延
静的フェンシング遅延は、事前に定義された固定の遅延です。1 つのノードに静的遅延を設定すると、そのノードがフェンシングされる可能性が高くなります。これは、通信の切断を検出した後、他のノードが先にフェンシングを開始する可能性が高まるためです。アクティブ/パッシブクラスターでは、パッシブノードに遅延を設定すると、通信が切断されたときにパッシブノードがフェンスされる可能性が高くなります。静的遅延を設定するには、
pcmk_delay_baseインスタンス属性を使用します。別々の遅延を設定するには、各ノードごとに個別のフェンスデバイスでこの属性を設定します。すべてのノードに単一のフェンスデバイスを使用する場合は、この属性をホストマップに設定できます。たとえば、node1:0s;node2:5sのように設定します。動的フェンシング遅延
動的フェンシング遅延はランダムです。この遅延は変化する可能性があり、フェンシングが必要なタイミングで決定されます。管理者はランダムな遅延を設定し、
pcmk_delay_maxインスタンス属性を使用してベース遅延値とランダム遅延値を合わせた最大値を指定します。各ノードのフェンシング遅延がランダムの場合、どのノードがフェンスされるかもランダムです。この機能は、クラスターがアクティブ/アクティブ設計で、すべてのノードに対して単一のフェンスデバイスを使用して設定されている場合に役立つことがあります。優先フェンシング遅延
優先フェンシング遅延は、アクティブなリソースの優先度に基づきます。すべてのリソースの優先度が同じ場合、実行中のリソースが最も少ないノードがフェンスされます。ほとんどの場合、遅延関連のパラメーターは 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_baseインスタンス属性は、フェンシングアクションのベース遅延と最大遅延 (ベース遅延値とランダム遅延値を組み合わせた最大値) を指定するために使用します。たとえば、ベース遅延が 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=1 と pcs property set priority-fencing-delay=15s を設定し、他の優先度が設定されていない場合には、最も多くのリソースを実行するノード以外はフェンシングを開始するまで 15 秒間待機するため、最も多くのリソースを実行するノードが稼働状態を維持する可能性が高くなります。特定のリソースが他のリソースよりも重要である場合は、優先度を高く設定できます。
昇格可能なクローンに優先度が設定されている場合、そのクローンのプロモートロールを実行しているノードの優先度が 1 ポイント追加されます。
フェンシング遅延の相互作用
複数のタイプのフェンシング遅延を設定すると、以下のようになります。
-
priority-fencing-delayプロパティーで設定されている遅延は、pcmk_delay_baseおよびpcmk_delay_maxインスタンス属性の遅延に加算されます。この動作により、両方のノードの優先度が同等の場合、またはノードの損失以外の理由で両方のノードをフェンシングする必要がある場合 (たとえば、on-fail=fencingがリソースモニター操作用に設定されている場合)、ある程度の遅延を許容します。これらの遅延を組み合わせて設定する場合は、優先ノードが優先されるよう、priority-fencing-delayプロパティーを、pcmk_delay_baseおよびpcmk_delay_maxの最大遅延よりもはるかに大きい値に設定します。このプロパティーを 2 倍の値に設定すると、常に安全です。 -
フェンシング遅延が適用されるのは、Pacemaker 自体によってスケジュールされたフェンシングだけです。
dlm_controldなどの外部コードでスケジュールされるフェンシングや、pcs stonith fenceコマンドで実装されるフェンシングは、フェンスデバイスに必要な情報を提供しません。 -
一部のフェンスエージェントは、エージェントによって名前が決定される遅延パラメーターを実装しています。この遅延は、
pcmk_delay_*インスタンス属性で設定される遅延とは独立しています。両方の遅延を設定すると、遅延が合算されるため、通常は併用しません。