クラスタノードはデータとリソースを共有するため、クラスタはデータとリソースの完全性を維持するための手順に従う必要があります。あるノードがメンバーシップに関するクラスタの規則に合致しない場合、クラスタは、そのノードがクラスタに属するのを禁止する必要があります。
Sun Cluster では、クラスタへのノードの結合を判断する機構を定足数 (quorum) と呼びます。Sun Cluster は、多数決のアルゴリズムを使用して定足数を実装します。クラスタノードと定足数デバイス は、どちらも複数のノード間で共有されるディスクであり、定足数を確立するために投票 (vote) します。定足数デバイスにはユーザーデータを含むことができます。
定足数アルゴリズムは動的に動作します。クラスタイベントによってその計算が発生した場合、計算結果はクラスタの存続期間中、変化し続けます。定足数は、split-brain と amnesia という 2 つのクラスタの問題を防止します。どちらも、一貫性のないデータがクライアントに提示される原因となる可能性があります。次の表は、これらの 2 つの問題と、定足数によるその解決方法を説明しています。
表 3-3 クラスタ定足数、および split-brain と amnesia の問題
問題 |
説明 |
定足数による解決策 |
---|---|---|
split brain |
ノード間のクラスタインターコネクトが失われてクラスタがサブクラスタに分割され、それぞれが唯一のパーティションであると誤って認識した場合に発生する |
過半数の投票があるパーティション (サブクラスタ) だけが、クラスタとして実行できるようにする (1 つのパーティションだけが、このような過半数によって存在できる) |
amnesia |
停止時よりも古いクラスタデータを使用して、停止後にクラスタが再起動すると発生する |
クラスタの起動時に、最新のクラスタメンバーシップのメンバーであった (したがって、最新の構成を持つ) 少なくとも 1 つのノードが存在するように保証する |
クラスタノードと定足数デバイス (複数のノード間で共有されるディスク) はどちらも、定足数を確立するために投票します。デフォルトにより、クラスタノードは、起動してクラスタメンバーになると、定足数投票数 (quorum vote count) を 1 つ獲得します。またノードは、たとえばノードのインストール中や管理者がノードを保守状態にしたときには、投票数は 0 になります。
定足数デバイスは、デバイスへのノード接続の数に基づいて投票数を獲得します。定足数デバイスは、設定されると、最大投票数 N-1 を獲得します。この場合、N は、投票数がゼロ以外で、定足数デバイスへのポートを持つノードの数を示します。たとえば、2 つのノードに接続された、投票数がゼロ以外の定足数デバイスの投票数は 1 (2−1) になります。
定足数デバイスは、クラスタのインストール中、または『Sun Cluster 3.0 のシステム管理』で説明している手順を使用して後で構成します。
定足数デバイスは、現在接続されている少なくとも 1 つのノードがクラスタメンバーである場合にのみ、投票数を獲得します。また、クラスタの起動中、定足数デバイスは、現在接続されている少なくとも 1 つのノードが起動中で、その停止時に最も最近起動されたクラスタのメンバーであった場合にのみ投票数を獲得します。
定足数 (quorum) の構成は、クラスタ内のノードの数によって異なります。
2 ノードクラスタ - 2 ノードクラスタを形成するには、定足数投票数 (quorum vote count) が 2 つ必要です。これらの 2 つの投票数は、2 つのクラスタノード、または 1 つのノードと 1 つの定足数デバイスのどちらかによるものです。ただし、2 ノードクラスタでは、一方のノードに障害が発生したときに単一ノードで処理を続行できるように、1 つの定足数デバイスが構成されなければなりません。
3 ノード以上のクラスタ - ディスク格納装置へのアクセスを共有するすべてのノードペア間に、定足数デバイスを指定する必要があります。たとえば、図 3-3 のような 3 ノードクラスタを想定します。この場合、ノード A とノード B が同じディスク格納装置へのアクセスを共有し、ノード B とノード C は別のディスク格納装置へのアクセスを共有します。この構成では、合計 5 つの投票数があります。3 つはノードによるもの、2 つはノード間で共有される定足数デバイスによるものです。クラスタを形成するには、過半数の投票数 (この場合は 3 つ) を必要とします。定足数デバイスを、ディスク格納装置へのアクセスを共有するすべてのノードペア間に指定することは、Sun Cluster では必要とされておらず、また実行もされません。しかし、N+1 構成が 2 ノード構成になり、両方のディスク格納装置へアクセスするノードに障害が発生すると、必要な投票数を提供します。すべてのペア間で定足数デバイスを構成すると、残りのノードはクラスタとして動作を継続することができます。
これらの構成の例については、図 3-3 を参照してください。
定足数デバイスを設定するときは、次のガイドラインを使用してください。
同じ共有ディスク格納装置に接続されたすべてのノード間で定足数デバイスを確立します。共有格納装置内に 1 つのディスクを定足数デバイスとして追加し、いずれかのノードに障害が生じたときに、他のノードが定足数を維持して、共有格納装置上のディスクデバイスグループをマスターできるようにします。
定足数デバイスは少なくとも 2 つのノードに接続する必要があります。
定足数デバイスとして、二重ポート定足数デバイスとして使用される、任意の SCSI-2 または SCSI-3 ディスクが使用できます。3 つ以上のノードに接続されたディスクは、ディスクが定足数デバイスとして使用されるかどうかに関係なく、SCSI-3 持続的グループ予約 (PGR) をサポートしなければなりません。詳細については、『Sun Cluster 3.0 ソフトウェアのインストール』の計画に関する章を参照してください。
定足数デバイスとしてユーザーデータを含むディスクを使用できます。
ノードの集合間で複数の定足数デバイスを構成してください。異なる格納装置から複数のディスクを使用して、奇数の定足数デバイスをノードの各集合間で構成してください。これにより、個々の定足数デバイスの障害から保護できます。
クラスタの主要な問題は、クラスタがパーティション分割される (sprit-brain と呼ばれる) 原因となる障害です。この障害が発生すると、一部のノードが通信できなくなるため、個々のノードまたはノードの一部が、個々のクラスタまたはクラスタの一部を形成しようとします。各部分、つまりパーティションは、多重ホストディスクに対して単独のアクセスと所有権を持つものと誤って認識します。複数のノードがディスクに書き込もうとすると、データが破壊される可能性があります。
障害による影響の防止機能では、多重ホストディスクへのアクセスを物理的に防止することによって制限します。障害が発生するかパーティション分割され、ノードがクラスタから切り離されると、障害による影響の防止機能によって、ノードがディスクにアクセスできなくなります。現在のメンバーノードだけが、ディスクへのアクセス権を持つため、データの完全性が保たれます。
ディスクデバイスサービスは、多重ホストディスクを使用するサービスに対して、フェイルオーバー機能を提供します。現在、ディスクデバイスグループの主ノード (所有者) として機能しているクラスタメンバーに障害が発生するか、またはこのメンバーに到達できなくなると、新しい主ノードが選択されて、ディスクデバイスグループへのアクセスが可能になり、わずかな割り込みだけで処理が続行されます。このプロセス中、古い主ノードは、新しい主ノードが起動される前に、デバイスへのアクセスを放棄しなければなりません。ただし、あるメンバーがクラスタから切り離されて到達不能になると、クラスタはそのノードに対して、主ノードであったデバイスを解放するように通知できません。したがって、存続するメンバーが、障害の発生したメンバーから広域デバイスを制御してアクセスできるようにする手段が必要です。
Sun Cluster は、SCSI ディスク予約を使用して、障害による影響の防止機能を実装します。SCSI 予約を使用すると、障害が発生したノードは、多重ホストディスクによって阻止されて、これらのディスクへのアクセスが防止されます。
SCSI-2 ディスク予約は、ある形式の予約をサポートしています。これは、ディスクに接続されたすべてのノードへのアクセスを付与するか (予約が設定されていない場合)、または単一ノード (予約を保持するノード) へのアクセスを制限するものです。
クラスタメンバーは、別のノードがクラスタインターコネクトを介して通信していないことを検出すると、障害による影響の防止手順を開始して、そのノードが共有ディスクへアクセスするのを防止します。この障害による影響の防止機能が実行される場合、通常、阻止されるノードは、そのコンソールに「reservation conflict」(予約の衝突) というメッセージを表示して停止します。
予約の衝突は、ノードがクラスタメンバーではなくなったことが検出された後で、SCSI 予約がこのノードと他のノードの間で共有されるすべてのディスクに対して設定されると発生します。阻止されるノードは阻止されていることを認識しない場合があり、共有ディスクのどれかにアクセスしようとして、予約を検出して停止します。