(57)【要約】【課題】  スケーラビリティを確保すると共に障害発生時の可用性についての問題を解決し、システム構築コストおよび待機系の管理コストの低減をはかる。【解決手段】  クラスタ構成のメッセージキューイングシステムにおいて、実行系Ａのコンピュータ１に障害が発生したときに、待機系ノード４は、ディスク装置５に記憶されているキューノード対応情報５１を参照することにより、実行系Ｂと実行系Ｃのコンピュータ２，３には実行系Ａのコンピュータ１が使用するキューと同一名称のキューがあることを認識する。そして、障害発生コンピュータ１のキューに滞留しているメッセージを、実行系Ｂと実行系Ｃのコンピュータ２，３へ配布し、それらのコンピュータに配布したメッセージの処理を継続させる。以上の障害の回復処理は、１つの待機系ノード４で複数の実行系ノードの障害回復を行うことができるので、スケーラビリティに優れている。【選択図】      図１
2006189964.tif 000002
【特許請求の範囲】
【請求項１】
受け付けた複数のメッセージをキューに格納し、前記受け付けたメッセージに基づきユーザプログラムを実行する複数の実行系ノード装置と、
待機系ノード装置と、
前記複数の実行系ノード装置および前記待機系ノード装置からアクセス可能であり、前記複数の実行系ノード装置がそれぞれ使用するキューを記憶した記憶装置と
を含んで構成されたクラスタ構成のコンピュータシステムにおけるメッセージ配布方法であって、
前記待機系ノード装置は、
前記実行系ノード装置のいずれかの実行系ノード装置に障害が発生したことを認知したときに、前記障害が発生した実行系ノード装置が使用するキューに滞留している滞留メッセージを、障害が発生していない実行系ノード装置が使用するキューに配布する
ことを特徴とするメッセージ配布方法。
【請求項２】
受け付けた複数のメッセージをキューに格納し、前記受け付けたメッセージに基づきユーザプログラムを実行する複数の実行系ノード装置と、
待機系ノード装置と、
前記複数の実行系ノード装置および前記待機系ノード装置からアクセス可能であり、前記複数の実行系ノード装置がそれぞれ使用するキューとそのキューを使用するノード装置とを対応付けるキューノード対応情報を記憶した記憶装置と
を含んで構成されたクラスタ構成のコンピュータシステムにおけるメッセージ配布方法であって、
前記待機系ノード装置は、
前記実行系ノード装置のいずれかの実行系ノード装置に障害が発生したことを認知したときに、前記記憶装置に記憶されている前記キューノード対応情報を参照して、前記複数の実行系ノード装置のうちの１の実行系ノード装置が使用するキューと同一名称のキューを使用する他の実行系ノード装置の一覧を取得する第１のステップと、
前記１の実行系ノード装置が使用するキューに滞留している滞留メッセージを、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューに配布する第２のステップと
を実行することを特徴とするメッセージ配布方法。
【請求項３】
前記待機系ノード装置は、
前記第１のステップを実行後に、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューを参照してその滞留メッセージ数を取得し、前記第２のステップでは、前記取得した滞留メッセージ数に基づき、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューの滞留メッセージ数が平均化されるように、前記滞留メッセージを配布すること
を特徴とする請求項２に記載のメッセージ配布方法。
【請求項４】
前記待機系ノード装置は、
前記第１のステップを実行後に、前記記憶装置が記憶している、メッセージの処理順序を示したキュー順序情報を取得し、前記第２のステップでは、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置の１つが使用するキューに、前記取得したキュー順序情報に基づく順序で前記滞留メッセージを配布すること
を特徴とする請求項２に記載のメッセージ配布方法。
【請求項５】
受け付けた複数のメッセージをキューに格納し、前記受け付けたメッセージに基づきユーザプログラムを実行する複数の実行系ノード装置と、
待機系ノード装置と、
前記複数の実行系ノード装置および前記待機系ノード装置からアクセス可能であり、前記複数の実行系ノード装置がそれぞれ使用するキューとそのキューを使用するノード装置とを対応付けるキューノード対応情報を記憶した記憶装置と
を含んで構成されたクラスタ構成のコンピュータシステムにおけるメッセージ配布方法であって、
前記待機系ノード装置は、
前記メッセージキューイングシステムに追加された実行系ノード装置からメッセージ配布要求を受けたときに、前記記憶装置に記憶されている前記キューノード対応情報を参照して、前記追加された実行系ノード装置が使用するキューと同一名称のキューを使用する他の実行系ノード装置の一覧を取得する第１のステップと、
前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューに滞留している滞留メッセージを、前記追加された実行系ノード装置が使用するキューに配布する第２のステップと
を実行することを特徴とするメッセージ配布方法。
【請求項６】
前記待機系ノード装置は、
前記第１のステップを実行後に、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューを参照してその滞留メッセージ数を取得し、前記第２のステップでは、前記取得した滞留メッセージ数に基づき、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューの滞留メッセージ数および前記追加された実行系ノード装置が使用するキューのメッセージ配布後の滞留メッセージ数が平均化されるように、前記滞留メッセージを配布すること
を特徴とする請求項５に記載のメッセージ配布方法。
【請求項７】
受け付けた複数のメッセージをキューに格納し、前記受け付けたメッセージに基づきユーザプログラムを実行する複数の実行系ノード装置と、
待機系ノード装置と、
前記複数の実行系ノード装置および前記待機系ノード装置からアクセス可能であり、前記複数の実行系ノード装置がそれぞれ使用するキューを記憶した記憶装置と
を含んで構成されたクラスタ構成のコンピュータシステムにおける待機系ノード装置であって、
前記実行系ノード装置のいずれかの実行系ノード装置に障害が発生したことを認知したときに、前記障害が発生した実行系ノード装置が使用するキューに滞留している滞留メッセージを、障害が発生していない実行系ノード装置が使用するキューに配布する
ことを特徴とする待機系ノード装置。
【請求項８】
受け付けた複数のメッセージをキューに格納し、前記受け付けたメッセージに基づきユーザプログラムを実行する複数の実行系ノード装置と、
待機系ノード装置と、
前記複数の実行系ノード装置および前記待機系ノード装置からアクセス可能であり、前記複数の実行系ノード装置がそれぞれ使用するキューとそのキューを使用するノード装置とを対応付けるキューノード対応情報を記憶した記憶装置と
を含んで構成されたクラスタ構成のコンピュータシステムにおける待機系ノード装置であって、
前記実行系ノード装置のいずれかの実行系ノード装置に障害が発生したことを認知したときに、前記記憶装置に記憶されている前記キューノード対応情報を参照して、前記複数の実行系ノード装置のうちの１の実行系ノード装置が使用するキューと同一名称のキューを使用する他の実行系ノード装置の一覧を取得する第１の処理と、
前記１の実行系ノード装置が使用するキューに滞留している滞留メッセージを、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューに配布する第２の処理と
を実行することを特徴とする待機系ノード装置。
【請求項９】
前記第１の処理を実行後に、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューを参照してその滞留メッセージ数を取得し、前記第２の処理では、前記取得した滞留メッセージ数に基づき、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューの滞留メッセージ数が平均化されるように、前記滞留メッセージを配布すること
を特徴とする請求項８に記載の待機系ノード装置。
【請求項１０】
前記第１の処理を実行後に、前記記憶装置が記憶している、メッセージの処理順序を示したキュー順序情報を取得し、前記第２の処理では、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置の１つが使用するキューに、前記取得したキュー順序情報に基づく順序で前記滞留メッセージを配布すること
を特徴とする請求項８に記載の待機系ノード装置。
【請求項１１】
受け付けた複数のメッセージをキューに格納し、前記受け付けたメッセージに基づきユーザプログラムを実行する複数の実行系ノード装置と、
待機系ノード装置と、
前記複数の実行系ノード装置および前記待機系ノード装置からアクセス可能であり、前記複数の実行系ノード装置がそれぞれ使用するキューとそのキューを使用するノード装置とを対応付けるキューノード対応情報を記憶した記憶装置と
を含んで構成されたクラスタ構成のコンピュータシステムにおける待機系ノード装置であって、
前記メッセージキューイングシステムに追加された実行系ノード装置からメッセージ配布要求を受けたときに、前記記憶装置に記憶されている前記キューノード対応情報を参照して、前記追加された実行系ノード装置が使用するキューと同一名称のキューを使用する他の実行系ノード装置の一覧を取得する第１の処理と、
前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューに滞留している滞留メッセージを、前記追加された実行系ノード装置が使用するキューに配布する第２の処理と
を実行することを特徴とする待機系ノード装置。
【請求項１２】
前記第１の処理を実行後に、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューを参照してその滞留メッセージ数を取得し、前記第２の処理では、前記取得した滞留メッセージ数に基づき、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューの滞留メッセージ数および前記追加された実行系ノード装置が使用するキューのメッセージ配布後の滞留メッセージ数が平均化されるように、前記滞留メッセージを配布すること
を特徴とする請求項１１に記載の待機系ノード装置。
【請求項１３】
請求項１ないし請求項６のいずれかの一項に記載のメッセージ配布方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタ構成のメッセージキューイングシステムおけるメッセージ配布技術に関する。
【背景技術】
【０００２】
メッセージキューイングシステムは、送信側と受信側の双方のノードが稼動していなくても、自ノードが稼動していれば、キューを介することによって相手側の稼働状態に依存することなく送信処理または受信処理を行うことができる。また、通信障害やシステムダウンが発生しても、送受信されるメッセージは、ディスク装置等の物理実体を有するキューに格納されているので、そのメッセージが消失することはない。従って、メッセージキューイングシステムは、信頼性が高く、かつ、拡張性と柔軟性に優れたシステムであるといえる。
【０００３】
また、複数のノード装置がネットワークを介してディスク装置を共有するクラスタ構成のメッセージキューイングシステムにおいては、同一のアプリケーションプログラムを複数のノード装置で同時に並列処理させることができる。従って、次々に要求されるトランザクション処理を複数のノード装置で負荷分散して実行することができる。また、いずれかのノード装置に障害が発生した場合にも、システム全体の稼働が停止することはない。可用性に優れたシステムである。
【０００４】
ところで、メッセージキューイングシステムの負荷分散の方式には、大きく分けて２通りのタイプがある。一つは、ノード装置ごとにキューを割付けるタイプ（例えば、特許文献１参照）、他の一つは、キューをノード装置間で共用するタイプ（例えば、特許文献２参照）である。さらには、クラスタ構成のメッセージキューイングシステムにおいて、一部のノード装置で障害が発生した場合、障害が発生したノードが使用していたキューを他の正常なノード装置が引き継いで処理を継続するタイプもある（例えば、特許文献３参照）。
【特許文献１】米国特許６７１１６０６号公報（ＡＢＳＴＲＡＣＴ、図１）
【特許文献２】米国特許６０２３７２２号公報（ＡＢＳＴＲＡＣＴ、図１）
【特許文献３】特開２００４−３２２２４号公報（段落０００６〜０００８、図１〜図６）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１に開示された技術によれば、特許文献２に開示された技術に比べてスケーラビリティに関してキューアクセスの競合がない分優位である。しかしながら、可用性について問題があり、障害発生時にメッセージが滞留してしまうという欠点がある。一方、特許文献２に開示された技術では、障害発生時に他ノード装置での処理を可能にするため、同一メッセージをマルチキャストする方式を採ることによって、可用性の問題に対処している。しかしながら、特許文献２に開示された技術では、ネットワークトラフィックの増大という新たな問題が発生する。
【０００６】
また、特許文献３に開示されているように、ノード装置ごとに実行系ノード装置と待機系ノード装置とのクラスタ構成を採れば、障害発生時にもメッセージを滞留させることなく、メッセージを回復することができるが、システム構築コストが増大するとともに、待機系のノード装置の管理コストが高くなる。
【０００７】
以上の従来技術の問題点に鑑み、本発明は、スケーラビリティを確保するとともに障害発生時の可用性についての問題を解決し、かつ、システム構築コストおよび待機系の管理コストの低減をはかった、クラスタ構成のメッセージキューイングシステムにおけるメッセージ配布方法、待機系ノード装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記課題を解決するため、本発明は、ユーザプログラムを実行する複数の実行系ノード装置と、前記実行系ノード装置が使用するキューに滞留したメッセージの配布を制御する待機系ノード装置と、前記複数の実行系ノード装置および前記待機系ノード装置に接続され、前記複数の実行系ノード装置がそれぞれ使用するキューとそのキューを使用するノード装置とを対応付けるキューノード対応情報を記憶した記憶装置とを含んで構成されたクラスタ構成のメッセージキューイングシステムにおけるメッセージ配布方法であって、前記待機系ノード装置は、前記記憶装置に記憶されている前記キューノード対応情報を参照して、前記複数の実行系ノード装置のうちの１の実行系ノード装置が使用するキューと同一名称のキューを使用する他の実行系ノード装置の一覧を取得する第１のステップと、前記１の実行系ノード装置が使用するキューに滞留している滞留メッセージを、前記他の実行系ノード装置の一覧に含まれる実行系ノード装置が使用するキューに配布する第２のステップとを実行することを特徴とするメッセージ配布方法である。また、本発明は、以上のメッセージ配布方法を実行する待機系ノード装置であり、プログラムである。
【０００９】
すなわち、本発明においては、ある実行系ノード装置に障害が発生した場合には、そのノード装置が使用するキューに滞留したメッセージを、他の実行系のノード装置が使用するキューに配布することができ、そのメッセージに係るユーザプログラムの処理をメッセージ配布先のノード装置に継続して実行させることができる。従って、障害発生時の可用性が確保されていることになる。また、本発明においては、１つの待機系ノード装置が、任意の複数の実行系ノード装置で構成されるクラスタ構成のメッセージキューイングシステムにおいて生じる実行系ノード装置の障害の障害回復のためのメッセージ配布処理を行うことができる。つまり、スケーラビリティが確保されており、そのシステム構築コストおよび待機系ノード装置の管理コストは低減されているといえる。
【発明の効果】
【００１０】
本発明によれば、クラスタ構成のメッセージキューイングシステムにおける障害回復時の処理において、可用性とスケーラビリティが確保され、かつ、システム構築コストおよび待機系ノード装置の管理コストは低減される。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照して本発明の実施形態について詳しく説明する。
【００１２】
＜第１の実施形態＞
図１は、本発明の第１の実施形態に係るクラスタ構成のメッセージキューイングシステムの一例を示した図である。図１に示すように、本発明の実施形態に係るクラスタ構成のメッセージキューイングシステムは、実行系Ａのコンピュータ１と、実行系Ｂのコンピュータ２と、実行系Ｃのコンピュータ３と、待機系のコンピュータ４と、ディスク装置５とがネットワーク６によって接続されて構成される。
【００１３】
なお、これらのコンピュータ１〜４は、ネットワーク６におけるいわゆるノード装置であり、以下、本明細書および図面においては、単に「ノード」と、適宜、略称する。また、「実行系＃のコンピュータ」を単に「実行系＃」と、また、「待機系のコンピュータ」を単に「待機系」と、適宜、略称する。ここで、＃は、Ａ，ＢまたはＣである。
【００１４】
図１において、実行系Ａのコンピュータ１は、ＣＰＵ（Central Processing Unit）１１と、メモリ１２とから構成され、メモリ１２には、クラスタプログラム１２１、キューマネージャ１２２、ユーザプログラム１２３が格納されている。なお、メモリ１２は、通常は、主メモリ部分が半導体メモリで構成され、補助メモリ部分がハードディスク記憶装置によって構成される。
【００１５】
ここで、クラスタプログラム１２１は、待機系のコンピュータ４におけるクラスタプログラムとの間で通信を行ない、障害発生の監視を行うとともに、障害発生時には系切り替えを要求する機能などを持つ。また、キューマネージャ１２２は、使用するキューを管理するとともに、ユーザプログラム１２３がＡＰＩ（アプリケーション・プログラム・インタフェース）を介して操作するキューに対し、メッセージの登録および読み出しを行う。
【００１６】
なお、「キュー」とは、メッセージを保存するための論理的な待ち行列を構成する器であり、通常はディスク装置５上のファイルとして実現される。ユーザプログラム１２３は、メッセージ送信時に、宛先キューを指定してメッセージ登録ＡＰＩを発行することによって、メッセージを送信側ノードの転送用キューに格納する。すると、メッセージキューイングシステムの転送機能によって、転送用キューに格納されたメッセージは、例えば、ＦＩＦＯ（先入れ・先出し）アルゴリズムに従って取り出され、所定の宛先キューへ送信され、宛先キューに登録される。
【００１７】
また、図１では、キューは、キュー５１、５２として２つしか示されていないが、各実行系のコンピュータが少なくとも１つのキュー、通常は、複数のキューを使用するので、実行系のコンピュータの数よりは多いキューがあることになる。
【００１８】
また、ユーザプログラム１２３は、受信時には、メッセージ読み出しＡＰＩを発行することによって、宛先キューに格納されているメッセージを、例えば、キューに最も長く格納されている順番に取り出す。なお、この取り出しにおいては特定のメッセージを優先的に取り出すことも可能である。
【００１９】
次に、実行系Ｂのコンピュータ２は、ＣＰＵ２１とメモリ２２から構成され、メモリ２２には、クラスタプログラム２２１、キューマネージャ２２２、ユーザプログラム２２３が格納されている。クラスタプログラム２２１、キューマネージャ２２２、ユーザプログラム２２３のそれぞれの機能は、実行系Ａのコンピュータ１におけるクラスタプログラム１２１、キューマネージャ１２２、ユーザプログラム１２３のそれぞれの機能と同じである。
【００２０】
さらに、実行系Ｃのコンピュータ３は、ＣＰＵ３１とメモリ３２から構成され、メモリ３２には、クラスタプログラム３２１、キューマネージャ３２２、ユーザプログラム３２３が格納されている。クラスタプログラム３２１、キューマネージャ３２２、ユーザプログラム３２３のそれぞれの機能は、実行系Ａのコンピュータ１におけるクラスタプログラム１２１、キューマネージャ１２２、ユーザプログラム１２３のそれぞれの機能と同じである。
【００２１】
一方、待機系のコンピュータ４は、ＣＰＵ４１とメモリ４２から構成され、メモリ４２には、クラスタプログラム４２１、キューマネージャ４２２、メッセージ配布プログラム４２３がそれぞれ格納されている。
【００２２】
ここで、メッセージ配布プログラム４２３は、障害発生ノードが使用していたキューにおける滞留メッセージの情報を取得し、その滞留メッセージの情報と、後記するキューノード対応情報とに基づき、滞留メッセージの配布先ノードを選択する。そして、選択されたノードに対して、その滞留メッセージを配布し、キューノード対応情報におけるキューの状態情報を更新する。
なお、クラスタプログラム４２１、キューマネージャ４２２のそれぞれの機能は、実行系Ａのコンピュータ１におけるクラスタプログラム１２１、キューマネージャ１２２のそれぞれの機能と同じである。
【００２３】
図１において、ディスク装置５は、クラスタ構成の各ノード（実行系Ａ、Ｂ、Ｃの各コンピュータ１，２，３、待機系のコンピュータ４）によってネットワーク６を介して共通に使用される。システム共通領域５０には、キューノード対応情報５１、キュー順序情報５２の領域が割り付けられ、さらに、各ノードに対応するようにキュー５３、５４の領域が割付けられている。
【００２４】
図２（ａ）は、キューノード対応情報のデータ構造の一例を示した図、図２（ｂ）は、キュー順序情報のデータ構造の一例を示した図である。
キューノード対応情報５１は、キューマネージャごとにそのキューマネージャが使用するキューを対応付けた情報であり、図２（ａ）に示すように、キューマネージャ名、アドレス、キュー名、状態などのフィールドによって構成される。なお、ここでのアドレスとは、キューマネージャの格納場所を示す物理アドレスであり、状態とは、キューの稼働状況を示す状態である。ちなみに、実行系Ａのコンピュータ１に障害が発生し、その滞留メッセージが他の実行系コンピュータに引き継がれると、実行系Ａのコンピュータ１のキューマネージャ１（１２２）が使用していたキューの稼働状態は、稼働中から停止中に変更される。
【００２５】
また、キュー順序情報５２は、メッセージ処理に順序性がある場合に、ユーザによって定義される情報である。例えば、図２（ｂ）では、Ｑｕｅｕｅ１のメッセージをユーザプログラムが取り出してＱｕｅｕｅ２に格納し、Ｑｕｅｕｅ２のメッセージをユーザプログラムが取り出してＱｕｅｕｅ７に格納する場合に、Ｑｕｅｕｅ１でのメッセージの順序性をＱｕｅｕｅ２、Ｑｕｅｕｅ７でも保証する必要があることを示している。なお、この場合、順序性を保ちつつメッセージを回復するには、Ｑｕｅｕｅ７→Ｑｕｅｕｅ２→Ｑｕｅｕｅ１の順で回復させる必要がある。
【００２６】
図３は、本実施形態のメッセージキューイングシステムにおける障害回復処理の流れの例を示した図である。すなわち、図３は、実行系Ａのコンピュータ１において障害が発生したとき、その実行系Ａのコンピュータ１が使用していたキューに滞留しているメッセージを障害が発生していない実行系Ｂのコンピュータ（ここでは、実行系Ｂのコンピュータ２および実行系Ｃのコンピュータ３）のキューマネージャへ配布する処理の例を示したものである。以下、その処理の内容について説明する。なお、滞留メッセージをキューマネージャに配布するとは、そのキューマネージャが管理するキュー、つまり、そのキューマネージャが動作しているコンピュータ（ノード）が使用するキューに滞留メッセージを配布することを意味する（以下、本明細書において同じ）。
【００２７】
図３には、待機系コンピュータ４のメッセージ配布プログラム４２３、待機系コンピュータ４のキューマネージャ４２２、待機系コンピュータ４のクラスタプログラム４２１、実行系Ａのコンピュータ１のクラスタプログラム１２１、実行系Ｂのコンピュータ２のキューマネージャ２２２、実行系Ｃのコンピュータ３のキューマネージャ３２２およびシステム共通領域５０におけるキューノード対応情報５１のそれぞれの動作が示されている。
【００２８】
待機系コンピュータ４と実行系＃のコンピュータ１，２，３（ここで、＃＝Ａ，Ｂ，Ｃ）との間には、通常、障害情報通知のための専用線（図１において図示せず）が設けられており、待機系コンピュータ４は、その通信線を介して実行系＃のコンピュータ１，２，３の障害を検知することができる。そこで、例えば、実行系Ａのコンピュータ１において障害が発生し、その障害をクラスタプログラム１２１が検知した場合には、クラスタプログラム１２１は、待機系コンピュータ４のクラスタプログラム４２１に対して系切り替えを要求する（ステップＳ３１）。
【００２９】
その要求を受けた待機系コンピュータ４のクラスタプログラム４２１は、自身のキューマネージャ４２２を起動する（ステップＳ３２）。すると、待機系コンピュータ４のキューマネージャ４２２は、障害が発生した実行系Ａのコンピュータ１に対し割付けられたキュー５３，５４を参照することによって、未決着（仕掛り中）トランザクションの有無を確認する。そして、未決着トランザクションがあった場合には、未決着トランザクションの解決のための処理を実行し（ステップＳ３３）、メッセージ配布プログラム４２３に対してメッセージ配布要求を発行する（ステップＳ３４）。
【００３０】
次に、メッセージ配布要求を受信した待機系コンピュータ４のメッセージ配布プログラム４２３は、障害発生ノード（本例の場合は、実行系Ａのコンピュータ１）のキューに滞留メッセージを持つキューが存在するか否かを判定する（ステップＳ３５）。その判定の結果、滞留メッセージを持つキューが存在した場合には（ステップＳ３５でＹｅｓ）、そのキューの一つを取り出し、ディスク装置５上のキューノード対応情報５１を参照して、そのキューと同一名称のキューを持つキューマネージャ一覧を取得する（ステップＳ３６、Ｓ３７）。
【００３１】
続いて、メッセージ配布プログラム４２３は、そのキューマネージャ一覧に基づき、滞留しているメッセージを他の実行系のコンピュータへ引き継がせるために、メッセージ引き継ぎ処理を実行する（ステップＳ３８）。このメッセージ引き継ぎ処理の具体的な処理手順については、次に、図４を用いて詳細に説明する。
【００３２】
図４は、メッセージ引き継ぎ処理の具体的な処理手順を示したフローチャートである。図４において、メッセージ配布プログラム４２３は、キューマネージャ一覧を参照して、まず、先頭のキューマネージャを選択する（ステップＳ３７１）。そして、当該キューに滞留メッセージが存在するか否かをチェックする（ステップＳ３７２）。ここで、滞留メッセージが存在する場合には（ステップＳ３７２でＹｅｓ）、滞留メッセージの一つを取り出し、取り出した滞留メッセージをその当該キューマネージャに配布する（ステップＳ３７３）。
【００３３】
続いて、キューマネージャのポインタを進めて（ステップＳ３７４）、次に位置するキューマネージャを選択し、ステップＳ３７２〜Ｓ３７４の処理を、滞留メッセージがなくなる（ステップＳ３７２でＮｏ）まで繰り返す。なお、ステップＳ３７４において、キューマネージャのポインタが末尾に達していた場合には、ポインタを進めるのではなく、先頭に戻すものとする。
【００３４】
説明を図３に戻す。メッセージ配布プログラム４２３は、以上のようにして、障害発生ノードのキューの１つについて滞留していたメッセージを他の実行系コンピュータへ配布すると（ステップＳ３９）、そのキューについてキュー状態の変更を行う（ステップＳ４０）。具体的には、システム共通領域５０のキューノード対応情報５１を参照して、該当キューマネージャ上のそのキューのキュー状態を「停止中」に設定する（ステップＳ４１）。
【００３５】
続いて、ステップＳ３５へ戻り、滞留メッセージを持つキューが存在しなくなるまで、ステップＳ３６以下の処理を再度実行し、存在しなくなった場合には（ステップＳ３５でＮｏ）、待機系コンピュータ４のキューマネージャ４２２に制御を移し、キューマネージャ４２２は、終了処理を実行し（ステップＳ４２）、クラスタプログラム４２１は、再度障害待機の状態となり（ステップＳ４３）、障害回復処理を終える。
【００３６】
なお、本実施形態においては、障害が発生した実行系Ａのコンピュータ１のクラスタプログラム１２１から待機系コンピュータ４のクラスタプログラム４２１へ系切り替えを要求しているが（ステップＳ３１）、その要求がない場合であっても、待機系コンピュータ４のクラスタプログラム４２１自身が、障害情報通知のための専用線を介して、実行系Ａのコンピュータ１の障害を検知したときには、ステップＳ３２以下の処理を行うようにしてもよい。
【００３７】
以上のように、本実施形態においては、待機系のノードは、あるノードに障害が発生したときには、その障害ノードが使用していたキューに滞留したメッセージを他の障害のないノードへ配布し、配布先のノードでその滞留したメッセージの処理を継続して実行することができる。また、待機系のノードは、以上の障害回復の処理が終了した後は、再び、障害待機の状態となる。そのため、本実施形態のメッセージキューイングシステムにおいては、１つの待機系のノードによりＮ個の実行系のノードにおける障害回復が実現されるとともに、そのＮは２以上の任意の整数であればよい。従って、スケーラビリティと可用性を確保することができる上に、システムの構築コストも低減することができる。
【００３８】
＜第２の実施形態＞
次に、第２の実施形態として、クラスタ構成のメッセージキューイングシステムにおけるメッセージ処理に順序性がある場合に障害回復の処理を行う例を、図５および図６に示す。ここで、図５は、クラスタ構成のメッセージキューイングシステムにおいて、メッセージ処理に順序性がある場合の障害回復処理の流れの例を示した図である。また、図６は、メッセージ処理に順序性がある場合のメッセージ引継ぎ処理の具体的な処理手順を示した図である。
【００３９】
すなわち、図５および図６は、実行系Ａのコンピュータ１において障害が発生したとき、その実行系Ａのコンピュータ１が使用していたキューに滞留しているメッセージを、ディスク装置５１に記憶されているキュー順序情報５２に基づくキューの順序に従い、障害が発生していない実行系のコンピュータの１つ（ここでは、実行系Ｂのコンピュータ２）のキューマネージャへ配布する処理の例を示したものである。以下、その処理の内容について説明する。なお、本実施形態におけるクラスタ構成のメッセージキューイングシステムの構成は、第１の実施形態において図１および図２に示した構成とほぼ同じであるので、その説明を省略する。また、図５については、図３に示した障害回復処理との相違部分についてのみ説明する。
【００４０】
図５において、ステップＳ５１〜Ｓ５７の処理は、図３のステップＳ３１〜Ｓ３７までの処理と同じである。そのステップＳ５７までに、待機系コンピュータ４のメッセージ配布プログラム４２３は、ディスク装置５上のキューノード対応情報５１から、障害発生ノードが持つキューと同一名称のキューを持つキューマネージャ一覧を取得する。そして、図２（ｂ）に一例が示されるキュー順序情報５２を取得し（ステップＳ５８）、さらに、実行系Ｂ、Ｃのコンピュータ２、３のキューマネージャ２２２、３２２の滞留メッセージ数を取得する（ステップＳ５９）。次に、メッセージ配布プログラム４２３は、滞留メッセージ数が最小のキューマネージャを選択してそのキューマネージャに全てのメッセージを配布するための引き継ぎ処理を実行する（ステップＳ６０）。ステップＳ６０における詳細な処理の内容は、図６に示されている。
【００４１】
図６において、待機系コンピュータ４のメッセージ配布プログラム４２３は、取得した滞留メッセージ数に応じて、滞留メッセージ数が最小のキューマネージャを選択し（ステップＳ６０１）、先に取得済みのキュー順序情報に基づくキューが存在するか否かをチェックする（ステップＳ６０２）。そして、そのようなキューが存在する場合には（ステップＳ６０２でＹｅｓ）、キュー順序情報５２のキュー一覧の先頭のキューを選択する（ステップＳ６０３）。続いて、メッセージ配布プログラム４２３は、そのキューに存在する滞留メッセージをステップＳ６０１で選択されたキューマネージャに配布し（ステップＳＳ６０４）、キューのポインタ（ステップＳ６０３でキューの先頭に代え、用いられるポインタ）を１つ進め（ステップＳＳ６０５）、ステップＳ６０２へ戻る。そして、キュー順序情報に基づくキューについて未処理のキューが存在しなくなる（ステップＳ６０２でＮｏ）まで、ステップＳ６０３以下の処理を繰り返す。
【００４２】
再び図５において、メッセージ配布（ステップＳ６１）より後の処理（ステップＳ６２〜Ｓ６５）は、図３に示した処理（ステップＳ４０〜Ｓ４３）と同じであるが、本例の場合には、滞留メッセージはすべてのキューについて配布済みなので、ステップＳ５５へ戻る必要はない。
【００４３】
以上、第２の実施形態によれば、メッセージに順序性がある場合についても、障害発生時に、その障害ノードが使用していたキューに滞留したメッセージを他の障害のないノードが使用するキューへ配布し、配布先のノードでその滞留したメッセージの処理を継続して実行することができる。
【００４４】
＜第３の実施形態＞
次に、第３の実施形態として、クラスタ構成のメッセージキューイングシステムにおいて、メッセージ配布先ノードの負荷分散を考慮した障害回復の処理を行う例を、図７および図８に示す。ここで、図７は、クラスタ構成のメッセージキューイングシステムにおいて、メッセージ配布先ノードの負荷分散を考慮した障害回復処理の流れの例を示した図である。また、図８は、負荷分散処理におけるメッセージ引継ぎ処理の具体的な処理手順を示した図である。
【００４５】
すなわち、図７および図８は、実行系Ａのコンピュータ１において障害が発生したとき、その実行系Ａのコンピュータ１が使用していたキューに滞留しているメッセージを、障害が発生していない複数の実行系のコンピュータ（ここでは、実行系Ｂのコンピュータ２および実行系Ｃのコンピュータ３）のキューマネージャへ、それらのキューマネージャが使用するキューに滞留するメッセージの数が平均化するように配布する処理の例を示したものである。以下、その処理の内容について説明する。なお、本実施形態におけるクラスタ構成のメッセージキューイングシステムの構成は、第１の実施形態において図１および図２に示した構成とほぼ同じであるので、その説明を省略する。
【００４６】
図７において、例えば、実行系Ａのコンピュータ１において障害が発生し、その障害をクラスタプログラム１２１が検知した場合には、クラスタプログラム１２１は、待機系コンピュータ４のクラスタプログラム４２１に対して系の切り替えを要求すると同時に、負荷分散を要求する（ステップＳ７１）。すると、待機系コンピュータ４のクラスタプログラム４２１は、待機系コンピュータ４のキューマネージャ４２２を起動し（ステップＳ７２）、キューマネージャ４２２は、待機系コンピュータ４のメッセージ配布プログラム４２３に対して、メッセージの配布を要求する（ステップＳ７３）。
【００４７】
以下、メッセージ配布プログラム４２３における処理は、図３とほぼ同じであるが、負荷を平均的に分散させる必要性により、図３の処理に対して、他の実行系ＢおよびＣのキューマネージャ２２２，３２２から滞留メッセージ数を取得する処理（ステップＳ７７）が追加されている。そして、その取得した滞留メッセージ数に従い、各実行系のコンピュータ１、２、３の負荷がバランスするようにメッセージの引き継ぎ処理を行っている（ステップＳ７８）。ステップＳ７８における詳細な処理の内容は、図８に示されている。
【００４８】
図８において、待機系コンピュータ４のメッセージ配布プログラム４２３は、まず、取得した滞留メッセージ数に基づき、負荷分散要求を発した実行系を含めて実行系コンピュータの平均滞留メッセージ数を計算する（ステップＳ７８１）。そして、キューマネージャ一覧に配布すべきキューマネージャが存在するか否かをチェックし（ステップＳ７８２）、配布すべきキューマネージャが存在した場合には（ステップＳ７８２でＹｅｓ）、キューマネージャ一覧から先頭のキューマネージャを選択する（ステップＳ７８３）。続いて、先に計算済みの平均滞留メッセージ数から滞留メッセージ数を差し引いた個数のメッセージを引き継ぎメッセージとして、選択したキューマネージャへ配布する（ステップＳ７８４）。そして、キューマネージャのポインタ（ステップＳ７８３でキューマネージャ一覧の先頭に代わり、その位置を指し示す）を進めて（ステップＳ７８５）、ステップＳ７８２へ戻る。そして、キューマネージャ一覧から配布すべきキューマネージャがなくなったときに（ステップＳ７８２でＮｏ）、処理を終了する。
【００４９】
以上、第３の実施形態によれば、障害発生時に、障害が発生した実行系ノードのキューに滞留しているメッセージを、配布先の実行系ノードのキューに滞留するメッセージ数が平均化するように分散させて配布することができる。
【００５０】
＜第４の実施形態＞
次に、第４の実施形態として、クラスタ構成のメッセージキューイングシステムに新たなノードを追加するスケールアウト処理の例を、図９および図１０に示す。ここで、図９は、クラスタ構成のメッセージキューイングシステムにおけるスケールアウト処理の流れの例を示した図である。また、図１０は、スケールアウト処理におけるメッセージ引き継ぎ処理の詳細を示した図である。
【００５１】
図９および図１０は、稼動中のメッセージキューイングシステムに新たにコンピュータが追加される（スケールアウトされる）とき、稼動中のコンピュータ（ここでは、実行系Ａのコンピュータ１および実行系Ｂのコンピュータ２）のキューマネージャが使用しているキューに滞留しているメッセージをスケールアウトされたコンピュータのキューマネージャへ配布する処理の例を示したものである。以下、その処理の内容について説明する。なお、本実施形態におけるクラスタ構成のメッセージキューイングシステムの構成は、第１の実施形態において図１および図２に示した構成とほぼ同じであるので、その説明を省略する。
【００５２】
スケールアウト処理においては、実行系ノードに滞留しているメッセージをスケールアウトにより追加されるノードに配布する。図９に示すように、スケールアウトノードのキューマネージャは、まず、待機系コンピュータ４のメッセージ配布プログラム４２３に対してメッセージの分散を要求する（ステップＳ９１）。以下、メッセージ配布プログラム４２３は、図３に示した処理と同様な処理を行うが、メッセージの引き継ぎ処理（ステップＳ９５）は、図１０に示すように異なっている。なお、メッセージ配布プログラム４２３は、メッセージの引継ぎ処理を実行するときに、実行系のキューマネージャ１２２，２２２から滞留メッセージ数を取得する（ステップＳ９６）。
【００５３】
図１０において、待機系コンピュータ４のメッセージ配布プログラム４２３は、取得した滞留メッセージ数に基づき、追加するノードを含め平均滞留メッセージ数を計算する（ステップＳ９５１）。そして、キューマネージャ一覧に配布元となるキューマネージャが存在するか否かをチェックし（ステップＳ９５２）、配布元となるキューマネージャが存在する場合には（ステップＳ９５２でＹｅｓ）、キューマネージャ一覧から先頭のキューマネージャを選択する（ステップＳ９５３）。そして、その選択したキューマネージャから、先にステップＳ９６で取得した滞留メッセージ数からステップＳ９５１で計算した平均滞留メッセージ数を差し引いた個数のメッセージを取得し（ステップＳ９５４）、その取得したメッセージをスケールアウトしたキューマネージャに配布する（ステップＳ９５５）。そして、キューマネージャのポインタ（ステップＳ９５３でキューマネージャ一覧の先頭に代わり、その位置を指し示す）を進めて（ステップＳ９５６）、Ｓ９５２へ戻る。そして、キューマネージャ一覧から配布元のキューマネージャがなくなったときに（ステップＳ９５２でＮｏ）、処理を終了する。
【００５４】
なお、図９においては、メッセージ配布プログラム４２３は、メッセージ配布後（ステップＳ９８）、キュー状態の変更を行う（ステップＳ９９）。具体的には、システム共通領域５０のキューノード対応情報５１を参照して、スケールアウトするキューマネージャ上のキュー状態を「稼動中」に設定する（ステップＳ１００）。
【００５５】
以上、第４の実施形態によれば、新たにスケールアウトするノードを追加する場合にも、実行系ノードが使用しているキューに滞留しているメッセージの一部を、各キューの滞留メッセージ数が平均化するよう取り出し、その取り出したメッセージを新たに追加されたノードが使用するキューに配布することができる。
【図面の簡単な説明】
【００５６】
【図１】本発明の第１の実施形態に係るクラスタ構成のメッセージキューイングシステムの一例を示した図である。
【図２】（ａ）は、本発明の第１の実施形態に係るキューノード対応情報のデータ構造の一例を示した図、（ｂ）は、本発明の第１の実施形態に係るキュー順序情報のデータ構造の一例を示した図である。
【図３】本発明の第１の実施形態に係るメッセージキューイングシステムにおける障害回復処理の流れの例を示した図である。
【図４】本発明の第１の実施形態に係るメッセージ引き継ぎ処理の具体的な処理手順を示したフローチャートである。
【図５】本発明の第２の実施形態に係るクラスタ構成のメッセージキューイングシステムにおいて、メッセージ処理に順序性がある場合の障害回復処理の流れの例を示した図である。
【図６】本発明の第２の実施形態に係るメッセージ処理に順序性がある場合のメッセージ引き継ぎ処理の具体的な処理手順を示した図である。
【図７】本発明の第３の実施形態に係るクラスタ構成のメッセージキューイングシステムにおいて、メッセージ配布先ノードの負荷分散を考慮した障害回復処理の流れの例を示した図である。
【図８】本発明の第３の実施形態に係る負荷分散処理におけるメッセージ引き継ぎ処理の具体的な処理手順を示した図である。
【図９】本発明の第４の実施形態に係るクラスタ構成のメッセージキューイングシステムにおけるスケールアウト処理の流れの例を示した図である。
【図１０】本発明の第４の実施形態に係るスケールアウト処理におけるメッセージ引継ぎ処理の具体的な処理手順を示した図である。
【符号の説明】
【００５７】
１，２，３                      実行系コンピュータＡ，Ｂ，Ｃ
４                              待機系コンピュータ
５                              ディスク装置
６                              ネットワーク
１１，２１，３１，４１          ＣＰＵ
１２，２２，３２，４２          メモリ
５０                            システム共通領域
５１                            キューノード対応情報
５２                            キュー順序情報
５３，５４                      キュー
１２１，２２１，３２１，４２１  クラスタプログラム
１２２，２２２，３２２，４２２  キューマネージャ
１２３，２２３，３２３          ユーザプログラム
４２３                          メッセージ配布プログラム
【図１】
2006189964.tif 000003
【図２】
2006189964.tif 000004
【図３】
2006189964.tif 000005
【図４】
2006189964.tif 000006
【図５】
2006189964.tif 000007
【図６】
2006189964.tif 000008
【図７】
2006189964.tif 000009
【図８】
2006189964.tif 000010
【図９】
2006189964.tif 000011
【図１０】
2006189964.tif 000012