Sun Cluster の基本的なアーキテクチャの説明で述べたように、1 台のサーバーがダウンした場合、ほかのサーバーがテイクオーバーします。ここでは、「あるサーバーがダウンしたことを別のサーバーはどのようにして認識するのか」を説明します。
Sun Cluster は、3 つの障害検証方法を使用します。
ハートビートと SMA リンクの監視 - これらのモニターは、プライベートリンク上で動作します。Ethernet の場合、2 つのモニター、SMA リンクモニターとクラスタメンバーシップモニターが存在します。SCI では、3 つのモニター、SMA リンクモニター、クラスタメンバーシップモニター、低レベル SCI ハートビートモニターが存在します。
ネットワークの障害監視 - サーバーのパブリックネットワーク接続がすべて監視されます。ハードウェアまたはソフトウェア上の問題のためにパブリックネットワークを介してサーバーが通信できない場合、サーバーセット内の別のサーバーがテイクオーバーします。
データサービス固有の障害検証 - 各 Sun Cluster データサービスは、そのデータサービス固有の障害検証を行います。この方法は、マシンとオペレーティングシステムが動作しているかという低レベルの確認だけでなく、データサービスが有用な作業を行なっているかという問題を対象とします。
2 つ目と 3 つ目の方法では、1 台のサーバーがほかのサーバーの応答を検証します。明らかな問題が検出されると、検証側サーバーは、ほかのサーバーからのテイクオーバーを強行する前に、それ自体の妥当性検査を多数行います。これらの妥当性検査では、ほかのサーバーから応答がない実際の原因が検証側サーバーにないことを確認します。これらの妥当性検査は、Sun Cluster のベースフレームワークの一部であるライブラリサブルーチン hactl(1M) によって提供されます。そのため、データサービス固有の障害検証コードは、検証側サーバーの妥当性検査を行う場合 hactl(1M) を呼び出すだけですみます。詳細は、hactl(1M) のマニュアルページを参照してください。
Sun Cluster は、ハートビート機構を使用します。ハートビート処理は、メモリーに固定される優先度の高いリアルタイムプロセスによって処理されます。つまり、ハートビート処理は、ページングに制約されません。この処理は、クラスタメンバーシップモニターと呼ばれます。クラスタメンバーシップモニターは、ps(1) による出力には clustd という名前で示されます。
各サーバーは、両方のプライベートリンクを介して約 2 秒に 1 度、稼動していること示すメッセージ (ハートビート) を送信します。そして、両方のプライベートリンク上で、ほかのサーバーからのハートビートメッセージを受信します。どちらかのプライベートリンク上でハートビートを受信していることは、ほかのサーバーの稼動を示す十分な証拠となります。一定の時間 (約 12 秒) ほかのサーバーからのハートビートメッセージがない場合、サーバーはそのサーバーがダウンしていると判断します。
障害の検出という視点から見ると、クラスタメンバーシップモニターのハートビート機構は防御の第一線に当たります。ハートビートが受信されないと、ハードウェアの障害とオペレーティングシステムの障害がすぐに検出されます。ハートビート機構は、すべての通信バッファーの漏出などのような顕著なオペレーティングシステム上の問題を検出することもあります。ハートビート機構は、Sun Cluster の最も高速な障害検証方法でもあります。クラスタメンバーシップモニターはリアルタイムに優先されて動作するとともに、メモリー内に固定されるため、比較的短時間のハートビートの欠如は認められます。逆に、ほかの障害検証方法では、サーバーの速度が単に非常に遅いためにそのサーバーがダウンしていると Sun Cluster で判断されることを避けなければなりません。それらの方法では、数分という比較的長時間のタイムアウトが使用され、複数の長時間タイムアウトが発生しないと Sun Cluster がテイクオーバーを行わないこともあります。
クラスタメンバーシップモニターがリアルタイムに優先されて動作し、かつメモリー内に固定されるという事実は、そのサーバーがデータサービスレベルで有用な作業を行なっていない場合でもメンバーシップモニターが活動する可能性があるという矛盾を生みます。「データサービス固有の障害検証」で説明しているように、データサービス固有の障害監視がこの問題を解決します。
ネットワーク障害の検証とデータサービス固有の障害検証では、各ノードは別のノードの応答を検証する必要があります。テイクオーバーを行う前に、検証側ノードは自身の基本的な妥当性検査を多数行います。これらの検査は、障害の原因が実際に検証側ノードにないことを確認するとともに、障害があると思われるサーバーからのテイクオーバーによって状況が実際に改善されるかどうかを確認します。これらの妥当性検査が行われないと、誤ったテイクオーバーが発生する可能性があります。つまり、欠陥のあるノードに、ほかのノードが応答しないことによって、その欠陥のあるノードが誤って問題のないそのサーバーをテイクオーバーすることがあります。
検証側ノードは、別のノードをテイクオーバーする前に、自身に対して次の妥当性検査を行います。
検証側ノードは、「パブリックネットワークモニター (PNM)」で説明しているように、パブリックネットワークを使用する自身の能力を検査します。
検証側ノードは、自身の HA データサービスが応答しているかも検査します。この場合、検証側ノードがすでに実行している HA データサービスはすべて検査されます。応答しないものがある場合、「検証側ノードが自身のサービスを実行できなければ、ほかのノードのサービスを実行してもよい結果は得られない」という前提によって、テイクオーバーは防止されます。また、検証側ノード自体の HA データサービスが応答に失敗した場合、検証側ノードに根本的な問題があるためにほかのノードの検証が失敗している可能性もあります。この現象を示す重要な例を挙げると、Sun Cluster HA for NFS では、ほかのノード上のファイルをロックするためには、検証側ノード自体の lockd と statd デーモンが動作していなければなりません。lockd と statd デーモンの応答検査により、検証側ノードはそれ自体のデーモンの応答失敗がほかのノードを応答していないように見せることを防止します。