(57)【要約】【課題】ノードクラスタシステムの可用性を低コストで向上させるノードクラスタシステムを提供する。【解決手段】ネットワーク２と、当該ネットワーク２に接続される稼働ノードと待機ノードとを含む複数のノード１から成るノードクラスタシステム１００において、前記複数のノード１と前記ネットワーク２との間に接続され、全てのノードをリング状に接続してノードリングを形成するスイッチ部３を備え、前記稼働ノードは、前記ノードリングに、当該ノードリングを構成する各ノードが前記稼働ノード又は前記待機ノードであるかを表す種別情報を含むトークン情報を周回させて、当該トークン情報の受信時刻から不稼働ノードを検出して当該不稼働ノードを前記トークン情報から削除するトークン情報生成部２０と、前記トークン情報に基づいて前記ノードリングから前記不稼働ノードを削除するように前記スイッチ部３を制御するノードリング制御部１０とを備える。【選択図】図１
2016051267.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークと、当該ネットワークに接続される稼働ノードと待機ノードとを含む複数のノードとから成るノードクラスタシステムにおいて、
前記複数のノードと前記ネットワークとの間に接続され、全てのノードをリング状に接続してノードリングを形成するスイッチ部を備え、
前記稼働ノードは、
前記ノードリングに、当該ノードリングを構成する各ノードが前記稼働ノード又は前記待機ノードであるかを表す種別情報を含むトークン情報を周回させて、当該トークン情報に含まれる各ノードの受信時刻から不稼働ノードを検出して当該不稼働ノードを前記トークン情報から削除するトークン情報生成部と、
前記ノードリングから前記不稼働ノードを削除するように前記スイッチ部を制御するノードリング制御部とを備えたことを特徴とするノードクラスタシステム。
【請求項２】
請求項１に記載したノードクラスタシステムにおいて、
複数の前記稼働ノードを備え、
前記スイッチ部は複数の前記稼働ノードをリング状に接続した稼働リングを形成し、
前記稼働ノードは、
前記稼働リングに、共有ディスクの書き込みエリア情報を含む第２トークン情報を周回させて当該第２トークン情報の受信時刻から不稼働ノードを検出し、前記トークン情報を参照して前記ノードリングを構成する待機ノードを稼働ノードとして置換して前記第２トークン情報を更新する第２トークン情報生成部と、
前記稼働リングから前記不稼働ノードを削除するように前記スイッチ部を制御する稼働リング制御部とを備えたことを特徴とするノードクラスタシステム。
【請求項３】
請求項２に記載したノードクラスタシステムにおいて、
前記第２トークン情報は、
前記トークン情報に加えて、共有ディスクに書き込む権利を表す共有ディスク書込エリア情報を含むことを特徴とするノードクラスタシステム。
【請求項４】
ネットワークと、当該ネットワークに接続される稼働ノードと待機ノードとを含む複数のノードとスイッチ部とを備えるノードクラスタシステムのノードクラスタ管理方法であって、
前記スイッチ部が、前記複数のノードと前記ネットワークとの間に接続され、全てのノードをリング状に接続してノードリングを形成し、
前記稼働ノードは、
前記ノードリングに、当該ノードリングを構成する各ノードが前記稼働ノード又は前記待機ノードであるかを表す種別情報を含むトークン情報を周回させて、当該トークン情報の受信時刻から不稼働ノードを検出して当該不稼働ノードを前記トークン情報から削除し、
前記トークン情報に基づいて前記ノードリングから前記不稼働ノードを削除するように前記スイッチ部を制御することを特徴とするノードクラスタ管理方法。
【請求項５】
請求項４に記載したノードクラスタ管理方法において複数の前記稼働ノードを備えた場合のノードクラスタ管理方法であって、
前記スイッチ部が、前記複数の稼働ノードをリング状に接続した稼働リングも形成し、
前記稼働ノードは、
前記稼働リングに、共有ディスクの書き込みエリア情報を含む第２トークン情報を周回させて当該第２トークン情報の受信時刻から不稼働ノードを検出し、前記トークン情報を参照して前記ノードリングを構成する待機ノードを稼働ノードとして置換して前記第２トークン情報を更新し、
前記第２トークン情報に基づいて前記稼働リングから前記不稼働ノードを削除するように前記スイッチ部を制御することを特徴とするノードクラスタ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタ（cluster）化したノード（サーバ）を使用するノードクラスタシステム及びノードクラスタ管理方法に関する。
【背景技術】
【０００２】
近年、通信技術の進展により、多数のノードを相互に接続して、高い処理能力と記憶容量を持たせるノードクラスタシステムを構築できるようになり、システム全体で１台のコンピュータであるかのように振る舞うことができるようになってきている。
【０００３】
クラスタは、接続するノードの台数を増やすことにより、性能の向上を図ることができる。また、冗長構成による待機ノードを必要台数分設けることにより、稼働ノードが障害により停止しても待機ノードに切り替え、サービスの中断をゼロもしくは極めて短時間に抑えた運用が可能である可用性（アベイラビリティ）を高めることができる。
【０００４】
また、クラスタシステムでは、各ノードからアクセスできる共有ディスクが設置され、データベース等の情報の共有化を図っている。共有ディスクは、通常状態では稼働ノード（ACT系ノード）からのみ書き込みが可能であり、待機ノード（SBY系ノード）からは書き込みアクセスはできないようにしている。
【０００５】
従来からノードクラスタシステムの可用性向上を目的としたクォーラムディスクを用いた共有ディスクへのアクセス管理方式がある。クォーラムディスクの主な役割は、クラスタ化した複数のノードそれぞれの状態を共有ディスク上に保持管理し、クラスタを回復させるために必要な構成データ（メタデータ）を保持し、障害時の復旧に使用することである。また、サービスを提供する各ノードがデータベースを有する共有ディスクに共通的にアクセスする場合、どのノードが共有ディスクにアクセスするのかを管理することにもクォーラムディスクが使用されている。
【０００６】
クォーラムディスクを用いた共有ディスクへのアクセス管理方式は、例えば特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−１７３９９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来のクォーラムディスクを用いた技術では、そもそもノードクラスタを管理するためだけに、クォーラムディスクもしくはクォーラムサーバを用意必要がある。サービス提供に必要なノードとは別にクォーラムディスクを用意して各ノードと接続する構成はコスト高となる。
【０００９】
本発明は、この課題に鑑みてなされたものであり、ノードクラスタシステムの可用性を低コストで向上させるノードクラスタシステム及びノードクラスタ管理方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明のノードクラスタシステムは、ネットワークと、当該ネットワークに接続される稼働ノードと待機ノードとを含む複数のノードとから成るノードクラスタシステムにおいて、前記複数のノードと前記ネットワークとの間に接続され、全てのノードをリング状に接続してノードリングを形成するスイッチ部を備え、前記稼働ノードは、前記ノードリングに、当該ノードリングを構成する各ノードが前記稼働ノード又は前記待機ノードであるかを表す種別情報を含むトークン情報を周回させて、当該トークン情報に含まれる各ノードの受信時刻から不稼働ノードを検出して当該不稼働ノードを前記トークン情報から削除するトークン情報生成部と、前記ノードリングから前記不稼働ノードを削除するように前記スイッチ部を制御するノードリング制御部とを備える。
【００１１】
また、本発明のノードクラスタ管理方法は、ネットワークと、当該ネットワークに接続される稼働ノードと待機ノードとを含む複数のノードとスイッチ部とを備えるノードクラスタシステムのノードクラスタ管理方法であって、前記スイッチ部が、前記複数のノードと前記ネットワークとの間に接続され、全てのノードをリング状に接続してノードリングを形成し、前記稼働ノードは、前記ノードリングに、当該ノードリングを構成する各ノードが前記稼働ノード又は前記待機ノードであるかを表す種別情報を含むトークン情報を周回させて、当該トークン情報の受信時刻から不稼働ノードを検出して当該不稼働ノードを前記トークン情報から削除し、前記トークン情報に基づいて前記ノードリングから前記不稼働ノードを削除するように前記スイッチ部を制御する。
【発明の効果】
【００１２】
本発明によれば、従来のクラスタシステムで必要であったクォーラムディスクが不要であるので、ノードクラスタシステムの低コスト化が可能である。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態のノードクラスタシステム１００の構成例を示す図である。
【図２】物理トポロジと論理トポロジとの関係を示す図である。
【図３】本実施の形態のネットワーク接続の例を示す図である。
【図４】稼働ノードＢが共有ディスク４に書き込み宣言を行った例を模式的に示す図である。
【図５】８台のノードで構成されるノードクラスタシステム１００の物理トポロジと論理トポロジを示す図である。
【図６】ノードリング２１を周回するトークン情報のフォーマットの例を示す図である。
【図７】稼働リング２３を周回する第２トークン情報のフォーマットの例を示す図である。
【図８】ノードリング制御部１０の動作フローを示す図である。
【図９】稼働リング制御部３０の動作フローを示す図である。
【図１０】稼働ノードが単体の場合のノードリングを示す図である。
【図１１】稼働ノードが単体の場合のトークン情報生成部２０の動作フローを示す図である。
【図１２】稼働ノードが単体の場合のトークン情報生成部２０の動作フローを示す図である。
【図１３】稼働ノードが単体の場合のトークン情報生成部２０の動作フローを示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について図面を用いて説明する。
【００１５】
〔ノードクラスタシステムの構成〕
図１を参照して本実施の形態のノードクラスタシステム１００の構成を説明する。ノードクラスタシステム１００は、複数のノード１（Ａ、Ｂ、Ｃ）と、ネットワーク２と、スイッチ部３と、共有ディスク４とを備える。ノードＡ，Ｂ、Ｃは全て同じ構成のノード１である。この例は３つのノードで示すが、ノードの数は２つ以上で有れば幾つあってもよい。
【００１６】
図１を参照した説明において、各々ノードを表す場合はＡ、Ｂ、Ｃで表記する。ここでは、ノードＡが稼働ノード、ノードＢが稼働ノード、ノードＣが待機ノードとして説明する。ノードとはネットワーク２に接続される機器のことであり、本実施の形態ではコンピュータ（サーバ）を意味する。共有ディスク４は、各ノードからアクセスできるディスクである。
【００１７】
ノード１は、ノードリング制御部１０、トークン情報生成部２０、稼働リング制御部３０、及び第２トークン情報生成部４０、を備える。ノード１において、他のノードと通信をするための通信手段等の一般的な機能構成については省略している。
【００１８】
スイッチ部３は、冗長化したスイッチ機能（SW）によって各々のノードを複数経路でネットワーク２に接続するものである。図１は、各ノード１（Ａ、Ｂ、Ｃ）が２系統でネットワーク２に接続する例を示すが、２系統以上であってもよい。
【００１９】
スイッチ部３は、各ノード１を物理トポロジとして複数経路でネットワーク２に接続し、論理トポロジとしてリング状のネットワーク接続を形成するためのものである。トポロジ（topology）とはネットワーク接続の構成のことである。
【００２０】
図２に、物理トポロジと論理トポロジとの関係を示す。物理トポロジとは、この例では３つのノードＡ，Ｂ、Ｃと、スイッチ部３と、ネットワーク２とによるハードウェアの構成のことである。論理トポロジとは、ノードＡ、Ｂ、Ｃがスイッチ部３を介して接続されて形成されるネットワーク接続のことである。この例では、スイッチ部３によって、ノードＡとノードＢとノードＣとがリング状に接続されている。
【００２１】
〔ノードクラスタシステムの動作〕
図３に、本実施の形態のネットワーク接続の例を示す。図１と図３を参照してノードクラスタシステム１００の動作を説明する。
【００２２】
稼働ノードＡのノードリング制御部１０は、ノードクラスタシステム１００が備える全てのノードをリング状のネットワークで接続したノードリング２１（図３）を形成するようにスイッチ部３を制御する。この例のノードリング２１は、稼働ノードＡと稼働ノードＢと待機ノードＣとをリング状に接続したネットワークである。
【００２３】
トークン情報生成部２０は、ノードリング２１に各々のノードの種別を表す情報を含むトークン情報２２を周回させて、トークン情報２２の受信時刻から不稼働ノードを検出して当該不稼働ノードをトークン情報２２から削除して更新する。ノードリング制御部１０は、ノードリング２１から不稼働ノードを削除するようにスイッチ部３を制御する。例えば、稼働ノードＢが故障した場合、トークン情報から稼働ノードＢの情報が削除され、待機ノードＣの種別が稼働ノードに変更されると共に、待機ノードＣが新たな稼働ノードＢとなる。トークン情報２２について詳しくは後述する。
【００２４】
稼働リング制御部３０は、稼働ノードをリング状のネットワークで接続した稼働リング
２３を構成するようにスイッチ部３を制御する。この例では、稼働リング２３は稼働ノードＡと稼働ノードＢとをリング状に接続したネットワークである。
【００２５】
第２トークン情報生成部４０は、稼働リング２３に、共有ディスク４の書込みエリア情報を含む第２トークン情報２４を周回させて当該第２トークン情報２４の受信時刻から不稼働ノードを検出し、トークン情報を参照して前記ノードリングを構成する待機ノードを稼働ノードとして置換して前記第２トークン情報を更新する。稼働リング制御部３０は、稼働リング２３から不稼働ノードを削除するようにスイッチ部３を制御する。
【００２６】
ノードリング２１では、トークン情報が周回してノードリング２１を構成する各々のノ
ードＡ，Ｂ、Ｃの故障管理を、トークン情報の受信時刻で行う。稼働リング２３では、第２トークン情報が周回して稼働リング２３を構成する稼働ノードＡと稼働ノードＢの故障管理を、第２トークン情報の受信時刻で行う。
【００２７】
ユーザがノードクラスタシステム１００を立ち上げる際、トークン情報と第２トークン情報を最初に発出する稼働ノードを設定する。その設定は、ユーザがトークン情報と第２トークン情報の各ノードの種別を決定することで行う。種別については後述する。
【００２８】
故障を検出した場合は、トークン情報と第２トークン情報から該当するノード情報を削除する。またノードの追加も、ユーザがトークン情報と第２トークン情報にノード情報を追加することで行うことができる。
【００２９】
稼働リング２３は、稼働ノードＡとＢとに第２トークン情報を周回させて共有ディスク４の書き込み制御を行う。共有ディスク４の書き込み制御は、第２トークン情報に共有ディスク４の書き込みエリア情報を含ませることで行う。つまり、各稼働ノードは、第２トークン情報に書き込みエリア情報含ませることで共有ディスク４へのデータ書き込みを、他のノードに対して宣言する。
【００３０】
図４に、稼働ノードＢが共有ディスク４に書き込み宣言を行った例を模式的に示す。この場合、稼働ノードＢは、受信した第２トークン情報２４に共有ディスク４のエリア情報を書き込んで書き込みの宣言を行う（図４（ａ））。稼働ノードＢが、例えば共有ディスク４のエリア１への書き込み宣言を行うと、そのエリア情報を含む第２トークン情報２４が稼働リング２３を周回することになる。その結果、稼働ノードＡは共有ディスク４のエリア１へのデータ書き込みが行えなくなる。
【００３１】
図４（ｂ）に示すように、稼働ノードＢは宣言したエリア１のデータ領域のみのデータの書き込みが可能である。稼働ノードＡは稼働ノードＢが宣言していないデータ領域への書き込みは可能である。このように第２トークン情報は、共有ディスク４への書き込みを禁止する情報を含むため、短時間で稼働リング内を周回し続ける必要がある。稼働リングを専用に設けることにより、第２トークン情報の周回時間を短縮することができる。つまり、データ書き込みに要する時間を短縮することができる。
【００３２】
なお、第２トークン情報２４に含ませる共有ディスク４のアクセスエリアについては、使用するデータベースの種類によって異なる。具体的には、データベースがリレーショナルデータベースかキーバリューストアか、若しくはファイルそのものによって異なる。リレーショナルデータベースかキーバリューストアである場合は、アクセスエリアはKeyを記載する形になる。ファイルそのものの場合は、メモリアドレスやパスの表記になる。
【００３３】
本実施の形態では、ノードリング２１と稼働リング２３の２つのリング状のネットワークを持つ場合と、ノードリング２１しか持たない場合の２つがある。次に、２つのリング状のネットワークを持つ場合について、ノードの数を増やした例を示して説明する。
【００３４】
〔稼働ノードが複数の場合〕
図５に、８台のノードで構成されるノードクラスタシステム１００の物理トポロジと論理トポロジを示す。なお、図５に示すノードクラスタシステムの構成は、図３に対してノードの数だけが異なる。よって、図５において図３と同じものには、同じ参照符号を用いる。
【００３５】
物理トポロジは、８台のノード１−１〜１−８と、冗長化したスイッチ部３と、ネットワーク２とで構成される（図５（ａ））。論理トポロジは、スイッチ部３によってノード１−１〜１−８がリング状に接続されて構成されるネットワーク接続である（図５（ｂ））。
【００３６】
稼働ノードが複数の場合は、２つのリング状のネットワークが構成される。１つは全てのノードをリング状に接続したノードリング２１と、稼働ノードをリング状に接続した稼働リング２３である。この例では、ノード１−１とノード１−３とノード１−４とを接続したのが稼働リング２３であり、全てのノードを接続したのがノードリング２１である。
【００３７】
図６に、ノードリング２１を周回するトークン情報のフォーマットの例を示す。トークン情報の１列目はノードを識別するノード名やアドレスである。２列目はノードの種別を表す種別情報である。種別としては、待機と稼働の２種類がある。付随する番号は、待機の場合は稼働に切り替える優先順である。稼働の場合は、第２トークン情報が周回する順番を表す。３列目はノードがトークン情報を受信した時刻を表すToken checktime（月：日Ｔ時間（MM-DDThh:mm:ss.sss））である。Ｔは区切り記号である。
【００３８】
種別情報は、ノード１−１が稼働ノード（稼働１）、ノード１−２が待機ノード（待機１）、ノード１−３が稼働ノード（稼働２）、ノード１−４が稼働ノード（稼働３）、ノード１−５が待機ノード（待機２）、ノード１−６が待機ノード（待機３）、ノード１−７が待機ノード（待機４）、ノード１−８が待機ノード（待機５）である。待機ノードの番号はユーザが設定する。
【００３９】
Token checktimeは、稼働ノードが更新する。稼働ノード１−１は待機ノード１−２のToken checktimeを更新する。稼働ノード１−３は稼働ノード１−４のToken checktimeを更新する。稼働ノード１−４は、待機ノード１−５、１−６、１−７、１−８、及び１−１のToken checktimeを更新する。このようにToken checktimeの更新は、稼働ノードの持ち回りで行われる。各ノードがトークン情報を受信すると受信したノードのToken checktimeが、稼働ノードが更新した時刻に書き換わる。
【００４０】
稼働リング２３は、稼働ノードのみで構成され、稼働ノード１−１（稼働１）、稼働ノード１−３（稼働２）、稼働ノード１−４（稼働３）、から構成される。図７に、稼働リング２３を周回する第２トークン情報のフォーマットの例を示す。
【００４１】
第２トークン情報は、トークン情報に対して共有ディスク４へのアクセス管理を行うための共有ディスク書込エリア情報を有している点で異なる。第２トークン情報を、隣接する稼働ノードから受信した際、共有ディスク４への書き込みを宣言する場合は、共有ディスク書込エリア情報にアクセスエリアを登録して指定する。図７に示す例では、稼働ノード１−３がエリア１に、稼働ノード１−４がエリア２に、書き込みをすることを宣言している。この場合、稼働ノード１−１と稼働ノード１−４は、共有ディスク４のエリア１への書き込みはできなくなる。同様に稼働ノード１−１と稼働ノード１−３は、エリア２への書き込みができなくなる。
【００４２】
共有ディスク４への書き込みが終了した場合は、共有ディスク書込エリア情報は空欄とされ、他の稼働ノードからの同一エリアに対する書き込みを可能にする。なお、共有ディスク書込エリア情報は、使用するデータベースの種類によって異なるのは上記の通りである。
【００４３】
次に図８と図９を参照して稼働ノードが複数ある場合の本実施形態の動作を詳細に説明する。図８は、ノードリング制御部１０の動作フローである。以下説明する処理は、図５を例とした場合である。
【００４４】
動作を開始すると、稼働ノード１−１は隣接する待機ノード１−２にトークン情報を送付する（ステップＳ１）、トークン情報の送付の成否は、一定時間内にACKの返信があった場合に成功、一定時間内にACKの返信がなくタイムアウトした場合は失敗と判断する（ステップＳ２）。この例ではノード１−１の稼働ノードからトークン情報が送付される。
【００４５】
送付失敗の場合、稼働ノードは失敗ノードを不稼働ノードと判定し、当該失敗ノードのノード名を削除して更新したトークン情報を次々ノードへ送付する（ステップＳ３）。ステップＳ２とＳ３は、トークン情報の送付が成功するまで繰り返される。つまり、稼働ノード１−１は、トークン情報の送付を成功するまで繰り返す。
【００４６】
一定時間内にACKの返信があると稼働ノード１−１はToken checktimeの時刻を更新し、待機ノード１−２はそのToken checktimeを含むトークン情報を受信する（ステップＳ４）。待機ノード１−２がトークン情報を受信すると、トークン情報の待機ノード１−２のToken checktimeは、稼働ノード１−１が更新したものに更新される。
【００４７】
トークン情報を受信した自ノードが稼働ノードであるか否かを判定する（ステップＳ５）。トークン情報を受信したノードが稼働ノードでない場合（ステップＳ５のＮＯ）、稼働ノード１−１は、Token checktimeを更新して次のノード１−３にトークン情報を送付する（ステップＳ８）。
【００４８】
次のノード１−３へのトークン情報の送付が成功すると（ステップＳ９の成功）、ノード１−３のトークン情報のToken checktimeが更新される。このようにトークン情報の送付が連続して成功すると、トークン情報のToken checktimeは短い時間間隔で更新される。トークン情報の送付が失敗すると（ステップＳ９の失敗）、一定時間内のACKの応答待ちの時間が加わるためトークン情報のToken checktimeは大きくずれることになる。よって、トークン情報のToken checktimeによって、各ノードの死活を確認することができる。
【００４９】
例えば、ノード１−１〜ノード１−８までが故障していないとすると、トークン情報のToken checktimeは、図６に示すように例えばｍｓ以下の時間で更新される。稼働ノード１−１のToken checktimeに時刻が記録されていないのは、稼働ノード１−１からトークン情報の送付を開始したからである。稼働ノード１−１のToken checktimeは、この例では稼働３のノード１−４が更新したToken checktimeが記録される。
【００５０】
トークン情報を受信したノードが稼働ノードの場合（ステップＳ５のＹＥＳ）、この例では稼働ノード１−３がトークン情報を受信した場合である。トークン情報を送付する主体は以降、稼働ノード１−３になる。稼働ノード１−３は、トークン情報のToken checktimeから不稼働ノードを検出してトークン情報から不稼働ノードの情報を削除して修正する（ステップＳ６）。
【００５１】
稼働ノード１−３はToken checktimeを更新して次の稼働ノード１−４にトークン情報を送付する（ステップＳ８）。次の稼働ノード１−４へのトークン情報の送付が成功すると（ステップＳ９の成功）、稼働ノード１−４のトークン情報のToken checktimeは、稼働ノード１−３が更新した時刻に更新される。ノード１−４は稼働ノードであるので（ステップＳ５のＹＥＳ）、トークン情報を送付する主体はこの後、稼働ノード１−４になる。
【００５２】
稼働ノード１−４は、Token checktimeを更新して順次ノード１−６〜１−８のトークン情報を更新し、稼働ノード１−１のToken checktimeも稼働ノード１−４が更新した時刻が記録される。このようにノードリング制御部１０が動作することにより、不稼働ノードが削除された稼働ノードと待機ノードとで構成されるノードリング２１が逐次更新される。
【００５３】
図９は、稼働リング制御部３０の動作フローである。ノードクラスタシステム１００の立ち上げ時の第２トークン情報は、ユーザが設定した稼働ノード１−１から種別が稼働２の稼働ノード１−３に送付される（ステップＳ２１）。第２トークン情報の送付が成功した場合（ステップＳ２２の成功）には、稼働ノード１−３の第２トークン情報のToken checktimeは稼働ノード１−１が更新した時刻に更新される。この際、共有ディスク４に対して書き込み宣言がされていないかを共有ディスク書込エリア情報を参照して確認する。書き込み宣言がされていないデータエリアについて書き込みを行う場合は書き込み宣言を行う（ステップＳ２３）。
【００５４】
次に、稼働ノード１−３は次の稼働ノード１−４に第２トークン情報を送付する（ステップＳ２４）。送付成功の場合（ステップＳ２５の成功）は、次の稼働ノード１−４が第２トークン情報を受信する（ステップＳ２３）。
【００５５】
第２トークン情報の送付を失敗した場合（ステップＳ２５とＳ２２の失敗）は、失敗した稼働ノードを第２トークン情報から削除し、ノードリング２１から待機ノードの情報を取得する（ステップＳ２６）。そして、稼働リング制御部３０は、優先度の高い待機ノード候補（待機１）を、稼働ノードにするための指示（ACT化指示）を出す（ステップＳ２７）。
【００５６】
ACT化指示を送付した後のACKの返信の有無の判定（ステップＳ２８）において返信ありの場合、稼働ノードから優先度の高い待機ノードがACT化指示を受信する（ステップＳ３０）。ACT化指示を受信した待機ノードは稼働ノードとして動作を開始する（ステップＳ３１）。
【００５７】
新たな稼働ノードは、第２トークン情報を更新して次の稼働ノードに送付する（ステップＳ３２）。そして、ステップＳ２２以降の処理を繰り返す。このように稼働リング制御部３０が動作することにより、稼働ノードが不稼働となった場合に、ノードリングの優先順位の高い待機ノードが稼働ノードに切り替わる。また、共有ディスク書込エリア情報によって、従来のクラスタシステムで課題となっていたスプリットブレイン問題も解決することができる。
【００５８】
以上説明したように、ノードリングを周回するトークン情報と稼働リングを周回する第２トークン情報とによって、それぞれのネットワークを構成するノードの死活管理を行うことができる。また、稼働リングにおいて不稼働ノードが検出された場合は、待機ノードから稼働ノードへの切り替えが可能な可用性の高いクラスタシステムの構築が可能となる。
【００５９】
次に、稼働ノードが単体の場合の本実施形態の動作を説明する。
【００６０】
〔稼働ノードが単体の場合〕
図１０を参照して稼働ノードが単体の場合の動作を説明する。この場合には共有ディスク４へのアクセスの競合がないため、共有ディスク４のアクセス管理を行う必要はない。
【００６１】
図１０において、ノード１−１が稼働ノード１であり、ノード１−２〜１−８については待機ノードである。ノードリング内を周回するトークン情報は、図１０に示すように上記の図６と同じフォーマットで構成され、ノード１−１〜ノード１−８の各ノード名とアドレス、各ノードの種別（稼働１、待機１、待機２…待機７）と、トークン情報を受信した受信時刻を表すToken checktimeとを含む。
【００６２】
例えば、稼働ノード１−１が故障した場合、待機ノードが稼働ノードに切り替わるが、複数ある待機ノードのうち、ノートクラスタシステム１００の立ち上げ時にユーザが設定した優先度の高い待機ノードに切り替わる。図１０に示す例では、種別が待機１の待機ノード１−２が次の稼働ノードとなる。以降の切り替えは、ユーザが設定した種別の優先順位にしたがって行われる。
【００６３】
図１１と図１２と図１３に稼働ノードが単体の場合のトークン情報生成部２０の動作フローを示す。ユーザは、ノードクラスタシステム１００の立ち上げ時に単体の稼働ノードと複数ある待機ノードの設定を行う。この設定はユーザがトークン情報の各ノードの種別を決めることで行う。
【００６４】
この例では稼働ノード１−１からノードリング２１において種別が待機１の待機ノード１−２にトークン情報を送付する（ステップＳ４１）、トークン情報の送付の成否は、一定時間内にACKの返信があった場合に成功、一定時間内にACKの返信がなくタイムアウトした場合は失敗と判断する（ステップＳ４２）。送付失敗の場合、稼働ノード１−１は、失敗ノードを不稼働ノードと判定して当該失敗ノード削除してトークン情報を更新する。
【００６５】
この稼働ノード１−１から待機ノードに対するトークン情報の送付は、一定時間内にACKの返信があるまで繰り返される。例えば待機１のノード１−２が不稼働ノードと判定された場合の稼働ノード１−１は、トークン情報からノード名１−２を削除して更新したトークン情報を待機２の待機ノード１−３（待機２）に送付する。
【００６６】
待機ノード１−３から一定時間内にACKの返信があると、待機ノード１−３はトークン情報を受信する（ステップＳ４４）。稼働ノード１−１は、トークン情報を受信した待機ノード１−３が稼働ノードであるか否かを判定する（ステップＳ４５）。
【００６７】
トークン情報を受信したノード（自ノード）が稼働ノードである場合は、稼働ノードは受信時刻から不稼働ノードを割出してトークン情報を修正する（ステップＳ４６）。そして、受信時刻を更新して次のノードへトークン情報を送付する（ステップＳ４８）。
【００６８】
ステップＳ４５でトークン情報を受信したノードが稼働ノードでない場合は、トークン情報の種別情報が空欄となっているかを判定する（ステップＳ４７）。空欄となっていない場合（稼働ノードが存在）は、稼働ノード１−１はToken checktimeを更新して次のノードへトークン情報を送付する（ステップＳ４８）。ステップＳ４７でトークン情報の種別情報が空欄となっている場合（ステップＳ４７のＹＥＳ）については、接続子γで接続する図１３を参照して後述する。
【００６９】
ステップＳ４８でToken checktimeを更新して次の待機ノード１−４へトークン情報を送付し、その送付が成功した場合はステップＳ４４の処理に戻る（ステップＳ４９の成功）。トークン情報の送付が失敗した場合は、稼働ノード１−１は、待機ノード１−４が稼働ノードであるのか否かを判定する（接続子βで接続する図１２のステップＳ５０）。待機ノード１−４が稼働ノードでない場合、稼働ノード１−１は次々のノードである待機ノード１−５にトークン情報を送付する（ステップＳ５１）。トークン情報の送付が失敗すると、稼働ノード１−１は、トークン情報の送付が成功するまで、順次ノードを更新してトークン情報を送付する。トークン情報の送付が成功するとステップＳ４４の処理（接続子α）に戻る（ステップＳ５２の成功）。
【００７０】
トークン情報の送付先のノードが稼働ノードに当たると、稼働ノード１−１は、トークン情報を受信したノードが待機ノードのうちの最上位であるか否かを判定する（ステップＳ５３）。最上位でない場合、トークン情報の種別情報の稼働状態を削除する（ステップＳ５４）。
【００７１】
次に、トークン情報から優先度が一番高い最上位のノードにトークン情報を送付する（ステップＳ５５）。この送付が成功した場合（ステップＳ５６の成功）には、稼働情報の稼働状態が削除されているトークン情報を受信（ステップＳ５６）したこととなり、トークン情報を受信したノードを稼働ノードとしてトークン情報の種別情報を修正する（ステップＳ６０、図１３））。
【００７２】
優先度が一番高い最上位のノードへのトークン情報の送付が失敗の場合（ステップＳ５６の失敗）は、トークン情報を送信したノードは、トークン情報を受信したノードが待機ノードのうち次に優先度が高いノードあるかを判定する（ステップＳ５７）。次に優先度が高いノードである場合（ステップＳ５７のＹＥＳ）は、トークン情報を受信したノードを稼働ノードとしてトークン情報の種別情報を修正する（接続子γで接続する図１３のステップＳ６０）。
【００７３】
図１３に、トークン情報の種別情報が空欄となっている場合（稼働情報が削除されている場合）の動作フローを示す。トークン情報を受信したノードのトークン情報の種別情報が空欄となっている場合、トークン情報を受信したノードのトークン情報の種別を稼働状態に修正して登録する（ステップＳ６０）。
【００７４】
そして、修正したトークン情報を次のノードに送付する（ステップＳ６１）トークン情報の送付が失敗した場合は、失敗ノードを削除して次のノードへトークン情報を送付してステップＳ６２の送付判定に戻る。送付が成功した場合は、接続子αで接続するステップＳ４４に戻る。
【００７５】
以上説明したように、本実施の形態によれば、稼働ノードが単体の場合においてはノードリングを周回するトークン情報によって、各ノードの死活管理が可能である。また、障害時に待機ノードを優先順位にしたがって稼働ノードに切り替えが可能なので可用性の高いノードクラスタシステムを、クォーラムディスクが無くても実現することが可能である。なお、稼働ノードが単体の場合は、稼働リング制御部３０と第２トークン情報生成部４０は不要である。
【００７６】
また、稼働ノードが複数の場合においては、ノードリングに加えて稼働リングを設けることで共有ディスクに対するアクセス競合のスプリットブレイン問題も回避することができる。また、スプリットブレイン問題によるサービス停止を防ぐためのクォーラムディスクにノードの死活を報告する専用のハートビート信号送受信機能部等が不要であり、コストを抑えたノードクラスタシステムを構築することができる。
【００７７】
上記ノードにおける処理部をコンピュータによって実現する場合、各ノードが有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、各ノードにおける処理部がコンピュータ上で実現される。
【００７８】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記録装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としても良い。
【００７９】
このように本願発明は、上記した実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。
【符号の説明】
【００８０】
１：ノード
２：ネットワーク
３：スイッチ部
４：共有ディスク
１０：ノードリング制御部
２０：トークン情報生成部
２１：ノードリング
２２：トークン情報
２３：稼働リング
２４：第２トークン情報
３０：稼働リング制御部
４０：第２トークン情報生成部
【図１】
2016051267.tif 000003
【図２】
2016051267.tif 000004
【図３】
2016051267.tif 000005
【図４】
2016051267.tif 000006
【図５】
2016051267.tif 000007
【図６】
2016051267.tif 000008
【図７】
2016051267.tif 000009
【図８】
2016051267.tif 000010
【図９】
2016051267.tif 000011
【図１０】
2016051267.tif 000012
【図１１】
2016051267.tif 000013
【図１２】
2016051267.tif 000014
【図１３】
2016051267.tif 000015