Sun Cluster の概要 (Solaris OS 版)

クォーラムデバイス

クォーラムデバイスとは、定足数 (quorum) を確立してクラスタを実行するために使用される「票」を持つ、複数のノードによって共有されるディスクです。 クラスタは、票の定足数が満たされた場合にのみ動作可能です。 クォーラムデバイスは、クラスタが独立したノードの集合にパーティション分割されたときに、どちらのノード集合が新しいクラスタを構成するかを確定するために使用されます。

クラスタノードとクォーラムデバイスはどちらも、定足数を確立するために投票します。 デフォルトにより、クラスタノードは、起動してクラスタメンバーになると、定足数投票数 (quorum vote count) を 1 つ獲得します。 ノードは、ノードのインストール中や管理者がノードを保守状態にした時には、投票数は 0 になります。

クォーラムデバイスは、デバイスへのノード接続の数に基づいて投票数を獲得します。 クォーラムデバイスは、設定されると、最大投票数 N-1 を獲得します。この場合、N は、投票数がゼロ以外で、クォーラムデバイスへ接続された投票数を示します。 たとえば、2 つのノードに接続された、投票数がゼロ以外のクォーラムデバイスの投票数は 1 (2-1) になります。

データの完全性

Sun Cluster システムはデータ破損を防ぎ、データの完全性を保とうとします。 それぞれのクラスタノードはデータとリソースを共有していますので、クラスタが、同時にアクティブである複数のパーティションに分割されることがあってはなりません。 CMM は、必ず 1 つのクラスタだけが使用可能であることを保証します。

クラスタのパーティション分割によって起こる問題 に split-brain と amnesia があります。 split-brain が起こるのは、ノード間のクラスタインターコネクトが失われ、クラスタがサブクラスタにパーティション分割され、各サブクラスタが唯一のパーティションであると認識する場合です。 ほかのサブクラスタの存在を認識していないサブクラスタは、ネットワークアドレスの重複やデータ破損など、共有リソースの対立を引き起こすおそれがあります。

amnesia は、すべてのノードがそのクラスタ内で不安定なグループの状態になっている場合に起こります。 たとえば、ノード A とノード B からなる 2 ノードクラスタがあるとします。ノード A が停止すると、CCR の構成データはノード B のものだけが更新され、ノード A のものは更新されません。この後でノード B が停止し、ノード A が再起動されると、ノード A は CCR の古い内容に基づいて動作することになります。 この状態を amnesia と呼びます。この状態になると、クラスタは、古い構成情報で実行されることがあります。

split-brain と amnesia の問題は、各ノードに 1 票を与え、過半数の投票がないとクラスタが動作しないようにすることで防止できます。 過半数の投票を得たパーティションは「定足数 (quorum)」を獲得し、アクティブになります。 この過半数の投票メカニズムは、クラスタのノード数が 2 を超える場合には有効です。 2 ノードクラスタでは過半数が 2 です。 このようなクラスタがパーティション分割されると、パーティションは外部からの投票で定足数を獲得します。 この外部からの投票は、クォーラムデバイスによって行われます。 クォーラムデバイスは、2 つのノードで共有されるディスクであれば何でもかまいせん。

表 2–1 に、Sun Cluster ソフトウェアが定足数を使って split-brain や amnesia の問題を防止する方法を示します。

表 2–1 クラスタ定足数、および split-brain と amnesia の問題

問題 

定足数による解決策 

split brain 

過半数の投票を獲得したパーティション (サブクラスタ) だけをクラスタとして実行できるようにする (過半数を獲得できるパーティションは 1 つのみ)。 ノードが定足数を獲得できないと、ノードはパニックになります。  

amnesia  

起動されたクラスタには、最新のクラスタメンバーシップのメンバーであった (したがって、最新の構成データを持つ) ノードが少なくとも 1 つあることを保証する。  

ニ重障害の防止

クラスタにとって重大な問題は、クラスタがパーティション分割される (sprit-brain と呼ばれる) 原因となる障害です。 このような状態になると、一部のノードが通信できなくなるため、個々のノードまたはノードの一部が、ノード単体または一部のノードによってクラスタを形成しようとします。 各部分、つまりパーティションは、マルチホストディスクに対して単独のアクセスと所有権を持つものと誤って「認識する」ことがあります。 しかし、複数のノードがディスクに書き込もうとすると、データ破損を招くおそれがあります。

二重障害の防止機能は、ディスクへのアクセスを防止することによってノードがマルチホストディスクにアクセスすることを制限します。 障害が発生するかパーティション分割され、ノードがクラスタから切り離れると、二重障害の防止機能によって、ノードがディスクにアクセスできなくなります。 現在のメンバーノードだけが、ディスクへのアクセス権を持つため、データの完全性が保たれます。

Sun Cluster システムは、SCSI ディスクリザベーションを使用して、二重障害の防止機能を実装します。 SCSI リザベーションを使用すると、障害が発生したノードは、ディスクへのアクセスを防止されることによってマルチホストディスクへのアクセスを阻止します。

クラスタメンバーは、別のノードがクラスタインターコネクトを介して通信していないことを検出すると、二重障害の防止手順を開始して、障害のあるそのノードが共有ディスクへアクセスするのを防止します。 この二重障害の防止機能が動作すると、アクセスを阻止されたノードはパニック状態になり、そのコンソールに「reservation conflict」メッセージが表示されます。

二重障害の防止に対するフェイルファースト機構

フェイルファースト機構は、障害のノードをパニック状態にしますが、そのノードの再起動を防ぐことはしません。 パニックの後にこのノードは再起動を行ない、クラスタに再び参加しようとすることがあります。

クラスタ内の他のノードとの接続性を失ったノードが、定足数を達成可能なパーティションに参加していない場合、そのノードは別のノードによってクラスタから強制的に切り離されます。 定足数を達成可能なパーティションに参加している別のノードが、共有ディスクにリザベーションを発行します。 フェイルファースト機構の結果、定足数を満たしていないノードはパニック状態になります。