SunPlex システムでは、ネットワークインタフェース、アプリケーションそのもの、ファイルシステム、および多重ホストディスクなど、ユーザーとデータ間のパスにおけるすべてのコンポーネントの可用性が高くなっています。一般に、クラスタコンポーネントは、システムで単一 (ソフトウェアまたはハードウェア) の障害が発生しても稼働し続けられる場合は可用性が高くなります。
次の表は、SunPlex コンポーネントの障害の種類 (ハードウェアとソフトウェアの両方) と、高可用性フレームワークに組み込まれた回復の種類を示しています。
表 3-1 SunPlex システムの障害の検出と回復のレベル
障害が発生したクラスタリソース |
ソフトウェアの回復 |
ハードウェアの回復 |
---|---|---|
データサービス |
HA API、HA フレームワーク |
なし |
パブリックネットワークアダプタ |
ネットワークアダプタのフェイルオーバー (NAFO) |
複数のパブリックネットワークアダプタカード |
クラスタファイルシステム |
主複製と二次複製 |
多重ホストディスク |
ミラー化された多重ホストディスク |
ボリューム管理 (Solstice DiskSuite および VERITAS Volume Manager) |
ハードウェア RAID-5 (Sun StorEdge A3x00 など) |
広域デバイス |
主複製と二次複製 |
デバイス、クラスタトランスポート接続点への多重パス |
プライベートネットワーク |
HA トランスポートソフトウェア |
ハードウェアから独立した多重プライベートネットワーク |
ノード |
CMM、failfast ドライバ |
複数ノード |
Sun Cluster ソフトウェアの高可用性フレームワークは、ノードの障害を素早く検出して、クラスタ内の残りのノードにあるフレームワークリソース用に新しい同等のサーバーを作成します。すべてのフレームワークリソースが使用できなくなるときはありません。障害が発生したノードによって影響を受けないフレームワークリソースは、回復中も完全に使用できます。さらに、障害が発生したノードのフレームワークリソースは、回復されると同時に使用可能になります。回復されたフレームワークリソースは、他のすべてのフレームワークリソースが回復するまで待機する必要はありません。
最も可用性の高いフレームワークリソースは、リソースを使用してアプリケーション (データサービス) に透過的に回復されます。フレームワークリソースのアクセス方式は、ノードの障害時にも完全に維持されます。アプリケーションは、フレームワークリソースサーバーが別のノードに移動したことを認識できないだけです。単一ノードの障害は、別ノードからのディスクに対する代替ハードウェアパスが存在するかぎり、ファイル、デバイス、およびディスクボリュームを使用する残りのノード上のプログラムに対して完全に透過的です。この例としては、複数ノードへのポートを持つ多重ホストディスクの使用があります。
クラスタメンバーシップモニター (CMM) は、エージェントの分散型セットであり、クラスタメンバーごとに 1 つあります。これらのエージェントは、クラスタインターコネクトによってメッセージを交換して、次のことを行います。
すべてのノード (定足数) で一貫したメンバーシップの表示を行う
メンバーシップの変更に応じて、登録されたコールバックを使用して同期化された再構成を行う
クラスタパーティション分割を処理する (split-brain と amnesia)
すべてのクラスタメンバー間での完全な接続を保証する
Sun Cluster ソフトウェアの以前のリリースとは異なり、CMM は完全にカーネルで実行されます。
CMM の主な機能は、特定の時刻にクラスタに属するノードの集合に対して、クラスタ全体の同意を確立することです。この制約をクラスタメンバーシップと呼びます。
クラスタメンバーシップを決定して、最終的にデータの完全性を保証するために、CMM は次のことを行います。
クラスタへのノードの結合、またはクラスタからのノードの切り離しなど、クラスタメンバーシップの変更を考慮する
障害のあるノードがクラスタから切り離されるように保証する
障害のあるノードが、修復されるまでクラスタの外部におかれるように保証する
クラスタそのものがノードのサブセットに分割されないように防止する
クラスタが複数の独立したクラスタに分割されないようにする方法については、「定足数と定足数デバイス」を参照してください。
データが破壊から保護されるように保証するには、すべてのノードが、クラスタメンバーシップに対して一定の同意に達していなければなりません。必要であれば、CMM は、障害に応じてクラスタサービス (アプリケーション) のクラスタ再構成を調整します。
CMM は、クラスタのトランスポート層から、他のノードへの接続に関する情報を受け取ります。CMM は、クラスタインターコネクトを使用して、再構成中に状態情報を交換します。
CMM は、クラスタメンバーシップの変更を検出すると、クラスタの同期化構成を実行します。これにより、クラスタリソースは、クラスタの新しいメンバーシップに基づいて再分配されます。
CMM は、ノードに重大な問題が発生したことを検出すると、クラスタフレームワークに依頼して、そのノードを強制的に停止 (パニック) 状態にし、クラスタメンバーシップから除きます。この機構を「フェイルファースト」といいます。フェイルファーストでは、ノードは次の 2 つの方法で停止されます。
クラスタから切り離されたノードが定足数なしに再び新しいクラスタを起動しようとすると、ノードは共有ディスクへのアクセスを制限されます。フェイルファーストのこの機能については、「障害による影響の防止」を参照してください。
クラスタ固有の 1 つまたは複数のデーモン (clexecd、rpc.pmfd、rgmd、rpc.ed) が停止すると、CMM はそれを検出し、ノードを強制的に停止 (パニック) 状態にします。
panic[cpu0]/thread=40e60: Failfast: Aborting because "pmfd" died 35 seconds ago. 409b8 cl_runtime:__0FZsc_syslog_msg_log_no_argsPviTCPCcTB+48(70f900, 30, 70df54, 407acc, 0) %l0-7: 1006c80 000000a 000000a 10093bc 406d3c80 7110340 0000000 4001 fbf0 |
パニックが発生したノードは、再起動を行ってクラスタに再び結合しようとするか、OpenBoot PROM (OBP) プロンプトの状態に留まることができます。どちらのアクションをとるかは、OBP の auto-boot? パラメータの設定に依存します。
クラスタ構成レポジトリ (CCR) は、クラスタの構成と状態に関する情報を保存するための、プライベートなクラスタ全体のデータベースです。CCR は分散データベースです。各ノードは、このデータベースの完全なコピーを維持します。CCR は、すべてのノードで、クラスタ全体の一貫した表示が行われるように保証します。データの破壊を避けるために、各ノードは、クラスタリソースの現在の状態を知る必要があります。
CCR は、更新に 2 フェーズのコミットアルゴリズムを使用します。更新はすべてのクラスタメンバーで正常に終了しなければなりません。そうしないと、その更新はロールバックされます。CCR はクラスタインターコネクトを使用して、分散更新を適用します。
CCR はテキストファイルで構成されていますが、CCR ファイルを手作業で絶対に編集しないでください。各ファイルには、ノード間の一貫性を保証するための検査合計レコードが含まれます。CCR ファイルを手作業で更新すると、ノードまたはクラスタ全体の機能が停止する可能性があります。
CCR は、CMM に依存して、定足数 (quorum) が確立された場合にのみクラスタが実行されるように保証します。CCR は、クラスタ全体のデータの一貫性を確認し、必要に応じて回復を実行し、データへの更新を容易にします。