(57)【特許請求の範囲】
【請求項１】
マスタノードとして動作した場合にクライアントに対してサービスを提供する、クラスタ構成の第１乃至第ｎの計算機と、
前記第１乃至第ｎの計算機によって共有される共有ストレージ装置であって、前記第１乃至第ｎの計算機のいずれかをマスタノードとして選択する際の優先順位の決定に用いられる当該第１乃至第ｎの計算機各々の重みが保持された重み情報を格納する共有ストレージ装置と
を具備し、
前記第１乃至第ｎの計算機は、それぞれ、
相互にハートビート通信を行うことで計算機障害を検出する第１乃至第ｎのクラスタ管理手段と、
前記第１乃至第ｎの計算機自身が前記サービスを開始するのに必須の必要条件が成立するかをチェックするための第１のタイプのチェック方法及び前記第１乃至第ｎの計算機自身が前記サービスを開始するのに有利となる十分条件が成立するかをチェックするための第２のタイプのチェック方法を定義したチェック方法定義情報と、前記第１のチェック方法に基づくチェック結果がチェック失敗の場合に対応した重み付けの減点の値及び前記第２のチェック方法に基づくチェック結果がチェック成功の場合に対応した重み付けの加点の値を含む、チェック結果に対応した重み付けのための加減点の値とが設定されたチェックリストを格納する第１乃至第ｎのチェックリスト記憶手段と、
前記第１乃至第ｎのクラスタ管理手段による計算機障害検出に応じて、それぞれ、前記第１乃至第ｎのチェックリスト記憶手段に格納されている前記チェックリストに設定されたチェック方法定義情報によって定義される前記第１のチェック方法及び前記第２のチェック方法に従って前記第１乃至第ｎの計算機自身の前記サービスの開始に関する状態をチェックし、前記チェックリストからチェック結果に対応する前記重み付けのための加減点の値を取得して、当該取得された値で前記共有ストレージ装置に格納されている前記重み情報中の、前記第１乃至第ｎの計算機自身の重みを更新する第１乃至第ｎの重み付け処理手段であって、前記第１のチェック方法に基づくチェック結果がチェック失敗の場合、前記チェックリストから当該チェック失敗に対応した重み付けの減点の値を取得し、前記第２のチェック方法に基づくチェック結果がチェック成功の場合、前記チェックリストから当該チェック成功に対応した重み付けの加点の値を取得する第１乃至第ｎの重み付け処理手段と、
前記更新された前記重み情報中の前記第１乃至第ｎの計算機の重みに基づいて当該第１乃至第ｎの計算機自身が前記マスタノードとして最も優先順位が高いかを判定し、最も優先順位が高い場合に当該第１乃至第ｎの計算機自身を前記マスタノードとして選択するためのマスタノード調停処理を実行する第１乃至第ｎの調停手段とを
含むことを特徴とするクラスタシステム。
【請求項２】
前記チェックリストに設定される加減点の値は、前記第１のチェック方法に基づく前記チェック結果がチェック成功の場合に対応した重み付けの加点を０とする値と、前記第２のチェック方法に基づく前記チェック結果がチェック失敗の場合に対応した重み付けの減点を０とする値とを更に含み、前記重み付けの加点の値と減点の値とは、“加点の合計値−減点の最小値”が負となるように設定されていることを特徴とする請求項１記載のクラスタシステム。
【請求項３】
前記第１乃至第ｎのクラスタ管理手段による計算機障害検出時から、前記第１乃至第ｎの計算機が正常な場合に前記第１乃至第ｎの重み付け処理手段が前記重み情報中の前記第１乃至第ｎの計算機自身の重みを更新するまでに要する時間よりも長い規定時間が予め定められており、
前記第１乃至第ｎの調停手段は、それぞれ前記第１乃至第ｎのクラスタ管理手段による計算機障害検出時から前記規定時間が経過するのを待って前記マスタノード調停処理を開始する
ことを特徴とする請求項１または２のいずれか一項に記載のクラスタシステム。
【請求項４】
マスタノードとして動作した場合にクライアントに対してサービスを提供する、クラスタ構成の第１乃至第ｎの計算機であって、それぞれ、前記第１乃至第ｎの計算機自身が前記サービスを開始するのに必須の必要条件が成立するかをチェックするための第１のタイプのチェック方法及び前記第１乃至第ｎの計算機自身が前記サービスを開始するのに有利となる十分条件が成立するかをチェックするための第２のタイプのチェック方法とを定義したチェック方法定義情報と、前記第１のチェック方法に基づくチェック結果がチェック失敗の場合に対応した重み付けの減点の値及び前記第２のチェック方法に基づくチェック結果がチェック成功の場合に対応した重み付けの加点の値を含む、チェック結果に対応した重み付けのための加減点の値とが設定されたチェックリストを格納する第１乃至第ｎのチェックリスト記憶手段を含む第１乃至第ｎの計算機と、前記第１乃至第ｎの計算機によって共有される共有ストレージ装置であって、前記第１乃至第ｎの計算機のいずれかをマスタノードとして選択する際の優先順位の決定に用いられる当該第１乃至第ｎの計算機各々の重みが保持された重み情報を格納する共有ストレージ装置とを有するクラスタシステムにおいて、
前記第１乃至第ｎの計算機が相互にハートビート通信を行うことで計算機障害を検出するステップと、
前記計算機障害検出に応じて、それぞれ、前記第１乃至第ｎのチェックリスト記憶手段に格納されている前記チェックリストに設定されたチェック方法定義情報によって定義される前記第１のチェック方法及び第２のチェック方法に従って前記第１乃至第ｎの計算機が自身の前記サービスの開始に関する状態をチェックするステップと、
前記第１乃至第ｎの計算機が、前記チェックリストからチェック結果に対応する前記重み付けのための加減点の値を取得するステップであって、前記第１のチェック方法に基づくチェック結果がチェック失敗の場合に、前記チェックリストから当該チェック失敗に対応した重み付けの減点の値を取得し、前記第２のチェック方法に基づくチェック結果がチェック成功の場合に、前記チェックリストから当該チェック成功に対応した重み付けの加点の値を取得するステップと、
前記第１乃至第ｎの計算機が、前記共有ストレージ装置に格納されている前記重み情報中の、前記第１乃至第ｎの計算機自身の重みを、前記取得された値で更新するステップと、
前記第１乃至第ｎの計算機が、前記更新された前記重み情報中の自身の重みを参照することにより、前記マスタノードとして自身が最も優先順位が高いかを判定するステップと、
前記第１乃至第ｎの計算機のうち、前記マスタノードとして最も優先順位が高いと判定した計算機自身が、自身を前記マスタノードとして選択するステップと
を具備することを特徴とするクラスタシステムにおいてマスタノードを選択する方法。
【請求項５】
前記チェックリストに設定される加減点の値は、前記第１のチェック方法に基づく前記チェック結果がチェック成功の場合に対応した重み付けの加点を０とする値と、前記第２のチェック方法に基づく前記チェック結果がチェック失敗の場合に対応した重み付けの減点を０とする値とを更に含み、前記重み付けの加点の値と減点の値とは、“加点の合計値−減点の最小値”が負となるように設定されていることを特徴とする請求項４記載のクラスタシステムにおいてマスタノードを選択する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタ構成の複数の計算機を含むクラスタシステムに係り、特に、スプリットブレインの発生時に、クライアントに対してサービスを提供するマスタノードを選択するのに好適なクラスタシステム及び同システムにおいてマスタノードを選択する方法に関する。
【背景技術】
【０００２】
従来から、計算機の障害時にも、当該計算機がクライアントに提供していたサービスを別の計算機で継続することを可能とするクラスタシステムが知られている。このようなクラスタシステムでは、当該システムを構成する複数の計算機（ノード）が相互にハートビートと呼ばれる通信を行うことにより、障害が発生したノードを検知するのが一般的である。
【０００３】
しかし、例えばハートビート通信のための通信経路の障害により、クラスタシステムを構成する複数のノードが孤立すると、当該複数のノードで同じサービスが開始されるといったクラスタとして不整合な状態が発生する。このような状態は、スプリットブレインと呼ばれている。
【０００４】
そこで、例えば特許文献１は、スプリットブレインを回避（または解消）するために、クラスタを構成する計算機（ノード）の数によって、予めスプリットブレインの原因になる可能性について通知する仕組みや、タイブレーカ(所有権の要求に対して所有者を多くても１つにするための機能)を用いて共有リソースを保護する仕組みについて開示している。
【０００５】
また、例えば特許文献２は、スプリットブレインを回避（または解消）するために、スプリットブレイン発生時に、定義された優先順位に従って正常なノードでサービスを開始する仕組みについて開示している。即ち特許文献２に記載された、スプリットブレインを回避（または解消）する仕組みでは、スプリットブレインが発生すると、定義された優先順位に従ってノード毎にサービス起動のための（開始時刻と終了時刻とで示される）時間が割り当てられる。もし、割り当てられた時間内に当該時間が割り当てられたノードでサービスを開始できなければ、そのノードは動作を停止する。そして次の優先順位のノードに割り当てられた時間内でサービスの開始が試みられる。このようにして、最終的にサービスを開始できた正常なノードがフェイルオーバ先のマスターノードとなってサービスを継続する。
【特許文献１】特開２００４−３４２０７９号公報
【特許文献２】特開２００６−０４８４７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記特許文献２に記載されているようなスプリットブレインを回避（または解消）する仕組み（以下、従来技術と称する）では、予め定められた優先順位に従って割り当てられた時間内にサービスが実行できたノードが、フェイルオーバ先となるマスターノードとして選択される。しかし、優先順位が高いノードが、必ずしもマスタノードとして最適でないこともある。このため、従来技術では、マスタノードとして選択されたノードでサービスが開始されるまで時間を要したり、サービスは開始されたものの、当該ノードからクライアントに対してサービスを提供できない等、可用性の低下を招く可能性があった。
【０００７】
本発明は上記事情を考慮してなされたものでその目的は、スプリットブレインが発生しても、クライアントに対してサービスを提供可能な最適なノードをマスターノードとして選択することができるクラスタシステム及び同システムにおいてマスタノードを選択する方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明の１つの観点によれば、マスタノードとして動作した場合にクライアントに対してサービスを提供する、クラスタ構成の第１乃至第ｎの計算機と、前記第１乃至第ｎの計算機によって共有される共有ストレージ装置であって、前記第１乃至第ｎの計算機のいずれかをマスタノードとして選択する際の優先順位の決定に用いられる当該第１乃至第ｎの計算機各々の重みが保持された重み情報を格納する共有ストレージ装置とを具備するクラスタシステムが提供される。前記第１乃至第ｎの計算機は、それぞれ、相互にハートビート通信を行うことで計算機障害を検出する第１乃至第ｎのクラスタ管理手段と、前記第１乃至第ｎのクラスタ管理手段による計算機障害検出に応じて、それぞれ前記第１乃至第ｎの計算機自身の前記サービスの開始に関する状態をチェックし、そのチェックされた状態に応じて、前記共有ストレージ装置に格納されている前記重み情報中の、前記第１乃至第ｎの計算機自身の重みを更新する前記第１乃至第ｎの重み付け処理手段と、前記更新された前記重み情報中の前記第１乃至第ｎの計算機の重みに基づいて当該第１乃至第ｎの計算機自身が前記マスタノードとして最も優先順位が高いかを判定し、最も優先順位が高い場合に当該第１乃至第ｎの計算機自身を前記マスタノードとして選択するためのマスタノード調停処理を実行する第１乃至第ｎの調停手段とを含む。
【発明の効果】
【０００９】
本発明によれば、クラスタシステムを構成する第１乃至第ｎの計算機による計算機障害検出に応じて、当該第１乃至第ｎの計算機で行われるマスタノード調停（選択）のために、当該第１乃至第ｎの計算機が自身のサービスの開始に関する状態をチェックして、そのチェック結果に応じて、当該第１乃至第ｎの計算機が参照可能な自身の重みを変化させることによって、マスターノードの優先順位を変えるようにしたので、スプリットブレインが発生しても、クライアントに対してサービスを提供可能な最適なノードをマスターノードとして選択することができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係るクラスタシステム１０を含むクライアント−サーバシステムの構成を示すブロック図である。  
図１において、クラスタシステム１０は、複数の計算機、例えばｎ台の計算機（以下、ノードと称する）１００-1〜１００-nから構成される。
【００１１】
ノード１００-1（＃１）〜１００-ｎ（＃ｎ）は、当該ノード１００-1〜１００-nによって共有される共有ストレージ装置２００と接続されている。共有ストレージ装置２００は、例えば複数のディスク装置から構成される。共有ストレージ装置２００は、クォーラム２１０を格納する。このクォーラム２１０が格納される共有ストレージ装置２００内の記憶領域は、クラスタシステム１０を構成するノード１００-1〜１００-n（つまりクラスタ構成のノード１００-1〜１００-n）から参照可能な記憶領域である。クォーラム２１０は、一貫性が保障されたクラスタ構成情報、つまりクラスタシステム１０の構成（クラスタ構成）を示す情報である。共有ストレージ装置２００には、上記クォーラム２１０のための記憶領域（クォーラム用共有ディスク領域）の他に、マスタノードがクライアントにサービスを提供するのに用いられる、サービスプロセスのための記憶領域（サービス用共有デスク領域）が確保されている。
【００１２】
クォーラム２１０は重み情報２１１を含む。重み情報２１１は、クラスタシステム１０を構成するノード１００-1〜１００-nの重みを示す。このノード１００-1〜１００-nの重みは、後述するように、当該ノード１００-1〜１００-nのそれぞれ重み付け処理部１３０-1〜１３０-nによって算出される。
【００１３】
図２は、クォーラム２１０に含まれている重み情報２１１の一例を示す。図２に示されるように、重み情報２１１は、ノード１００-1〜１００-nのノード名（ノードＩＤ）と当該ノード１００-1〜１００-nの重み（を示す値）との対から構成される。図２の例では、ノード１００-1（＃１）の重みは“ｊ”であり、ノード１００-1（＃ｎ）の重みは“ｋ”である。本実施形態において、重み情報２１１によって示されるノード１００-1〜１００-nの重みの初期値はｎｕｌｌ値（無効値）である。
【００１４】
再び図１を参照すると、ノード１００-1〜１００-nはネットワーク２０を介して例えばｍ台のクライアント（クライアント端末）３０-1〜３０-mと接続されている。ネットワーク２０は例えばローカルエリアネットワーク（ＬＡＮ）である。ノード１００-1〜１００-nは、自身がマスタノードとなった場合、クライアント３０-1〜３０-mのうち、当該マスタノードからのサービスを必要とする（要求する）クライアントに対して、ネットワーク２０を介して当該サービスを提供する。
【００１５】
ノード１００-1〜１００-nは、それぞれ、ローカルストレージ装置３００-1〜３００-nと接続されている。ローカルストレージ装置３００-1〜３００-nは、それぞれノード１００-1〜１００-nによるクラスタ管理に用いられるクラスタプログラム３０１を格納する。クラスタプログラム３０１は、ローカルストレージ装置３００-1〜３００-nからノード１００-1〜１００-n内の後述する記憶部１４０-1〜１４０-nに読み込まれることにより、当該ノード１００-1〜１００-n内の図示せぬＣＰＵによって実行される。ローカルストレージ装置３００-1〜３００-nは、それぞれ後述するチェックリスト１４１として記憶部１４０-1〜１４０-nにロードされる、例えばファイル形式のチェックリスト３０２も格納する。
【００１６】
ノード１００-1〜１００-nは、それぞれ、クラスタ管理部１１０-1〜１１０-nと、タイブレーカ機構１２０-1〜１２０-nと、重み付け処理部１３０-1〜１３０-nと、記憶部１４０-1〜１４０-nとを含む。記憶部１４０-1〜１４０-nは、例えば主メモリのような揮発性メモリを用いて実現される。記憶部１４０-1〜１４０-nは、それぞれローカルストレージ装置３００-1〜３００-nからダウンロードされるチェックリスト３０１をチェックリスト１４１として格納する。
【００１７】
チェックリスト１４１は、重み付け処理部１３０-1〜１３０-nによる重み付けに用いられるサービス提供機能のチェック方法を定義した情報（チェック方法定義情報）と、当該チェック方法によるチェックの結果に対応した重み付けのための加減点の値（重み付けのルール）とを予め保持する。
【００１８】
図３は、図１中のチェックリスト１４１の一例を示す。本実施形態において、チェックリスト１４１に保持（設定）されるサービス提供機能のチェック方法を定義したチェック方法定義情報として、そのサービス提供機能のチェックに必要なコマンド（コマンドコード）が用いられる。図３の例では、プロセス監視コマンド、ＤＩＳＫ経路監視コマンド、ＬＡＮ経路監視コマンド、ＣＰＵ使用率監視コマンド及びＭＥＭＯＲＹ使用率監視コマンドの各コマンド（監視コマンド）が、チェック方法を定義するコマンドとしてチェックリスト１４１に設定されている。
【００１９】
図３の例では、プロセス監視コマンド、ＤＩＳＫ経路監視コマンド及びＬＡＮ経路監視コマンドに対応付けられる、そのコマンドの実行によるチェック成功時の重み付けのための加減点はいずれも０（つまり加点０）であり、失敗時の重み付けのための加減点は、それぞれ−５０、−５０、−３０（つまり減点５０、５０、３０）である。また、ＣＰＵ使用率監視コマンド及びＭＥＭＯＲＹ使用率監視コマンドに対応付けられる、そのコマンドの実行によるチェック成功時の重み付けのための加減点はいずれも＋１０（つまり加点１０）であり、失敗時の重み付けのための加減点はいずれも０（つまり減点０）である。ＣＰＵ使用率監視コマンド及びＭＥＭＯＲＹ使用率監視コマンドの実行によるチェックの成功とは、それぞれＣＰＵ使用率及びＭＥＭＯＲＹ使用率が閾値未満の場合をいう。
【００２０】
クラスタ管理部１１０-1〜１１０-nは、クラスタシステム１０を管理するための基本機能を有するカーネル（クラスタ・カーネル）をなす。クラスタ管理部１１０-1〜１１０-nは、ハートビート通信路４０を介して相互に周知のハートビート通信を行うことにより、クラスタシステム１０を構成するノードの障害を検出する機能を有する。クラスタ管理部１１０-1〜１１０-nは、クォーラム２１０を常に最新の状態を示すように更新する。クラスタ管理部１１０-1〜１１０-nはまた、ノードの障害検出に応じ、それぞれ、タイブレーカ機構１２０-1〜１２０-nと重み付け処理部１３０-1〜１３０-nとを用いて、フェイルオーバ先のノード（つまりマスタノード）を決定するための制御を行う。
【００２１】
タイブレーカ機構１２０-1〜１２０-nは、クォーラム２１０を用いてマスタノードの調停を行う。タイブレーカ機構１２０-1〜１２０-nは、それぞれ重み判定部１２１を含む。重み判定部１２１は、クォーラム２１０に含まれている重み情報２１１に基づいて、マスタノード選択のための優先順位を決定する。
【００２２】
重み付け処理部１３０-1〜１３０-nは、それぞれ記憶部１４０-1〜１４０-nに格納（ロード）されているチェックリスト１４１に従う機能チェックによって取得されるノード１００-1〜１００-nの状態に基づき、当該ノード１００-1〜１００-nの重みを決定する。重み付け処理部１３０-1〜１３０-nの各々は、チェック部１３１及び重み算出部１３２を含む。
【００２３】
チェック部１３１は、チェックリスト１４１を参照して、当該チェックリスト１４１に設定されているコマンドを実行することにより、当該チェック部１３１が存在するノード１００-i（ｉ＝１，…ｎ）の状態をチェックする。チェック部１３１は、チェックリスト１４１に設定されているコマンドの実行に基づくノード１００-iの状態のチェック結果として、当該リスト１４１によってそのコマンド実行結果に対応付けられた重み付けのための加減点を取得する。重み算出部１３２は、チェックリスト１４１に設定されているコマンド毎にチェック部１３１によって取得された重み付けのための加減点に基づき、当該ノード１００-iの重みを算出する。重み算出部１３２は、算出されたノード１００-iの重みで、クォーラム２１０に含まれている重み情報２１１を更新する。
【００２４】
次に、本実施形態の動作の概要を説明する。
【００２５】
まずクラスタシステム１０を構成するノード１００-1〜１００-n内のクラスタ管理部１１０-1〜１００-nは、通常時はハートビート通信路４０を介して相互にハートビート通信を行うことにより、クラスタシステム１０における整合性を確認すると共にノード障害を検出する。
【００２６】
このような状態で、例えばハートビート通信路４０の障害によりハートビートが途絶えたものとする。するとクラスタ管理部１１０-1〜１１０-nは、それぞれ自身以外のノードに障害が発生したものと判断し、タイブレーカ機構１２０-1〜１２０-nにマスタノード決定のための調停を要求すると共に、重み付け処理部１３０-1〜１３０-nに重み付け処理を要求する。
【００２７】
重み付け処理部１３０-1〜１３０-nは、それぞれクラスタ管理部１１０-1〜１１０-nからの要求に応じて、次のような重み付け処理を予め定められた時間（規定時間）内に実行する。まず重み付け処理部１３０-1〜１３０-nは、それぞれノード１００-1〜１００-nの状態をチェックすることにより、当該ノード１００-1〜１００-nが現時点においてクライアントにサービスを提供できる程度を表す重みを決定（算出）する。重み付け処理部１３０-1〜１３０-nは、決定された重みで、共有ストレージ装置２００に格納されているクォーラム２１０中の重み情報２１１を更新する。
【００２８】
一方、タイブレーカ機構１２０-1〜１２０-nは、クラスタ管理部１１０-1〜１１０-nの要求を受け取ると、上記規定時間経過後に、クォーラム２１０中の重み情報２１１によって示されるノード１００-1〜１００-nの重みに基づき、ノード１００-1〜１００-nをマスタノードとして選択する際の優先順位を決定する。
【００２９】
次に、上述のハートビートが途絶えた場合の動作の詳細について、ノード１００-1での動作を例に、図４乃至図６を参照して説明する。図４は、主としてノード１００-1における情報の流れを示す図、図５はノード１００-1内の重み付け処理部１３０-1の処理（重み付け処理）の手順を示すフローチャート、図６はノード１００-1内のタイブレーカ機構１２０-1の処理（マスタノード調停処理）の手順を示すフローチャートである。
【００３０】
今、ハートビート通信路４０の障害により、当該ハートビート通信路４０上で図４に示すようにハートビートの途絶４１が発生した結果、ノード１００-1内のクラスタ管理部１１０-1が、当該ハートビートの途絶４１を検出したものとする。するとクラスタ管理部１１０-1は、クラスタシステム１０内の他のノードに障害が発生したものと判断する。
【００３１】
そこでクラスタ管理部１１０-1は、図４に示すように、タイブレーカ機構１２０-1に対してマスタノード決定のための調停の要求（調停要求）４２を発行する。またクラスタ管理部１１０-1は、図４に示すように、重み付け処理部１３０-1〜１３０-nに対して重み付け処理の要求（重み付け要求）４３を発行する。なおクラスタ管理部１１０-1は、クラスタシステム１０内の他のノード、例えばノード１００-nに障害が発生した結果、当該ノード１００-nからのハートビートだけが途絶えたことを検出した場合にも、上記調停要求４２及び重み付け要求４３を発行する。
【００３２】
重み付け処理部１３０-1は、クラスタ管理部１１０-1からの重み付け要求４３に応じて、以下に述べる重み付け処理４４を直ちに開始する。  
まず重み付け処理部１３０-1内の重み算出部１３２は、記憶部１４０-1内に、図４に示されるように重みレジスタ領域１４２を確保し、当該重みレジスタ領域１４２に初期重みとして０を設定する（ステップＳ１）。
【００３３】
すると重み付け処理部１３０-1内のチェック部１３１は、記憶部１４０-1に格納されているチェックリスト１４１を参照して、チェック方法定義情報として設定されているコマンド（未処理のコマンド）を当該リスト１４１から１つ取り出す（ステップＳ２）。そしてチェック部１３１は、チェックリスト１４１から取り出されたコマンドを実行することにより、ノード１００-1の状態をチェックする（ステップＳ３）。つまりチェック部１３１は、コマンド参照・実行操作４４１を行う。
【００３４】
次にチェック部１３１は、コマンド実行によるノード１００-1の状態のチェック結果（成功／失敗）から、チェックリスト１４１によって当該チェック結果に対応付けられた重み付けのための加減点（加点または減点の値）を取得する（ステップＳ４）。チェック部１３１は、取得された加減点を、対応するコマンドの実行によるノード１００-1の状態のチェック結果４４２（図４参照）として、重み算出部１３２に送出する。重み算出部１３２は、チェック部１３１から送出された加減点を現在レジスタ領域１４２に保持されている重みに加える重み加減操作４４３を行う（ステップＳ５）。
【００３５】
次にチェック部１３１は、チェックリスト１４１内の全てのコマンドを実行したかを判定する（ステップＳ６）。もし、未処理のコマンドが残っているならば（ステップＳ６）、チェック部１３１はステップＳ２に戻る。このようにして重み付け処理部１３０-1では、上記ステップＳ２乃至Ｓ６が、チェックリスト１４１内の全てのコマンドを実行したとステップＳ６で判定されるまで繰り返される。やがて、チェックリスト１４１内の全てのコマンドが実行されたならば（ステップＳ６）、重み算出部１３２は、その時点においてレジスタ領域１４２に保持されている重みで、クォーラム２１０に含まれている重み情報２１１において、ノード１００-1（＃１）に対応付けられている重み（ここではｎｕｌｌ値）を更新するための重み更新操作４４４を行う（ステップＳ７）。これにより重み付け処理部１３０-1における重み付け処理４４は終了する。図４の例では、ノード１００-1（＃１）に対応付けられている重みが（ｎｕｌｌ値から）“ｊ”に更新される。
【００３６】
ハートビートが途絶えた場合、クラスタシステム１０内のノード１００-1以外のノードにおいても、重み付け処理を含めて、当該ノード１００-1におけるのと同様の処理が行われる。これにより、ノード１００-1〜１００-nに障害が発生していないならば、クォーラム２１０に含まれている重み情報２１１において、ノード１００-1（＃１）〜１００-n（＃ｎ）に対応付けられている重み（つまりノード１００-1〜１００-nのノード名と対をなす重み）が、その時点におけるノード１００-1〜１００-nの状態を反映するように更新される。
【００３７】
重み情報２１１によって示されるノード１００-1〜１００-nの重みは、マスタノード選択の優先順位を表す。したがって本実施形態においては、ノード１００-1〜１００-nの重みを、当該ノード１００-1〜１００-nの状態に応じて更新することで、マスタノード選択の優先順位を動的に変更することができる。
【００３８】
本実施形態において、ノード１００-1〜１００-n内の重み付け処理部１３０-1〜１３０-nによる重み付け処理は、当該ノード１００-1〜１００-nに障害が発生していないならば、予め定められた規定時間内に完了するようになっている。
【００３９】
そこで、例えばノード１００-1内のタイブレーカ機構１２０-1は、クラスタ管理部１１０-1から調停要求４２を受け取ると、上記規定時間が経過するのを待つ（ステップＳ１１）。そして規定時間が経過すると、タイブレーカ機構１２０-1は、クォーラム２１０中の重み情報２１１に基づいて、マスタノードの調停、即ち重み情報２１１の示す重みに基づいてマスタノードを選択するためのマスタノード選択操作４５を開始する。このマスタノード選択操作４５は、タイブレーカ機構１２０-1内の重み判定部１２１を用いて次のように行われる。
【００４０】
まず重み判定部１２１は、共有ストレージ装置２００に格納されているクォーラム２１０中の重み情報２１１の読み込み（重み読み込み）４５１を行う（ステップＳ１２）。次に重み判定部１２１は、重み情報２１１によって示されるノード１００-1〜１００-nの各々の重みを比較判定することによって、当該ノード１００-1〜１００-nをマスタノードとして選択する際の優先順位の決定（優先順位決定）４５２を行う（ステップＳ１３）。このステップＳ１３の処理は、例えば、重み情報２１１におけるノード１００-1〜１００-nのノード名の並びを当該ノード名と対をなす重みの降順にソートする処理によって実現される。ここでは、重みが大きいノードほど、高優先順位となる。また、重み情報２１１において、上記規定時間内に上記重み付け処理を完了できなったノードのノード名と対をなす重みは、ｎｕｌｌ値のままである。このようなノードの優先順位は最も低くなる。
【００４１】
重み判定部１２１は、マスタノードの選択のために、当該重み判定部１２１自身を含むタイブレーカ機構１２０-1が存在するノード１００-1の優先順位が最も高いかを判定する（ステップＳ１４）。もし、ノード１００-1の優先順位が最も高い場合（ステップＳ１４）、ノード１００-1のタイブレーカ機構１２０-1は、当該ノード１００-1を、クライアントに提供されていたサービスを引き継ぐのに最適なマスタノードとして選択し、その旨の通知（マスタノード通知）４６をクラスタ管理部１１０-1に送出する（ステップＳ１５）。これにより、クラスタ管理部１１０-1からの調停要求４２に基づくタイブレーカ機構１２０-1での処理は終了する。一方、ノード１００-1の優先順位が第２位以下の場合（ステップＳ１４）、タイブレーカ機構１２０-1は当該ノード１００-1はマスタノードとして選択されない旨の通知（非マスタノード通知）４７をクラスタ管理部１１０-1に送出する（ステップＳ１６）。これにより、クラスタ管理部１１０-1からの調停要求４２に基づくタイブレーカ機構１２０-1での処理（マスタノード調停処理）は終了する。
【００４２】
クラスタ管理部１１０-1は、タイブレーカ機構１２０-1からマスタノード通知４６を受け取ると、当該クラスタ管理部１１０-1を有するノード１００-1がマスタノードとしてサービスを開始する（引き継ぐ）ように管理する。
【００４３】
このように本実施形態においては、各ノード１００-1〜１００-nでの重み付け処理の結果に基づいて優先順位が最も高いと決定されたノードがマスタノードとしてサービスを開始（継続）する。つまり、ハートビートが途絶えた際の各ノード１００-1〜１００-nの状態のチェック結果から、サービスの継続に最適な状態にあると決定されたノードにより、当該サービスが継続される。このため本実施形態においては、固定の優先順位に従ってマスタノードが決定される従来技術と比較して、より素早くクライアントへのサービスの提供を再開することができると共に、スプリットブレインを回避（または解消）することができる。
【００４４】
クラスタ管理部１１０-1は、ノード１００-1がマスタノードとしてサービスを引き継いだことを確認すると、重み情報２１１に含まれているノード１００-1〜１００-nの重みを、重み付け処理部１３０-1によってｎｕｌｌ値に初期化させる。
【００４５】
ここで、チェックリスト１４１の示すチェック方法（コマンド）、及び、そのチェック方法（コマンド実行）によるチェック（コマンド実行）の結果に対応付けられた重み付けのための加減点の意義について説明する。
【００４６】
まず、チェックリスト１４１の示すチェック方法（コマンド）は、（Ａ）ノードでのサービス開始に必須の条件（つまり必要条件）が成立するかを確認するための第１のタイプのチェック方法（コマンド）と、（Ｂ）ノードでのサービス開始に有利な条件（つまり十分条件）が成立するかを確認するための第２のタイプのチェック方法（コマンド）とに大別される。
【００４７】
本実施形態において、図３に示されるチェックリスト１４１に設定されている第１のタイプのコマンドは、
（１）プロセス監視コマンド
（２）ＤＩＳＫ（ディスク）経路監視コマンド
（３）ＬＡＮ経路監視コマンド
である。これらの第１のタイプのコマンドの実行により、以下に述べるように、ノードでのサービス開始の必要条件が成立するかが確認される。本実施形態では、この必要条件が成立していると確認された場合をチェック成功、それ以外をチェック失敗と定義する。
【００４８】
（Ａ）サービス開始の必要条件が成立するかの確認
（１）ノード１００-i（ｉ＝１，…ｎ）でのプロセス監視コマンドの実行により、サービス開始に必要なプロセスが当該ノード１００-iで動作しているかがチェックされる。  
（２）ノード１００-iでのＤＩＳＫ経路監視コマンド（サービス用共有デスク経路監視コマンド）の実行により、当該ノード１００-iから共有ストレージ装置２００に確保されているサービス用共有デスク領域にアクセスできるかがチェックされる。  
（３）ノード１００-iでのＬＡＮ経路監視コマンドの実行により、当該ノード１００-iからネットワーク２０を介してクライアントと通信ができるかがチェックされる。
【００４９】
上記（１）（２）においてチェック失敗（チェックエラー）の場合にはサービスの引き継ぎそのものができない致命的なエラーとなる。このため図３のチェックリスト１４１の例では、（１）（２）におけるチェック失敗に対して減点５０が定義される。これに対し、上記（３）においてチェック失敗があった場合には、サービスの引き継ぎは可能だがサービスを開始しても、クライアントに当該サービスを提供できない。このため図３のチェックリスト１４１の例では、（３）におけるチェック失敗に対して、上記（１）（２）におけるチェック失敗時の減点の値よりも小さな値の、減点３０が定義される。上記（１）（２）（３）におけるチェック成功は、いずれもサービスを開始するのに必須の条件（必要条件）になる。このため図３のチェックリスト１４１の例では、上記（１）（２）（３）におけるチェック成功に対して加減点０（加点０）が定義される。つまり、（１）（２）（３）でチェック成功となっても、加点は一切行われない。
【００５０】
一方、図３に示されるチェックリスト１４１に設定されている第２のタイプのコマンドは、
（４）ＣＰＵ使用率監視コマンド
（５）ＭＥＭＯＲＹ（メモリ）使用率監視コマンド
である。これらの第２のタイプのコマンドの実行により、以下に述べるように、ノードでのサービス開始に有利となる十分条件が成立するかが確認される。
【００５１】
（Ｂ）サービス開始の十分条件が成立するかの確認
（４）ノード１００-i（ｉ＝１，…ｎ）でのＣＰＵ使用率監視コマンドの実行により、当該ノード１００-i内のＣＰＵの使用状況がチェックされる。  
（５）ノード１００-iでのＭＥＭＯＲＹ使用率監視コマンドの実行により、当該ノード１００-i内のメモリ（物理メモリ）の使用状況がチェックされる。
【００５２】
上記（４）（５）いずれも、チェックされた使用率が予め定められた閾値未満の場合にサービス開始の十分条件が成立していると確認され、その状態をチェック成功、それ以外をチェック失敗と定義する。本実施形態では、（４）（５）いずれにおいても、使用率３０％が上記閾値として用いられるものとする。
【００５３】
このように、上記（４）（５）いずれも、より低い使用率のノードの方がサービスを引き継ぐ際に有利となる。このため、使用率が閾値未満の場合、つまりチェックされた使用率が予め定められた閾値未満の場合、サービス開始に有利な十分条件が成立しているチェック成功であるとして、加点１０が定義される。これに対し、使用率が閾値以上の場合には、サービス開始に有利な十分条件が成立していないチェック失敗であるとして、加減点０（減点０）が定義される。つまり、（４）（５）でチェック失敗となっても、減点は一切行われない。
【００５４】
本実施形態において、チェックリスト１４１に相当するチェックリスト３０２の設定内容（ノード状態のチェックのためのチェック方法定義情報及びチェック結果に対応する重み付けのための加減点の値）は、例えばユーザの操作によって定義可能である。このため、クラスタシステム１０に適合するようにチェックリスト１４１（３０２）がカスタマイズされるならば、当該クラスタシステム１０において、期待されるサービスを提供できる可能性が最も高いノードをマスターノードとして選択することができる。
【００５５】
上記定義のための操作、つまり任意に定義されたチェックリスト３０２（ここでは、ファイル形式のチェックリスト３０２）を作成するための操作は、例えばノード１００-1〜１００-nのうちのいずれかのノード上で行われても、クライアント３０-1〜３０-mのうちのいずれかのノード上で行われても、或いは図１のシステムとは無関係の計算機上で行われても構わない。
【００５６】
ユーザは、例えばノード１００-1〜１００-nのうちのいずれかのノードでチェックリスト３０２を作成した場合、当該ノードを操作して、作成されたチェックリスト３０２を、当該ノードからノード１００-1〜１００-nのうちの残りのノードにネットワーク２０を介して転送させることにより、当該チェックリスト３０２をノード１００-1〜１００-nのローカルストレージ装置３００-1〜３００-nに登録させる。クライアント３０-1〜３０-mのうちのいずれかのノードでチェックリスト３０２が作成された場合にも、上記と同様にして、当該チェックリスト３０２をノード１００-1〜１００-nのローカルストレージ装置３００-1〜３００-nに登録させることができる。また、図１のシステムとは無関係の計算機でチェックリスト３０２が作成された場合には、当該チェックリスト３０２が保存された例えばＵＳＢメモリのような記憶装置をノード１００-1〜１００-nのうちのいずれかのノードに接続して、当該チェックリスト３０２を記憶装置から接続先のノードに読み込ませると共に、当該チェックリスト３０２を、当該ノードからノード１００-1〜１００-nのうちの残りのノードに転送させればよい。
【００５７】
ここでチェックリスト１４１（３０２）において、チェック方法定義情報（コマンド）に対応付けられる重み付けのための加点の値と減点の値とは、“加点の合計値−減点の最小値”が負（つまり“加点の合計値−減点の最小値”＜０）となるように設定される。これにより、サービス開始の必要条件が１つでも成立しない場合には重みはマイナス値となり、当該必要条件が全て成立する場合には、たとえサービス開始の十分条件が全て成立しなくても、重みは０以上の値となる。よって、例えば重みが０以上の値のノードをマスタノードの選択の対象とするならば、少なくともサービス開始の必要条件を満たすノードの中からマスタノード（つまりサービスの引き継ぎ先）を選択することができる。
【００５８】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。例えば、上記実施形態では、クラスタ管理部１１０-1〜１１０-n相互間のハートビート通信に、専用のハートビート通信路４０が用いられる。しかし、通信負荷は増加するものの、例えばネットワーク２０を介してハートビート通信が行われても構わない。つまり、ネットワーク２０が、クラスタシステム１０（内のノード１００-1〜１００-n）とクライアント３０-1〜３０-mとの通信（例えばサービス提供のための通信）と、クラスタ管理部１１０-1〜１１０-n相互間のハートビート通信とに兼用されても構わない。また、チェックリスト１４１の内容は一例であり、一部のコマンドを欠いていても、或いは一部のコマンドが別のコマンドに置き換えられても、更には他のコマンドが追加されても構わない。
【００５９】
また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【図面の簡単な説明】
【００６０】
【図１】本発明の一実施形態に係るクラスタシステムを含むクライアント−サーバシステムの構成を示すブロック図。
【図２】図１中のクォーラムに含まれている重み情報の一例を示す図。
【図３】図１中のチェックリストの一例を示す図。
【図４】同実施形態においてハートビートが途絶えた場合の主としてノードにおける情報の流れを示す図。
【図５】同実施形態における重み付け処理部の処理の手順を示すフローチャート。
【図６】同実施形態におけるタイブレーカ機構の処理の手順を示すフローチャート。
【符号の説明】
【００６１】
１０…クラスタシステム、２０…ネットワーク、３０-1〜３０-n…クライアント、４０…ハートビート通信路、１００-1〜１００-n…ノード（計算機）、１１０-1〜１１０-n…クラスタ管理部、１２０-1〜１２０-n…タイブレーカ機構、１２１…重み判定部、１３０-1〜１３０-n…重み付け処理部、１３１…チェック部、１３２…重み算出部、１４０-1〜１４０-n…記憶部、１４１，３０２…チェックリスト、２００…共有ストレージ装置、２１０…クォーラム、２１１…重み情報、３０１…クラスタプログラム。
【図１】
0004796086.tif 000002
【図２】
0004796086.tif 000003
【図３】
0004796086.tif 000004
【図４】
0004796086.tif 000005
【図５】
0004796086.tif 000006
【図６】
0004796086.tif 000007