ボリュームマネージャとして Solstice DiskSuite を使用する Sun Cluster 構成では、Solstice DiskSuite 自体がクラスタの定足数を決定し、障害防護機能を提供します。障害防護について、クラスタのトポロジによる明確な違いはありません。すなわち、2 ノードのクラスタも、3 ノード以上のクラスタも同様に扱われます。これが可能なのは、次の 2 つの理由によります。
Cluster Volume Manager を使用する構成と異なり、HA 環境に共有ディスクの概念がありません。常に、多くても 1 つのノードだけがディスクセットをマスターできるだけです。ここでは、ノードで問題が発生した後、複数のノードがディスクセットにアクセスする必要があるという状況を除外しています。
クラスタのインターコネクトで問題が発生した場合は、二重障害 (両方のプライベートリンクの障害) とみなされます。票割れの状態になった場合、保証されるのは、データの完全性です。クラスタがユーザーの介入なく動作を継続できる保証はありません。たとえば、すべてのノードがディスクセットに接続され、票割れが発生した 3 ノードのクラスタでは、ノードの 1 つまたは 2 つ、あるいは 3 つのノードすべてがクラッシュする可能性があります。このアルゴリズムは、実際には、定足数デバイスを採用したどのアルゴリズムよりも高い可用性を実現します。
ディスクの防護は、次の手順で実現されます。
クラスタからノードが削除されると、残りのノード 1 つがディスクを SCSI 予約します。この後、ディスクそのものによってクラスタのメンバーでなくなったノードをはじめとする別のノードが、ディスクに対する読み取りや書き込みを行うことが防止されます。ディスクは、読み取りあるいは書き込みコマンドに対して Reservation_Conflict エラーを返します。 Solstice DiskSuite の構成では、SCSI 予約は、Sun の多重ホストに対する ioctl の MHIOCTKOWN を発行することによって行われます。
クラスタ内のメンバーは、アクセスしているディスクに対して連続的に MHIOCENFAILFAST ioctl を有効にします。この ioctl はディスクドライバに対する命令であり、別のノードによって予約されていて、ディスクにアクセスできない場合に、ノードが自身をパニック状態にできるようにします。MHIOCENFAILFAST ioctl によって、ドライバは、このノードがディスクに対して発行するすべての読み取りおよび書き込みコマンドについて、返されたエラーに Reservation_Conflict エラーコードがないかどうかを調べ、またバックグラウンドで定期的に、ディスクにテストを行なって、Reservation_Conflict が発生していないかどうかを検査します。Reservation_Conflict が返された場合は、フォアグラウンドとバックグラウンド両方の制御フローパスがパニックになります。
MHIOCENFAILFAST は、デュアルホストのディスク専用の ioctl ではありません。ディスクに対して MHIOCENFAILFAST を有効にしたノードが、別のノードが予約 (SCSI-2 排他予約) しているためにそのディスクにアクセスできなくなった場合、ノードはパニックになります。
ディスク防護のためのこの解決策は、SCSI-2 のディスク予約の概念に依存しています。SCSI-2 ディスク予約では、1 つのノードだけがディスクを予約することができます。
Solstice DiskSuite の構成の場合、インストールプログラムの scinstall(1M) は、SSVM や CVM の構成のときのように、定足数デバイスの指定やノードの設定を求めたり、障害防護ポリシーの選択を求めたりしません。ボリュームマネージャとして Solstice DiskSuite を指定した場合、直接接続デバイス、すなわち、3 つ以上にノードに直接接続されたデバイスを構成することはできません。Solstice DiskSuite の構成では、ノードのペアにだけディスクを接続できます。
scconf(1M) コマンドに +D フラグを指定することによって、直接接続デバイスの構成を有効にすることができますが、Solstice DiskSuite の構成では、この設定は行わないでください。