LinuCレベル4 システムアーキテクト 可用性の設計 問1
可用性の設計/フェイルオーバークラスタ共有ストレージ上のデータベースを2ノードのアクティブ・スタンバイ構成で運用する。ノード間のハートビート用インターコネクトが分断されても、両ノードが同時に共有ストレージへ書き込む事態を確実に防ぎたい。この要件に対する設計として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「可用性の設計」に対応。実際の試験問題ではありません)
- Aハートビートの送信間隔と障害判定までの時間を短くし、待機系が分断を素早く検知して引き継げるようにする
- Bインターコネクトとは独立したIPMI等の帯域外経路で相手ノードを強制停止し、その成功を確認してから引き継ぐ
- Cインターコネクトをボンディングで二重化し、分断そのものが起きにくくなったことをもって対策完了とする
- D2ノードでもクォーラムの過半数判定で稼働側が一意に決まるため、相手ノードを停止させる仕組みは省略する
正解:B
解説
インターコネクトが分断されると、各ノードからは相手が停止したのか通信できないだけなのかを区別できず、両方がリソースを起動するスプリットブレインが起こり得ます。これを確実に防ぐには、相手ノードを強制的に停止・隔離するフェンシング(Pacemakerでは STONITH)を行い、その成功を確認してからリソースを引き継ぐ設計にします。このとき、フェンシングの経路がインターコネクトと同じ経路だと分断時に使えないため、IPMIなどの帯域外管理経路のように独立した経路を用意することが設計上の要点です。2ノード構成では1対1に分かれると過半数が成立しないため、クォーラムだけでは稼働側を決められない点にも注意が必要です。
選択肢ごとの解説
- A誤り。判定時間を短くすると検知は早くなりますが、分断時に稼働系も生きていれば両系が同時に稼働する状況は防げず、むしろ誤検知が増えます。
- B正しい。分断時でも使える独立した経路でフェンシングを行い、成功を確認してから引き継ぐことで、両系による同時書き込みを確実に防げます。
- C誤り。経路の二重化は分断の確率を下げる有効な対策ですが、両方の経路が同時に失われる可能性は残るため、分断時の安全を保証するものではありません。
- D誤り。2ノードが1対1に分かれるとどちらも過半数を持たないため、クォーラムだけでは稼働側を一意に決められず、フェンシングは省略できません。