LinuCレベル4 システムアーキテクト 可用性の設計 問14
可用性の設計/フェイルオーバークラスタPacemaker/Corosyncによる2ノードのアクティブ・スタンバイ構成で、夜間バッチの実行中に稼働系ノードの負荷が高まると、ハートビートの応答が遅れて障害と判定され、稼働系が強制停止されてフェイルオーバーする事象が何度も起きた。実際にはノードは停止していなかった。対策として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「可用性の設計」に対応。実際の試験問題ではありません)
- A高負荷時のハートビートの遅れを実測し、障害判定までの時間をそれより十分長く見直したうえで、長くなる切替時間を業務側と合意する
- B誤った判定でも引き継ぎ自体は成功しているため、フェンシングを無効にして、誤判定のときに稼働系が強制停止されないようにする
- C障害判定までの時間をさらに短くし、応答の遅れを素早く検知して切り替えを早く済ませることで、業務の停止時間を短くする
- D両ノードで同時にサービスを動かすアクティブ・アクティブ構成に変え、共有ストレージ上のデータベースを両ノードから更新させる
正解:A
解説
ハートビートによる障害判定の時間は、短くすれば実際の障害を早く検知できる一方、一時的な高負荷やネットワークの揺らぎを障害と誤判定しやすくなるトレードオフがあります。誤判定が起きると、フェンシングによる稼働系の強制停止と不要なフェイルオーバーで、かえって業務が止まります。高負荷時の遅れを実測して判定時間を適正な値に延ばし、その分長くなる検知時間をRTOに織り込んで合意するのが妥当です。あわせて、ハートビート用の経路を業務通信と分けるなど、遅れそのものを減らす対策も有効です。
選択肢ごとの解説
- A正しい。誤判定の原因である判定時間の短さを実測に基づいて見直し、その代償となる切替時間の延長を業務要件として合意するのが、可用性と誤判定のバランスをとる設計です。
- B誤り。フェンシングを無効にすると、本当にインターコネクトが分断されたときに両ノードが共有ストレージへ書き込むスプリットブレインを防げなくなります。誤判定の原因も解消しません。
- C誤り。判定時間を短くするほど、高負荷時の一時的な遅れを障害と誤判定しやすくなり、不要なフェイルオーバーが増えます。
- D誤り。共有ストレージ上のデータベースを両ノードから更新するには、データベース側が共有ディスク型のクラスタに対応している必要があります。誤判定の原因も解消しません。