(57)【要約】【課題】クラスタシステムにおいて、ノードの監視に要する各ノード内のＣＰＵ負荷の増大を抑え、ネットワークを流れるハートビートメッセージ数の増加を抑えることができるようにノードの監視を行う。【解決手段】複数のノードのそれぞれは、全てのノードで一意に定まるノード構成情報１１０８、１２０８、１３０８を有するクラスタ制御手段１１０４を備える。クラスタ制御手段１１０４は、ノード構成情報を元に、クラスタシステムを構成する複数のノードを論理的にリング状に配置し、隣接する２つだけのノードのクラスタ制御手段との間でハートビートメッセージを相互に送受信することにより隣接するノードの監視を行う。隣接するノードからのハートビートメッセージを所定時間以上受信できなかったとき、そのノードに障害が発生したと判断する。【選択図】図１
2010266935.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードを備えて構成されるクラスタシステムにおけるノード監視方法において、
前記複数のノードのそれぞれは、全てのノードで一意に定まるノード構成情報を有するクラスタ制御手段を備え、
前記クラスタ制御手段は、前記ノード構成情報を元に、クラスタシステムを構成する複数のノードを論理的にリング状に配置し、隣接する２つだけのノードのクラスタ制御手段との間でハートビートメッセージを相互に送受信することにより隣接するノードの監視を行い、隣接するノードからのハートビートメッセージを所定時間以上受信できなかったとき、そのノードに障害が発生したと判断することを特徴とするノード監視方法。
【請求項２】
前記クラスタ制御手段は、隣接するノードに障害が発生したことを検知したとき、他のノードに対して、自ノードに隣接するノードの障害を通知する障害検知通知を送信し、障害となった１つのノードまたは複数のノードを挟むノードからの障害検知通知を受信したとき、その通知の内容から障害ノードまたは障害ノード群を特定することを特徴とする請求項１記載のノード監視方法。
【請求項３】
前記複数のノードの内予め定められた特定のノードのクラスタ制御手段は、隣接ノード以外の他の１または複数のノードにもハートビートメッセージを送信することにより、前記隣接ノード以外の他の１または複数のノードにも自ノードの障害を検知させることを特徴とする請求項１記載のノード監視方法。
【請求項４】
前記クラスタ制御手段は、隣接するノード以外の対角線上にあるノードとの間でもハートビートメッセージを相互に送受信することにより対角線上にあるノードの監視をも行うことを特徴とする請求項１記載のノード監視方法。
【請求項５】
複数のノードを備えて構成されるクラスタシステムにおいて、
前記複数のノードのそれぞれは、全てのノードで一意に定まるノード構成情報を有するクラスタ制御手段を備え、
前記クラスタ制御手段は、前記ノード構成情報を元に、クラスタシステムを構成する複数のノードを論理的にリング状に配置し、隣接する２つだけのノードのクラスタ制御手段との間でハートビートメッセージを相互に送受信することにより隣接するノードの監視を行い、隣接するノードからのハートビートメッセージを所定時間以上受信できなかったとき、そのノードに障害が発生したと判断することを特徴とするクラスタシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノード監視方法及びクラスタシステムに係り、特に、クラスタシステムを構成する計算機であるノードの障害を検知するノード監視方法及びクラスタシステムに関する。
【背景技術】
【０００２】
一般に、複数のノード（計算機）を備え、複数の系からなるクラスタシステムは、あるノードがアプリケーションを実行中に、そのコンピュータのプログラムあるいはオペレーティングシステムに障害があった場合、実行中のアプリケーションを別のノードに引き継がせるように系の切り替えを行うことにより処理を続行することができる。このようなクラスタシステムにおいて、ノードの障害を監視する方法に関する従来技術として、例えば、特許文献１に記載されているような技術が知られている。この従来技術は、ノード相互間で定期的にハートビートメッセージを送受信し、一定時間ハートビートメッセージが受信できなかった場合に、送信元のノードが障害であると判断するというものである。そして、この従来技術は、前述したようなハートビートメッセージによる監視を全てのノード相互間で実施している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−１７２５９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術によるノードの監視方法は、全てのノードがノード相互間で互いにハートビートメッセージの送受信を行っているため、クラスタシステムを構成するノード数が増大すると、クラスタシステム全体で一定時間内に処理するハートビートメッセージの数が、ノード数ｎに対してｎの二乗に比例して増大することになる。
【０００５】
この結果、前述の従来技術は、ハートビートメッセージを送受信する処理に要する各ノード内のＣＰＵ負荷が増大し、それによってオペレーティングシステムや業務アプリケーションの処理が滞ってしまうという問題点を生じさせている。また、前述の従来技術は、クラスタシステムを構成するノードの数の増加に伴い、ハートビートパスを流れるハートビートメッセージの数も増大するため、ネットワークの負荷が増大し、ハートビートメッセージが滞留してしまうことによって、ノード障害を誤検知するという問題点も生じさせてしまう。
【０００６】
本発明の目的は、前述した従来技術の問題点を解決し、大規模なクラスタシステムにおいても、ノードの監視に要する各ノード内のＣＰＵ負荷の増大を抑え、ネットワークを流れるハートビートメッセージ数の増加を抑えることができるようにしたノード監視方法及びクラスタシステムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明によれば前記目的は、複数のノードを備えて構成されるクラスタシステムにおけるノード監視方法において、前記複数のノードのそれぞれは、全てのノードで一意に定まるノード構成情報を有するクラスタ制御手段を備え、前記クラスタ制御手段は、前記ノード構成情報を元に、クラスタシステムを構成する複数のノードを論理的にリング状に配置し、隣接する２つだけのノードのクラスタ制御手段との間でハートビートメッセージを相互に送受信することにより隣接するノードの監視を行い、隣接するノードからのハートビートメッセージを所定時間以上受信できなかったとき、そのノードに障害が発生したと判断することにより達成される。
【発明の効果】
【０００８】
本発明によれば、監視対象のノードが隣接する２つのノードのみでよいため、それぞれのノードについての監視に要する時間をクラスタシステムのノード数の増加に関わらず一定とすることができ、ノードの監視に要するＣＰＵ負荷を抑えることができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態によるクラスタシステムの構成を示すブロック図である。
【図２】ノードが備えるノード構成情報の構成例を説明する図である。
【図３】３台のノードにより構成されるクラスタシステムに新たなノードが加えられて、そのノードが起動されたときの処理シーケンスと、新たなノードが起動した後のあるノードのノード構成情報とを説明する図である。
【図４】４台のノードにより構成されるクラスタシステムの１つのノードが障害となった場合の系切り替えまでの処理シーケンスを示す図である。
【図５】ノードがハートビートメッセージを送信する処理動作を説明するフローチャートである。
【図６】ノードが他のノードの障害を検知する処理動作を説明するフローチャートである。
【図７】図６により説明したノードの障害を検知する処理を実行したｔ秒後に実行するノード障害検知の処理動作を説明するフローチャートである。
【図８】Ａ〜Ｆの６ノード構成で、特定のノードがハートビートメッセージをマルチキャスト送信して監視を行わせている場合のハートビートメッセージ送信方向と、特定のノードの監視を行っているノードにおけるノード構成情報とを示す図である。
【図９】隣接するノード間だけでなく、対角線上ノードも監視対象とした場合の監視関係と、１つのノードにおけるノード構成情報とを示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明によるノード監視方法及びクラスタシステムの実施形態を図面により詳細に説明する。
【００１１】
図１は本発明の一実施形態によるクラスタシステムの構成を示すブロック図である。図１に示すクラスタシステムは、３台のノードを備えて構成されているが、ノードをさらに多数備えて構成されてもよい。
【００１２】
図１に示す本発明の実施形態によるクラスタシステムは、ノードＡ１１０１、ノードＢ１２０１、ノードＣ１３０１の３つのノードを備え、各ノードがクラスタシステム外のコンピュータとの通信を行うネットワークに接続されると共に、障害となったノードをリセットする専用のリセットパス１００２、及び、ハートビートメッセージの送受信、ノード間の情報の送受信に使用するハートビートパス１００３によりノード相互間が接続されて構成されている。
【００１３】
ノードＡ１１０１、ノードＢ１２０１、ノードＣ１３０１のそれぞれは、同一の構成を備えるものであるため、各ノードを内部の機能等については同一の符号を付与し（但し、アプリケーション及びノード構成情報は、ノード毎に異なる内容を持つことになるため、別の符号が付与されている）、以下の説明では、主に、ノードＡ１１０１について説明することにより、ノードＢ１２０１、ノードＣ１３０１についての説明も兼ねることとする。
【００１４】
ノードＡ１１０１は、ＣＰＵ１１１３、メモリ１１１２、３つのＮＩＣ（ネットワーク・インタフェース・カード）１１０２、リセット部１１１６を備えて構成され、メモリ１１１２内には、アプリケーション１１０３、クラスタ制御部としてのクラスタプログラム１１０４、ＯＳ１１１１が格納されていて、ＣＰＵ１１１３が、メモリ１１１２上のＯＳ１１１１、アプリケーション１１０３、クラスタプログラム１１０４を実行して、それらをメモリ１１１２上で動作させることにより、本発明の実施形態での機能を構築している。また、クラスタプログラム１１０４は、監視部１１０５、通信部１１０６、系切り替え部１１０７、ノード構成情報１１０８、優先度定義情報１１０９、リセット間隔定義情報１１１０を有して構成されている。
【００１５】
前述において、アプリケーション１１０３は、ＮＩＣ１１０２、ネットワーク１００１を介して、図示クラスタシステムの外部に設けられる図示しないコンピュータと通信を行うことができる。クラスタプログラム１１０４は、ハートビートパス１００３を通して他のノードのクラスタプログラム１１０４に対して一定時間毎にハートビートメッセージを送信し、相手側のノードのクラスタプログラム１１０４からのハートビートメッセージを受信する。また、ハートビートパス１００３は、クラスタプログラム１１０４相互間の情報の送受信にも使用される。
【００１６】
また、クラスタプログラム１１０４は、他のノードも含むアプリケーション１１０３の状況を監視し、アプリケーション１１０３の障害を検出すると系切り替えを行う。クラスタプログラム１１０４が他ノードの障害を検知した場合は、その障害ノードをリセットして系切り替えを行う。例えば、ノードＡ１１０１のクラスタプログラム１１０４が、ノードＢ１２０１の障害を検知してリセットする場合、ノードＡ１１０１のクラスタプログラム１１０４は、ＮＩＣ１１０２、専用のリセットパス１００２を介して、ノードＢ１２０１のリセット部１１１６に対してリセット要求を行う。
【００１７】
クラスタプログラム１１０４は、アプリケーション１１０３を監視するための監視部１１０５、他ノードのクラスタプログラム１１０４と通信するための通信部１１０６、系切り替えの制御を行う系切り替え部１１０７を有している。そして、監視部１１０５は、クラスタシステムを構成している全てのノードを管理するためのノード構成情報１１０８を使用し、系切り替え部１１０７は、優先度定義情報１１０９を用いて障害ノードをリセットするノードのリセット順を決定する。また、あるノードが障害ノードをリセットするまでの時間は、優先度定義情報１１０９とリセット間隔定義情報１１１０とによって算出される。
【００１８】
前述の優先度定義情報１１０９について詳細に説明する。いま、あるノードが障害になったとすると、その障害ノードを他のノードからリセットする必要がある。クラスタシステムは、複数のノードにより構成されているので、障害ノードをリセットする処理を行うノードが複数存在することになり、障害ノードをリセットしにいく際の競合を避けるために複数のノードに対する優先度が定義されている。そして、障害ノードをリセットする場合には、優先度の高いノードが障害ノードのリセットを行う処理を実行し、それが失敗した場合に、次に優先度の高いノードが、一定の時間後に障害ノードをリセットする。リセット間隔定義情報１１１０は、この一定の時間を定義した情報であり、例えば、あるノードが障害ノードをリセットするまでの時間は、そのノードの優先度と定義されているリセット間隔との積として求めることができる。
【００１９】
図２はノードＡ１１０１が備えるノード構成情報１１０８の構成例を説明する図である。ノード構成情報１１０８は、クラスタシステムを構成している全てのノードのそれぞれが有しており、ノード名２００１、ノード番号２００２、監視対象フラグ２００３の各項目を含むレコードを、クラスタシステムを構成するノードの数だけ有して構成されている。ノード番号２００２は、ノード毎に固有の番号であり、例えば、ノード番号が小さい順に、複数のノードをリング状に配置することによって、全てのノード間でリング構造を一意に決定することができる。このリング構造は、論理的なものであって、ハードウェア的な実際のノード間の接続構造とは異なったものであってよい。監視対象フラグ２００３は、どのノードを監視するかを表すフラグであり、本発明の実施形態では、論理的に隣接する２つのノードとの間でのみ、ハートビートメッセージの送受信を行って、隣接するノードの障害を監視するようにしている。
【００２０】
図２に示しているノード構成情報１１０８の例では、ノードＡ１１０１に備えられるものとしているので、ノードＡ１１０１は、監視対象フラグ２００３がＯＮに設定されている（「○」が記述されている）ノードＢ、Ｃに対して、一定時間毎にハートビートメッセージを送信し、さらに、ノードＢ、Ｃからのハートビートメッセージが途絶えないかどうかを監視する。
【００２１】
図３は３台のノードにより構成されるクラスタシステムに新たなノードが加えられて、そのノードが起動されたときの処理シーケンスと、新たなノードが起動した後のノードＡのノード構成情報とを説明する図であり、次に、これについて説明する。
【００２２】
図３（ａ）に示すシーケンスは、それぞれがノード番号０、２０、３０を有する３台のノードＡ１１０１、ノードＣ１３０１、ノードＤ１４０１により構成されたクラスタシステムに、ノード番号１０を有するノードＢ１２０１が加えられて、ノードＢ１２０１が起動された場合のシーケンスの例である。そして、このシーケンスが開始される前、ノードＡ１１０１、ノードＣ１３０１、ノードＤ１４０１の３ノードが論理的にリング状に接続され、ノードＡ１１０１とノードＣ１３０１、ノードＣ１３０１とノードＤ１４０１、ノードＤ１４０１とノードＡ１１０１の各組のノードが相互に監視を行っている。以降、相互監視の状態を「−」で表すこととすると、前述の構成は、Ａ−Ｃ−Ｄ−Ａと表すことができる。
【００２３】
（１）前述したようなＡ−Ｃ−Ｄ−Ａの構成で、クラスタシステムにノードＢ１２０１が新たに加えられ、ノードＢ１２０１が起動されると、ノードＢ１２０１は、まず、起動通知を全てのノードに対してブロードキャストにより送信する。起動通知には、ノード番号が含まれているため、起動通知３２０１を受信したノードＡ１１０１は、既に監視しているノードＣよりもノード番号が小さいノードＢの監視の必要性を判断することができる。また、ノードＣ１３０１も、前述と同様にノードＢの監視の必要性を判断することができる。一方、ノードＤ１４０１は、新たに加わったノードＢ１２０１の監視の必要がないことを判断する（シーケンス３２０１、３２０２、３２０３）。
【００２４】
（２）シーケンス３２０１、３２０２、３２０３により、起動通知を受信したノードＡ、Ｃ、Ｄは、この起動通知に対して起動応答を返す。このとき、前述と同様に、各起動応答にノード番号を含めて起動応答を返す。これにより、ノードＢ１２０１は、システムに存在するノードを把握することができる（シーケンス３１０１、３３０１、３４０１）。
【００２５】
（３）ノードＡ１１０１及びノードＣ１３０１は、ノードＢ１２０１を監視するために、自ノード内のノード構成情報１１０８の監視対象を変更する必要があり、監視対象をノードＢ１２０１にするための監視対象変更連絡の送信を相互に行う（シーケンス３１０２、３３０２）。
【００２６】
（４）シーケンス３１０２、３３０２により、監視対象変更連絡を受信したノードＡ、Ｃは、監視対象ノードを変更をする必要があると判断できれば、監視対象変更応答を相手のノードに返す（シーケンス３１０３、３３０３）。
【００２７】
（５）ノードＡ１１０１及びノードＣ１３０１は、シーケンス３１０３、３３０３による監視対象変更応答を受信すると、監視対象ノードを互いに変更し、ハートビートメッセージをノードＢ１２０１に対して送信する（シーケンス３１０４、３３０４）。
【００２８】
（６）ハートビートメッセージを受信したノードＢ１２０１は、これを契機に送信元のノードに対してハートビートメッセージを送信する。以後、クラスタシステムは、４台のノードにより構成されたものとして処理動作を行うことになる（シーケンス３２０６、３２０７）。
【００２９】
前述したような手続きにより、新たなノードが加えられて起動された場合に、新たなノードをリング状の監視システムに組み込むことができ、Ａ−Ｂ−Ｃ−Ｄ−Ａという構成になる。ノードＡにおけるノードＢ接続後のノード構成情報は、図３（ｂ）に３５０１として示したようなものとなる。
【００３０】
図４は４台のノードにより構成されるクラスタシステムの１つのノードが障害となった場合の系切り替えまでの処理シーケンスを示す図であり、次に、これについて説明する。ここに示すシーケンスは、図３により説明したシーケンスにより、それぞれがノード番号０、１０、２０、３０を有する４台のノードＡ１１０１、Ｂ１２０１、Ｃ１３０１、Ｄ１４０１によりクラスタシステムが構成された後に、ノードＢ１２０１に障害が発生した場合を例としており、ノード間は、Ａ−Ｂ−Ｃ−Ｄ−Ａという構成となっている。
【００３１】
（１）いま、ノード間がＡ−Ｂ−Ｃ−Ｄ−Ａという構成で、ノードＢ１２０１が障害になったものとする。この場合、ノードＢ１２０１からのハートビートメッセージが送信されなくなるため、ノードＢ１２０１を監視しているノードＡ１１０１は、ノードＢ１２０１の障害を検知する。このとき、ノードＡ１１０１は、Ａ−Ｂ−Ｃ−Ｄ−Ａ構成におけるノードＢ１２０１と監視対象の正常ノードＤ１４０１で挟まれたノードＣ１３０１もノード障害が発生した可能性があると判断し、ノードＢ１２０１の障害及びノードＣ１３０１の障害の可能性を示す障害検知通知を全ノード、ここでは、ノードＣ１３０１とノードＤ１４０１とに送信する（シーケンス４１０１、４１０２）。
【００３２】
（２）一方、ノードＣ１３０１も、ノードＢ１２０１の障害を検知し、障害検知通知を全ノード、ここでは、ノードＡ１１０１とノードＤ１４０１に送信する（シーケンス４３０１、４３０２）。
【００３３】
（３）ノードＣ１３０１は、ノード間のＡ−Ｂ−Ｃ−Ｄ−Ａという構成において、ノードＢ１２０１と監視対象の正常ノードＤ１４０１で挟まれたノードＡ１１０１もノード障害が発生した可能性があると判断するが、ノードＡ１１０１からのノードＢ１２０１の障害検知通知を受信しているため、障害ノードはＢ１２０１のみである判断することができる。また、ノードＡ１１０１も、ノードＣ１３０１からの障害検知通知を受信するため、前述と同様に、障害ノードはＢ１２０１のみである判断することができ、ノードＤ１４０１も、ノードＡ１１０１とノードＣ１３０１とからノードＢ１２０１の障害が通知されるため、ノードＢ１２０１のみが障害であると判断することができる。この結果、全てのノードがノードＢ１２０１の障害を判断することができたため、以後、優先度定義情報１１０９に設定されている障害ノードをリセットするノードのリセット優先度に従って、これらのノードＡ、Ｃ、Ｄの１つがノードＢ１２０１のリセットを行う（シーケンス４２０２）。
【００３４】
（４）図４に示す例では、ノードＤ１４０１がリセット優先度が最も高いものとしており、ノードＤ１４０１は、ノードＢ１２０１に対してリセット信号を送信して、ノードＢ１２０１のリセットを行い、ノードＢ１２０１のリセットに成功すると全てのノードに対してリセット完了通知を発行する（シーケンス４４０１〜４４０３）。
【００３５】
（５）ノードＡ１１０１は、ノードＤ１４０１からのノードＢ１２０１のリセットが完了したことの通知であるリセット完了通知を受信すると、系切り替え処理を行い、系切り替え完了通知を全てのノードに送信する。これにより、クラスタシステムを構成する全てのノードでの認識を合わせることができる（シーケンス４１０３〜４１０５）。
【００３６】
図５はノードがハートビートメッセージを送信する処理動作５００１を説明するフローチャートであり、次に、これについて説明する。この処理は、各ノードが一定時間毎に実行する処理である。
【００３７】
（１）各ノードは、ハートビートメッセージの送信を実行する時点で、まず、ノード数カウンタを０にリセットし、自ノード内のノード構成情報１１０８に設定されていて、自ノードが認識している自ノード以外のノードのレコードを１つ取得し、そのレコードが示している対象ノードの監視対象フラグ２００３がＯＮとなっているか否かを判定する（ステップ５００２、５００３）。
【００３８】
（２）ステップ５００３の判定で、対象ノードの監視対象フラグ２００３がＯＮとなっていた場合、処理を行っているノードは、対象ノードにハートビートメッセージを送信する（ステップ５００４）。
【００３９】
（３）ステップ５００４の処理の後、あるいは、ステップ５００３の判定で、対象ノードの監視対象フラグ２００３がＯＮとなっていなかった場合、ノード数カウンタを１だけカウントアップし、ノード数カウンタの値が、自ノードが認識しているノード数より小さいか否かを判定し、ノード数カウンタの値が、自ノードが認識しているノード数より小さかった場合、ステップ５００２からの処理に戻って、ノード構成情報１１０８内の次のレコードを取得して処理を続け、ノード数カウンタの値が、自ノードが認識しているノード数より小さくなかった場合、ここでの処理を終了する（ステップ５００５、５００６）。
【００４０】
図６はノードが他のノードの障害を検知する処理動作６００１を説明するフローチャートであり、次に、これについて説明する。この処理は、各ノードが一定時間毎に実行する処理である。
【００４１】
（１）各ノードは、まず、自ノード内のノード構成情報１１０８に設定されている全てのノードを対象として、ここでの処理を実行することを設定する（ステップ６００２）。
【００４２】
（２）自ノード内のノード構成情報１１０８に設定されていて、自ノードが認識している自ノード以外のノードのレコードを１つ取得し、そのレコードが示している対象ノードの監視対象フラグ２００３がＯＮとなっているか否かを判定する（ステップ６００３）。
【００４３】
（３）ステップ６００３の判定で、対象ノードの監視対象フラグ２００３がＯＮとなっていた場合、その対象ノードからのハートビートメッセージが一定時間以上に渡って受信できていないか否かを判定する（ステップ６００４）。
【００４４】
（４）ステップ６００４の判定で、対象ノードからのハートビートメッセージが一定時間以上に渡って受信できていなかった場合、対象ノードが障害となっていると判断して、ノード障害を検知し、対象ノード以外の他のノードに障害を通知する（ステップ６００５、６００６）。
【００４５】
（５）ステップ６００６の処理の後、または、ステップ６００３の判定で、取得したレコードが示している対象ノードの監視対象フラグ２００３がＯＮとなっていなかった場合、あるいは、ステップ６００４の判定で、対象ノードからのハートビートメッセージが一定時間の間に正常に受信できていた場合、全てのノードについて、前述までの処理を行ったか否かをチェックし、済んでいなければ前述までの処理を次のノードに対して実行し、全てのノードについて処理が済んでいればここでの処理を終了する（ステップ６００７）。
【００４６】
図７は図６により説明したノードの障害を検知する処理を実行したｔ秒後に実行するノード障害検知の処理動作７００１を説明するフローチャートであり、次に、これについて説明する。複数の連続するノードが同時に障害となった場合、障害ノード群の両端のノードの障害については、隣接するノードによって即時にその検知することができるが、障害ノード群の両端以外のノードについては、隣接ノードの障害検知通知を送信することができないことをもって障害と判断する。ここでの処理は、障害ノード群の両端以外のノード障害を検知するために図６の処理のｔ秒後に実行される処理である。時間ｔは、できるだけ小さい値の方が障害検知を早く行うことができるが、小さくしすぎると誤検知の可能性が高くなるため、システムによってチューニングが必要となる。
【００４７】
（１）各ノードは、まず、自ノード内のノード構成情報１１０８に設定されている全てのノードを対象として、ここでの処理を実行することを設定する（ステップ７００２）。
【００４８】
（２）自ノード内のノード構成情報１１０８に設定されていて、自ノードが認識している自ノード以外のノードのレコードを１つ取得し、そのレコードが示している対象ノードが正常であること、または、障害であることが確定しているか否かを判定する（ステップ７００３）。
【００４９】
（３）ステップ７００３の判定で、該当ノードが正常、または、障害であることが確定していなかった場合、該当ノードが正常なノードに挟まれているか否かを判定し、該当ノードが正常なノードに挟まれていた場合、該当ノードが正常であると判断する（ステップ７００４、７００５）。
【００５０】
（４）ステップ７００４の判定で、該当ノードが正常なノードに挟まれていなかった場合、該当ノードが障害となっていると判断して、ノード障害を検知し、対象ノード以外の他のノードに障害を通知する（ステップ７００６、７００７）。
【００５１】
（５）ステップ７００５またはステップ７００７の処理の後、または、ステップ７００３の判定で、該当ノードが正常、または、障害であることが確定していた場合、全てのノードについて、前述までの処理を行ったか否かをチェックし、済んでいなければ前述までの処理を次のノードに対して実行し、全てのノードについて処理が済んでいればここでの処理を終了する（ステップ７００８）。
【００５２】
前述した本発明の実施形態におけるノードでの各処理は、プログラムにより構成し、本発明が備えるＣＰＵに実行させることができ、また、それらのプログラムは、ＦＤ、ＣＤＲＯＭ、ＤＶＤ等の記録媒体に格納して提供することができ、また、ネットワークを介してディジタル情報により提供することができる。
【００５３】
図８はクラスタシステムがＡ〜Ｆの６ノードで、Ａ−Ｂ−Ｃ−Ｄ−Ｅ−Ｆ−Ａという構成を持ち、特定のノードがハートビートメッセージをマルチキャスト送信して監視を行わせている場合のハートビートメッセージ送信方向と、特定のノードの監視を行っているノードにおけるノード構成情報とを示す図である。
【００５４】
前述までに説明した本発明の実施形態は、各ノードが隣接するノード相互間でのみハートビートメッセージの送受信を行っているので、Ａ〜Ｆの６ノード構成で、Ａ−Ｂ−Ｃ−Ｄ−Ｅ−Ｆ−Ａという構成の場合のハートビートメッセージ送信は、図８（ａ）に８００１として示す例の実線の矢印で示すような方向に行われる。このように、Ａ−Ｂ−Ｃ−Ｄ−Ｅ−Ｆ−Ａの構成において隣接するノードのみを監視した場合、ノードＤ、Ｅ、Ｆが同時に障害になると、ノードＡがノードＦの障害を検知し、ノードＣがノードＤの障害を検知することができる。しかし、ノードＥを検知できるノードがないため、ノードＥからノードＤとノードＦとの障害を検知したという通知がこないことをもって、ノードＥの障害を確定せざるを得ないことになる。この場合、ノードＥからの障害検知通知を待つタイムアウト時間が設けられる。
【００５５】
本発明の実施形態は、前述したような隣接する３つのノードが同時に障害となった場合にも、中央に位置するノードの障害を即時に検知することができるようにすることができる。すなわち、本発明の実施形態は、隣接するノードに対する監視に加え、さらに、図８（ａ）に点線の矢印で示すように、特定のノードＥがノードＡ、Ｂに対してハートビートメッセージをマルチキャスト送信するようにしている。このようにした場合、ノードＥを挟むノード群が同時に障害となった場合でも、ノードＡとノードＢとは、ノードＥの障害を即時に検知することができる。なお、ノードＥは、全てのノードに対してハートビートメッセージをブロードキャストにより送信してもよい。ブロードキャストによりハートビートメッセージを送信することにより、ノードＥの障害は、その他いずれかのノードによって、即時に検知することができる。
【００５６】
大規模クラスタシステムにおいて、ノード間の重要度に差がある場合は、特定の重要度の高いノードのみがハートビートメッセージを複数のノードに対して送信することによって複数ノードが同時に障害となった場合でも、その障害を即時に検知することが可能となる。
【００５７】
図８（ｂ）には、図８（ａ）の構成例の場合のノードＡにおけるノード構成情報８００２の例を示している。監視対象フラグ２００３の状態から判るように、ノードＡは、隣接ノードＢとノードＦとを監視対象として、ハートビートメッセージを相互に送受信する。ノードＡは、前述に加えて、ノードＥからのブロードキャストにより送信されてきたハートビートメッセージを受信して、ノードＥの障害を監視する。このため、ノード構成情報８００２のノードＥに対応する監視対象フラグ２００３にフラグが設定される。但し、ノードＡは、ノードＥについては障害の監視のみを行えばよく、自ノードＡの障害をノードＥに監視させる必要はないため、ノードＢやノードＦとは区別できるフラグ（図８（ｂ）の例では、「△」）が立てられる。
【００５８】
図９は隣接するノード間だけでなく、対角線上ノードも監視対象とした場合の監視関係と、１つのノードにおけるノード構成情報とを示す図である。
【００５９】
ノードを論理的にリング状に配置し、連続する複数のノード障害が発生した場合、監視されていないノードの障害検知にかかる時間をなくすためには、隣接するノードだけではなく、その他のノードからも監視されていなければならない。ノードを論理的にリング状に接続して、隣接するノード相互間で監視を行うシステムにおいて、隣接するノード以外のあるノードの障害を検知できる可能性が最も高いノードは、障害となったノードから最も遠い位置にあるノード、すなわち、対角線上のノードである。
【００６０】
そのため、本発明の実施形態は、対角線上のノード同士も相互に監視するようにすることにより、連続する複数ノードが同時に障害となった場合にも、障害ノード数が全ノードの半数以下であれば、障害ノード全てを即時検知することが可能となるように構成することができる。厳密には、ノード総数が偶数の場合と奇数の場合とがあるため、ノード総数をｎとした場合に、即時にリセット可能な障害ノード群の個数は、以下に示す式により求めることができる。
【００６１】
ノード総数が偶数の場合：ｎ／２＋１
ノード総数が奇数の場合：（ｎ＋１）／２
前述したように、対角線上のノード同士も相互に監視するようにした場合、ノード数が増加したとしても、１ノードあたりの監視にかかるコストを変化させることなく、かつ、連続する半数のノードが同時障害となっても即座に障害を検知して系の切り替えを実施することができる。
【００６２】
図９（ａ）に示す構成例９００１は、Ａ〜Ｈの８ノード構成で、Ａ−Ｂ−Ｃ−Ｄ−Ｅ−Ｆ−Ｇ−Ｈ−Ａという構成の場合の隣接ノード間の相互監視と対角線上のノード同士の相互監視とを行っている例であり、対角線上のノード同士として、ノードＡ−Ｅ、ノードＢ−Ｆ、ノードＣ−Ｇ、ノードＤ−Ｈの各ノードの組がハートビートメッセージの送受信による相互監視を行っている。前述したような構成でのノードＡにおけるノード構成情報９００３は、図９（ｂ）に示すように、監視対象フラグ２００３がノードＢ、Ｅ、Ｈに設定されている。
【００６３】
前述したような構成において、図９（ａ）に示す領域９００２内のノード群が同時に障害になった場合、ノードＡは、ノードＨの障害を即座に検知すると同時に、ノードＥの障害も検知することができる。同様に、ノードＢは、ノードＦの障害、ノードＣは、ノードＤとノードＧとの障害を即座に検知することができる。そのため、全８ノードのうち、稼働しているノードが３ノードのみであるにもかかわらず、５ノードの障害を即座に検知することが可能となる。
【００６４】
前述した本発明の実施形態によれば、監視対象のノードの数を実施形態に比べて大幅に低減することができ、それぞれのノードについての監視に要する時間をクラスタシステムのノード数の増加に関わらず一定とすることができる。また、ノード数の増大に対し、クラスタシステム全体で一定時間内に処理するハートビートメッセージの数をノード数ｎに比例するものとすることができ、大規模クラスタシステムにおいても、ノードの監視に要するＣＰＵ負荷を抑え、ネットワークを流れるハートビートメッセージ数の爆発的な増加を抑えることができるため、より大規模なクラスタシステムの構築が可能となる。
【符号の説明】
【００６５】
１００１  ネットワーク
１００２  リセットパス
１００３  ハートビートパス
１１０１、１２０１、１３０１、１４０１  ノード
１１０２  ＮＩＣ（ネットワーク・インタフェース・カード）
１１０３、１２０３、１３０３  アプリケーション
１１０４  クラスタプログラム
１１０５  監視部
１１０６  通信部
１１０７  系切り替え部
１１０８、１２０８、１３０８  ノード構成情報
１１０９  優先度定義情報
１１１０  リセット間隔定義情報
１１１１  ＯＳ
１１１２  メモリ
１１１３  ＣＰＵ
１１１６  リセット部
【図１】
2010266935.tif 000003
【図２】
2010266935.tif 000004
【図３】
2010266935.tif 000005
【図４】
2010266935.tif 000006
【図５】
2010266935.tif 000007
【図６】
2010266935.tif 000008
【図７】
2010266935.tif 000009
【図８】
2010266935.tif 000010
【図９】
2010266935.tif 000011