10.4. フェンシング遅延
2 ノードクラスターでクラスター通信が失われると、一方のノードがこれを先に検出し、他方のノードをフェンスすることがあります。ただし、両方のノードが同時に検出した場合、各ノードが他方のノードのフェンシングを開始した結果、両方のノードの電源がオフになるかリセットされる可能性があります。フェンシング遅延を設定すると、両方のクラスターノードが相互にフェンスし合う可能性を減らすことができます。3 つ以上のノードを持つクラスターでも遅延を設定できますが、クォーラムのあるパーティションしかフェンシングを開始しないため、通常は利点がありません。
システム要件に応じて、さまざまなタイプのフェンシング遅延を設定できます。
静的フェンシング遅延
静的フェンシング遅延は、事前に定義された固定の遅延です。1 つのノードに静的遅延を設定すると、そのノードがフェンシングされる可能性が高くなります。これは、通信の切断を検出した後、他のノードが先にフェンシングを開始する可能性が高まるためです。アクティブ/パッシブクラスターでは、パッシブノードに遅延を設定すると、通信が切断されたときにパッシブノードがフェンスされる可能性が高くなります。静的遅延を設定するには、
pcmk_delay_baseインスタンス属性を使用します。各ノードごとに個別のフェンスデバイスにこの属性を設定することで、異なる遅延時間を設定できます。すべてのノードに単一のフェンスデバイスを使用する場合は、この属性をホストマップに設定できます。たとえば、node1:0s;node2:5s のように設定します。動的フェンシング遅延
動的フェンシング遅延はランダムです。この遅延は変化する可能性があり、フェンシングが必要なタイミングで決定されます。管理者はランダムな遅延を設定し、
pcmk_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=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_*インスタンス属性で設定された遅延とは独立しています。両方の遅延を設定すると、遅延が合算されるため、通常は併用しません。