10.6. poison-pill フェンシングのタイミング設定に関する考慮事項
Storage-based death (SBD) による poison-pill フェンシングを使用する Red Hat 高可用性クラスターをデプロイする場合、タイミングを慎重に設定する必要があります。適切なタイムアウトを設定することで、障害発生時にノードを安全に隔離し、スプリットブレイン状態を防ぎつつ、クラスターサービスの通信と安定化のために十分な時間を確保できます。
poison-pill フェンシングを使用する場合のタイミング設定に関する主な考慮事項は以下のとおりです。
SBD_WATCHDOG_TIMEOUTデフォルト値の 5 秒のままにしておいてください。値を大きくするほど、一時的な接続の途切れを迅速に解決するための猶予をクラスターに与えることができますが、実際の障害からの復旧にかかる時間は長くなります。デフォルト値の 5 秒未満に設定することは推奨されません。クラスターの反応が過敏になり、高負荷時や短時間の応答停止時に不安定になる可能性があるためです。
クラスターで QDevice を使用している場合は、
SBD_WATCHDOG_TIMEOUTパラメーターをqdevice-sync_timeout(デフォルト値は 30 秒) よりも高い値に設定してください。クォーラム更新の遅延によってスプリットブレイン状態が発生するのを防ぐために、3 - 5 秒高く設定してください。msgwaitタイムアウトfence_sbdが poison-pill メッセージを書き込んでから、フェンシングアクションが完了したとみなされるまでの待機時間。ウォッチドッグタイムアウトが 5 秒の場合は、この値をSBD_WATCHDOG_TIMEOUTの値の 2 倍 (10 秒など) に設定してください。msgwaitの値がウォッチドッグのタイムアウト値よりも低い場合、ターゲットノードがまだ操作を処理中しているか、ハードウェアウォッチドッグのタイムアウトを待っている間に、クラスターがフェンシング操作の成功を早々に宣言してしまう可能性があります。その結果、スプリットブレイン状態が発生する可能性があります。msgwaitの期間は、以下の 3 つの異なるシナリオに確実に対応できるよう、適切に設定する必要があります。- ターゲットがメッセージを正常に読み取り、自己フェンシングを実行する: ターゲットノードが応答可能であり、共有ブロックデバイスからポイズンピルメッセージを正常に読み取り、自己フェンシングを開始するという、想定どおりのシナリオ。
- ターゲットがディスクへのアクセスを失う: ターゲットノードは稼働を続けていますが、クォーラムを満たす数の共有ディスクから読み取りができない状態であることを検出します。その結果、ノードはこのアクセス喪失を認識して自己フェンシングを実行します。
ターゲットがまったく応答しない: ターゲットノードはフリーズしており、何も実行できません。操作を実行できないため、(ハードウェア) ウォッチドッグをリセットできず、結果として再起動が実行されます。
前述の考慮事項から導き出されるタイムアウトよりも低い値に
msgwaitが設定されている場合、ターゲットノードがまだ操作を処理しているか、ハードウェアウォッチドッグの期限切れを待っている間に、クラスターがフェンシング操作の成功を早々に宣言してしまう可能性があります。その結果、スプリットブレインシナリオが発生する可能性があります。
pcmk_reboot_timeout(STONITH レベルのタイムアウト)これは、STONITH デバイス自体 (
fence_sbd) が "再起動" 操作中に待機する時間を決定するタイムアウトです。クラスターはこのタイムアウト期間中待機します。この値は、
msgwait属性の値よりも 5 秒以上高くなるように引き上げる必要があります。適切に引き上げられない場合、クラスターはフェンシング操作を諦め、msgwait期間が完全に経過する前に失敗を報告する可能性があります。SBD_START_DELAYと起動時の遅延起動時の遅延を設定することで、クラスターが安定するまでの追加の時間を確保し、監視が開始する前にストレージデバイスを完全にオンライン状態にすることができます。さらに、フェンシングから迅速な復旧した後のクラスターノードには、自身のフェンシング成功に関するブロードキャストを受信してしまう可能性があるという一般的な問題があります。これにより、ノードは混乱し、フェンシングサブレイヤー内で何らかの問題が発生したとみなして恒久的なエラー状態に陥ります。
-
SBD を使用する場合:
SBD_START_DELAYの値を増やすことで、この事象を軽減できます。つまり、古いブロードキャストが消え去るように、ノードのクラスター復帰を意図的に遅らせます。 - SBD を使用しない場合: SBD を使用しない環境でも同じ結果が得られるように、ユニットファイル内に corosync の起動を直接遅らせるためのヒントがあります。
-
SBD を使用する場合: