ネットワーク分割のような複合的な障害が発生すると、クラスタメンバーの複数のサブセットがクラスタに留まる場合があります。通常、これらのサブセットは相互通信の一部が不可能になるか、まったく通信できない状態になります。このような場合、ソフトウェアは有効なクラスタを 1 つだけ残すように試みます。そのため、ソフトウェアはノードの一部またはすべてを停止させる場合があります。この節では、これらの決定に使用される基準について説明します。
定足数基準は、クラスタノードの本来のセット (構成ノードに限らない) の半分以上のメンバーを含むサブセットと決められています。サブセットが定足数基準に満たない場合、サブセット内のノードは自ら停止し、reconfig.4014 エラーメッセージが表示されます。定足数基準に満たない原因は、ネットワーク分割や、半分を超えるノードで同時に障害が発生したことなどが考えられます。
有効なクラスタには、プライベートネットワーク上で互いに通信できるノードだけが含まれます。
2 つのサブセットに分割された 4 ノードクラスタを考えてみましょう。この 2 つのサブセットの一方は 1 つのノード、他方は 3 つのノードから構成されています。各サブセットは、定足数基準を満たそうと試みます。最初のサブセットには本来の 4 つのうちの 1 つのノードしかなく、定足数基準を満たしていません。そのため、このサブセットのノードは停止します。2 つ目のサブセットには本来の 4 つのうちの 3 つのノードが含まれ、定足数基準を満たしているため、動作したままとなります。
別の例として、定足数デバイスを持つ 2 ノードクラスタを考えてみます。このような構成で分割が発生する場合、一方のノードと定足数デバイスで定足数基準が満たされるため、クラスタは起動したままとなります。
split-brain 分割は、1 つのサブセットにクラスタメンバーのちょうど半分が含まれる場合に発生します (split-brain 分割には 2 ノードクラスタ + 定足数デバイスというケースは含まれない)。Sun Cluster の最初のインストールでは、split-brain 分割が発生する場合の復元方法の選択を求められます。選択肢は ask と select です。ask を選択した場合、split-brain 分割の発生時にシステムはどのノードを起動しておくか尋ねてきます。select を選択した場合、システムはどのクラスタメンバーを起動しておくべきか自動的に選択します。
split-brain 分割の処理方法として自動選択ポリシーを選択した場合は、Lowest Nodeid または Highest Nodeid を選択できます。Lowest Nodeid を選択すると、最小の ID 値を持つノードが入ったサブセットが新しいクラスタになります。Highest Nodeid を選択すると、最大の ID 値を持つノードが入ったサブセットが新しいクラスタになります。詳細は、『Sun Cluster 2.2 ソフトウェアのインストール』のインストールについての説明を参照してください。
どちらの場合も、ほかのサブセットのノードは手動で停止する必要があります。
自動選択ポリシーを選択しなかった場合 (分割発生時にシステムが入力を求めてくる場合)、システムは次のエラーメッセージを表示します。
SUNWcluster.clustd.reconf.3010 "*** ISSUE ABORTPARTITION OR CONTINUEPARTITION *** Proposed cluster: xxx Unreachable nodes: yyy" |
さらに、10 秒ごとにコンソールに次のようなメッセージが表示されます。
*** ISSUE ABORTPARTITION OR CONTINUEPARTITION *** If the unreachable nodes have formed a cluster, issue ABORTPARTITION. (scadmin abortpartition <localnode> <clustername>) You may allow the proposed cluster to form by issuing CONTINUEPARTITION. (scadmin continuepartition <localnode> <clustername>) Proposed cluster partition: 0 Unreachable nodes: 1 |
自動選択処理を選択しなかった場合は、「新しいクラスタを選択するには」の作業を行なって新しいクラスタを選択してください。
split-brain 障害の後でクラスタを再起動するには、停止したノードが完全に起動するまで待ち (ノードの自動再構成または自動再起動が起きる場合があります)、その後 scadmin startnode コマンドを使用してそのノードをクラスタに戻します。
どのサブセットで新しいクラスタを構成するかを決定します。停止させるサブセット内のノードの 1 つで、次のコマンドを実行します。
# scadmin abortpartition |
1 つのノードで abortpartition コマンドを発行すると、クラスタメンバーシップモニター (CMM) がそのコマンドをそのパーティション内のすべてのノードに伝播します。そのため、パーティション内のすべてのノードがそのコマンドを受け取った場合、それらはすべて停止します。しかし、CMM が通信できないノードがパーティションに存在する場合、それらは手動で停止させる必要があります。停止しない残ったノードで、scadmin abortpartition コマンドを実行してください。
起動したままにしておくサブセット内のノードの 1 つで、次のコマンドを実行します。
# scadmin continuepartition |
新しいクラスタで別の障害が発生すると、さらに再構成が行われます。アクティブクラスタは、常に 1 つです。