(57)【特許請求の範囲】
【請求項１】
複数のサーバのうちの一つのサーバであるマスタサーバで記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント装置に対して送信するイベント送信部と、
前記マスタサーバがイベント情報を送信した場合には、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期部と、
前記マスタサーバに故障が発生し、レプリカサーバであったサーバが新しいマスタサーバとなった場合であって、前記故障したマスタサーバとの通信が途絶えたことによる接続要求を前記クライアント装置から受信した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続部と、
前記新しいマスタサーバとクライアント装置とが通信可能となった場合には、前記送信完了情報として、前記クライアント装置に対して送信した最新のイベント情報を識別する識別情報を用いて、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信部と、
を備えることを特徴とするイベント配送装置。
【請求項２】
前記接続部は、前記マスタサーバに故障が発生し、レプリカサーバであった自装置が新しいマスタサーバとなった場合であって、前記故障したマスタサーバとの通信が途絶えたことによる接続要求を前記クライアント装置から受信した場合には、該クライアント装置に自装置が新しいマスタサーバであることを通知するとともに、該新しいマスタサーバと前記クライアント装置とを通信可能に接続することを特徴とする請求項１に記載のイベント配送装置。
【請求項３】
前記接続部は、前記マスタサーバに故障が発生した場合には、前記クライアント装置に新しいマスタサーバとの再接続要求を通知し、該新しいマスタサーバと前記クライアント装置とを通信可能に接続することを特徴とする請求項１または２に記載のイベント配送装置。
【請求項４】
複数のサーバを有するイベント配送装置と、イベント配送装置上で発生したイベントに関する情報であるイベント情報を受信するクライアント装置とを備えたイベント配送システムであって、
前記イベント配送装置が、
前記複数のサーバのうちの一つのサーバであるマスタサーバが記憶するイベント情報をクライアント装置に対して送信するイベント送信部と、
前記マスタサーバがイベント情報を送信した場合には、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期部と、
前記マスタサーバに故障が発生し、レプリカサーバであったサーバが新しいマスタサーバとなった場合であって、前記故障したマスタサーバとの通信が途絶えたことによる接続要求を前記クライアント装置から受信した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続部と、
前記新しいマスタサーバとクライアント装置とが通信可能となった場合には、前記送信完了情報として、前記クライアント装置に対して送信した最新のイベント情報を識別する識別情報を用いて、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信部と、を備え、
前記クライアント装置が、
前記マスタサーバから受信したイベント情報が、アプリケーションに通知済みのイベント情報であるか否かを判定し、前記アプリケーションに通知済みのイベント情報でない場合には、該受信したイベント情報をアプリケーションに通知する通知部を備えることを特徴とするイベント配送システム。
【請求項５】
イベント配送装置で実行されるイベント配送方法であって、
複数のサーバのうちの一つのサーバであるマスタサーバで記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント装置に対して送信するイベント送信工程と、
前記マスタサーバがイベント情報を送信した場合には、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期工程と、
前記マスタサーバに故障が発生し、レプリカサーバであったサーバが新しいマスタサーバとなった場合であって、前記故障したマスタサーバとの通信が途絶えたことによる接続要求を前記クライアント装置から受信した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続工程と、
前記新しいマスタサーバとクライアント装置とが通信可能となった場合には、前記送信完了情報として、前記クライアント装置に対して送信した最新のイベント情報を識別する識別情報を用いて、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信工程と、
を含んだことを特徴とするイベント配送方法。
【請求項６】
複数のサーバのうちの一つのサーバであるマスタサーバで記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント装置に対して送信するイベント送信ステップと、
前記マスタサーバがイベント情報を送信した場合には、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期ステップと、
前記マスタサーバに故障が発生し、レプリカサーバであったサーバが新しいマスタサーバとなった場合であって、前記故障したマスタサーバとの通信が途絶えたことによる接続要求を前記クライアント装置から受信した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続ステップと、
前記新しいマスタサーバとクライアント装置とが通信可能となった場合には、前記送信完了情報として、前記クライアント装置に対して送信した最新のイベント情報を識別する識別情報を用いて、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信ステップと、
をコンピュータに実行させることを特徴とするイベント配送プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、イベント配送装置、イベント配送システム、イベント配送方法およびイベント配送プログラムに関する。
【背景技術】
【０００２】
安定したサービスの提供のためには、それを提供するシステムの可用性を高める仕組みが必要であり、システムを構成するリソースの故障を検知する死活監視技術が従来から知られている。また、クラウド等の分散処理システムでは、死活監視システム自身にサーバ故障やネットワーク分断に耐えられる程度の高い可用性を備えることが求められており、死活監視システムがその故障を自ら検知して他のリソースに故障等のイベント情報を通知するとともに、リソースの自動切替を実現可能とする技術が利用されている。
【０００３】
ところが、イベント発生から送信完了までの間にハードウェアリソースに故障が発生した場合には、イベント情報が欠送し、システムの故障検知、及び切替えに失敗することになり、継続的なシステムの稼動に影響が生じる場合がある。
【０００４】
このため、切り替えが生じた際に欠送発生の可能性を通知し、受信した死活監視システムを利用するクライアント装置側各々で、欠送した情報を補完する技術が知られている（非特許文献１参照）。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Mike  Burrows,“The  Chubby  lock  service  for  loosely‐coupled  distributed  systems”,OSDI'06:Seventh  Symposium  on  Operating  System  Design  and  Implementation,  Seattle,  WA,November,2006.［online］、［平成２４年７月１９日検索］、インターネット＜http://research.google.com/archive/chubby‐osdi06.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記した従来の技術では、切り替えが生じた際に欠送発生の可能性を受信したクライアント装置側各々で、欠送した情報を補完できるような構成にする必要があるので、システム構成がより複雑になってしまうという課題があった。
【０００７】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、システム構成を複雑にすることなく、イベント情報の欠送が発生することを防止することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、イベント配送装置は、複数のサーバのうちの一つのサーバであるマスタサーバが記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント装置に対して送信するイベント送信部と、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期部と、前記マスタサーバに故障が発生した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続部と、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を、前記送信完了情報を用いて特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信部と、を備えることを特徴とする。
【０００９】
また、イベント配送システムは、複数のサーバを有するイベント配送装置と、イベント配送装置上で発生したイベントに関する情報であるイベント情報を受信するクライアント装置とを備えたイベント配送システムであって、前記イベント配送装置が、前記複数のサーバのうちの一つのサーバであるマスタサーバが記憶するイベント情報をクライアント装置に対して送信するイベント送信部と、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期部と、前記マスタサーバに故障が発生した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続部と、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を、前記送信完了情報を用いて特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信部と、を備え、前記クライアント装置が、前記マスタサーバから受信したイベント情報が、アプリケーションに通知済みのイベント情報であるか否かを判定し、アプリケーションに通知済みのイベント情報でない場合には、該受信したイベント情報をアプリケーションに通知する通知部を備えることを特徴とする。
【００１０】
また、イベント配送方法は、複数のサーバのうちの一つのサーバであるマスタサーバが記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント装置に対して送信するイベント送信工程と、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期工程と、前記マスタサーバに故障が発生した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続工程と、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を、前記送信完了情報を用いて特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信工程と、含んだことを特徴とする。
【００１１】
また、イベント配送プログラムは、複数のサーバのうちの一つのサーバであるマスタサーバが記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント装置に対して送信するイベント送信ステップと、前記マスタサーバが記憶するイベント情報と、前記クライアント装置に対して前記イベント情報の送信を完了したか否かを示す送信完了情報とを、前記複数のサーバのうち前記マスタサーバ以外のサーバであるレプリカサーバに記憶させる同期ステップと、前記マスタサーバに故障が発生した場合には、前記レプリカサーバのなかから選択された新しいマスタサーバと前記クライアント装置とを通信可能に接続する接続ステップと、前記新しいマスタサーバが記憶するイベント情報のうち前記クライアント装置に対して送信未完了であるイベント情報を、前記送信完了情報を用いて特定し、該送信未完了であるイベント情報を前記クライアント装置に送信する送信未完了イベント送信ステップと、をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１２】
本願に開示するイベント配送装置、イベント配送システム、イベント配送方法およびイベント配送プログラムは、クライアント装置側で欠送イベント情報の補完をする処理が不要であり、システム構成を複雑にすることなく、イベント情報の欠送が発生することを防止することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係る死活監視システムの概要を説明するための図である。
【図２】図２は、実施例１に係る死活監視システムの構成を示すブロック図である。
【図３】図３は、セッション情報一覧を示す図である。
【図４】図４は、イベント一覧を示す図である。
【図５】図５は、セッション一覧を示す図である。
【図６】図６は、死活監視システムによる新マスタへの切替処理を説明する図である。
【図７】図７は、実施例１に係る死活監視システムによる正常時のイベント配送処理の流れを示すシーケンス図である。
【図８】図８は、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを示すシーケンス図である。
【図９】図９は、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを示すシーケンス図である。
【図１０】図１０は、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを示すシーケンス図である。
【図１１】図１１は、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを示すシーケンス図である。
【図１２】図１２は、実施例１に係るクライアントの定期通信開始処理の処理手順を説明するためのフローチャートである。
【図１３】図１３は、実施例１に係るクライアントの定期通信受信処理の処理手順を説明するためのフローチャートである。
【図１４】図１４は、実施例１に係るクライアントのイベント処理の処理手順を説明するためのフローチャートである。
【図１５】図１５は、実施例１に係るクライアントの再接続処理の処理手順を説明するためのフローチャートである。
【図１６】図１６は、実施例１に係るマスタのイベント処理の処理手順を説明するためのフローチャートである。
【図１７】図１７は、実施例１に係る死活監視システムにおけるサーバからの再接続処理の流れを示すシーケンス図である。
【図１８】図１８は、イベント配送プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、この発明に係るイベント配送装置、イベント配送システム、イベント配送方法およびイベント配送プログラムの実施例を詳細に説明する。なお、以下では、イベント配送処理を死活監視サービスの一部分として提供する死活監視システムについて説明するが、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１５】
以下の実施例では、実施例１に係る死活監視システムの概要、死活監視システムの構成および処理の流れを順に説明し、最後に実施例１による効果を説明する。
【００１６】
［死活監視システムの概要］
まず最初に、図１を用いて、実施例１に係る死活監視システムの概要を説明する。図１は、実施例１に係る死活監視システムの概要を説明するための図である。
【００１７】
実施例１に係る死活監視システム１は、死活監視装置１０と、該死活監視装置１０に接続される複数のクライアント２０Ａ〜２０Ｃとを有する。死活監視装置１０は、複数のサーバ１０Ａ〜１０Ｅを有し、複数のサーバ１０Ａ〜１０Ｅのうち、一つのサーバの役割をマスタ１０Ａとし、その他のサーバの役割をレプリカ１０Ｂ〜１０Ｅとする。
【００１８】
死活監視装置１０は、サーバ故障やネットワーク分断に耐えられるシステム上でイベント情報を冗長化する。具体的には、死活監視装置１０は、マスタ１０Ａが管理するイベント情報をレプリケーションにより冗長化することで、レプリカ１０Ｂ〜１０Ｅでもマスタ１０Ａが管理するイベント情報を記憶させる。例えば、死活監視装置１０は、既存のＰａｘｏｓアルゴリズムやＱｕｏｒｕｍプロトコルによるレプリケーション技術によって、サーバ故障やネットワーク分断に耐えられる冗長化を行っている。
【００１９】
死活監視装置１０では、イベントが発生すると、マスタ１０Ａが複数のクライアント２０Ａ〜２０Ｃに対してイベント情報を配送する。ここで、マスタ１０Ａに故障が発生した場合には、マスタをサーバ１０Ａから他のサーバ１０Ｂに切替えて、新しいマスタ１０Ｂが複数のクライアント２０Ａ〜２０Ｃと再接続し、送信を完了していないイベント情報を複数のクライアント２０Ａ〜２０Ｃに対して配送する。
【００２０】
これにより、クライアント側での欠送イベント情報の補完が不要となるため、システム構成を複雑にすることがなくなり、また、マスタ故障時に新マスタからイベント情報を配送可能なため、イベント情報の欠落が生じないという効果を得ることができる。
【００２１】
［死活監視システムの構成］
次に、図２を用いて、図１に示した死活監視システム１の構成を説明する。図２は、実施例１に係る死活監視システムの構成を示すブロック図である。図２に示すように、この死活監視システム１は、死活監視装置１０およびクライアント２０を備え、死活監視装置１０のマスタ１０Ａとクライアント２０とが接続されている。以下にこれらの各装置の構成を説明する。
【００２２】
死活監視装置１０は、複数のサーバのうちの一つのサーバであるマスタ１０Ａと、その他のサーバであるレプリカ１０Ｂ〜１０Ｅを有する。また、マスタ１０Ａおよびレプリカ１０Ｂ〜１０Ｅは、それぞれが独立したデータベース３０Ａ〜３０Ｅを保持している。
【００２３】
データベース３０Ａ〜３０Ｅは、例えば、死活監視装置１０上で発生したイベントに関する情報であるイベント情報を記憶する。また、各データベース３０Ａ〜３０Ｅが記憶するイベント情報については、それぞれ同期しているため、同じ内容のイベント情報が記憶されているものとする。
【００２４】
マスタ１０Ａおよびレプリカ１０Ｂ〜１０Ｅは、イベント送信部１１、同期部１２、接続部１３、送信未完了イベント送信部１４および記憶部１５を有する。なお、各サーバ（マスタ１０Ａおよびレプリカ１０Ｂ〜１０Ｅ）は、マスタとレプリカで役割が異なるが、構成については同様である。以下にこれらの各部の処理を説明する。また、以下の説明では、サーバ１０Ａがマスタの役割であり、サーバ１０Ａに故障が発生した後の新マスタがサーバ１０Ｂである場合を例にして説明する。
【００２５】
記憶部１５は、各種処理に必要なデータおよびプログラムを格納する。例えば、マスタ１０Ａの記憶部１５は、セッションを管理するための情報であるセッション情報一覧と、イベント情報を管理するための情報であるイベント一覧とを記憶する。なお、イベント一覧は、マスタ１０Ａおよびレプリカ１０Ｂ〜１０Ｅが保持するデータベース３０Ａ〜３０Ｅにおいても記憶される情報である。また、上記したデータベース３０Ａ〜３０Ｅは、セッションの一覧であるセッション一覧を記憶する。以下では、セッション情報一覧、イベント一覧およびセッション一覧について、図３〜図５を用いてそれぞれ具体的に説明する。
【００２６】
例えば、マスタ１０Ａの記憶部１５は、図３に例示するように、セッション情報一覧として、セッションを一意に識別する「セッションＩＤ」と、クライアントに関する情報である「クライアント情報」と、クライアント２０に送信するイベント情報のイベントＩＤである「送信するイベントのエントリ」とを対応付けて記憶する。図３の例を挙げて説明すると、記憶部１５は、例えば、セッションＩＤ「１」と、クライアント情報としてＩＰアドレス「１０．０．０．１」と、送信するイベントのエントリ「Ｅｉｄ＝１，３，５」とを対応付けて記憶する。
【００２７】
また、マスタ１０Ａの記憶部１５は、図４に例示するように、イベント一覧として、イベントを一意に識別する「イベントＩＤ」と、イベントの種別を示す「イベント種別」と、イベントの発生元となるセッションのセッションＩＤを示す「イベント発生元のセッションＩＤ」とを対応付けて記憶する。図４の例を挙げて説明すると、記憶部１５は、例えば、イベントＩＤ「１」と、イベント種別「ファイル更新」と、イベント発生元のセッションＩＤ「Ｓｉｄ＝２」とを対応付けて記憶する。
【００２８】
また、データベース３０Ａ〜３０Ｅは、図５に例示するように、セッション一覧として、セッションを一意に識別する「セッションＩＤ」と、クライアントに関する情報である「クライアント情報」とを対応付けて記憶する。図５の例を挙げて説明すると、データベース３０Ａ〜３０Ｅは、例えば、セッションＩＤ「１」と、クライアント情報としてＩＰアドレス「１０．０．０．１」とを対応付けて記憶する。
【００２９】
ここで、レプリカ１０Ｂ〜１０Ｅのデータベース３０Ｂ〜３０Ｅが記憶するイベント一覧およびセッション一覧は、マスタ１０Ａのデータベース３０Ａが記憶するイベント一覧およびセッション一覧の複製である。また、上記したように、レプリカ１０Ｂ〜１０Ｅのデータベース３０Ｂ〜３０Ｅは、セッション情報一覧を記憶していない。このため、レプリカ１０Ｂ〜１０Ｅのいずれかがマスタに切り替わった場合には、データベース３０Ｂ〜３０Ｅに記憶されたイベント一覧およびセッション一覧からセッション情報一覧を構築して、該セッション情報一覧を記憶部１５にセットする。
【００３０】
イベント送信部１１は、自サーバがマスタ１０Ａである場合に、自サーバが保持しているデータベース３０Ａが記憶するイベント情報をクライアント２０に対して送信する。具体的には、イベント送信部１１は、定期的にクライアント２０に対して送信する死活監視情報にイベント情報を付加することで、イベント情報をクライアント２０に対して送信する。ここで、死活監視装置１０とクライアント２０との間で行う死活監視とは、死活監視装置１０とクライアント２０の両計算機のどこかで故障が発生していないかの確認、また、両計算機間の接続が保てていることの確認をするためのものである。また、イベント送信部１１は、イベント情報として、イベントを一意に識別する「イベントＩＤ」とイベントの種類を示す「イベントの種類」とを死活監視情報に付加してクライアント２０に送信する。
【００３１】
なお、イベント送信部１１は、クライアント２０へ送信するイベント情報の順序が保つために、通信順序を保証する通信路を用いて、クライアント２０にイベント情報を送信する。例えば、イベント送信部１１は、ＴＣＰ（Transmission  Control  Protocol）やＵＤＰ（User  Datagram  Protocol）を用いた通信路でイベント情報をクライアント２０に送信する。ただし、ＵＤＰを用いた通信路を適用する場合には、ＵＤＰ通信に通信順序を保証する機能を追加する必要がある。
【００３２】
同期部１２は、自サーバがマスタ１０Ａである場合に、マスタ１０Ａが保持するデータベース３０Ａが記憶するイベント情報をレプリカ１０Ｂ〜１０Ｅに通知してデータベース３０Ｂ〜３０Ｅに記憶させる。具体的には、同期部１２は、イベントが発生して自サーバが保持するデータベースにイベント情報を登録するたびに、該イベント情報をレプリカ１０Ｂ〜１０Ｅに通知してデータベース３０Ｂ〜３０Ｅに記憶させる。
【００３３】
また、同期部１２は、クライアント装置２０に対してイベント情報の送信を完了したか否かを示す情報を、レプリカ１０Ｂ〜１０Ｅに通知してレプリカ１０Ｂ〜１０Ｅのデータベース３０Ｂ〜３０Ｅにそれぞれ記憶させる。ここで、同期部１２は、イベント情報の送信を完了したか否かを示す情報として、クライアント２０が受信した最新のイベント情報のイベントＩＤである「最新受信完了イベントＩＤ」をレプリカ１０Ｂ〜１０Ｅに通知してレプリカ１０Ｂ〜１０Ｅのデータベース３０Ｂ〜３０Ｅにそれぞれ記憶させる。
【００３４】
接続部１３は、マスタ１０Ａに故障が発生した場合には、レプリカ１０Ｂ〜１０Ｅのなかから選択された新しいマスタ１０Ｂとクライアント２０とを通信可能に接続する。具体的には、接続部１３は、クライアント２０のクライアントライブラリ２１が送信したマスタの問い合わせを受け付け、かつ、自サーバが新しいマスタ１０Ｂである場合には、クライアント２０と通信可能に接続する。なお、新しいマスタの選択については、例えば、既存のＰａｘｏｓによるマスタの選定機能を利用して行っている。
【００３５】
送信未完了イベント送信部１４は、新しいマスタ１０Ｂが保持するデータベース２０Ｂが記憶するイベント情報のうちクライアント２０に対して送信未完了であるイベント情報を、最新受信完了イベントＩＤを用いて特定し、該送信未完了であるイベント情報をクライアント２０に送信する。具体的には、送信未完了イベント送信部１４は、最新受信完了イベントＩＤ以後の新しいイベントＩＤのイベント情報を送信未完了であるイベント情報として特定し、該イベント情報をクライアント２０に送信する。
【００３６】
また、クライアント２０は、クライアントライブラリ２１とアプリケーション２２とを有する。また、クライアントライブラリ２１は、セッション管理部２１ａを有しており、死活監視のため、定期的にマスタ１０Ａと通信を行う。
【００３７】
セッション管理部２１ａは、マスタ１０Ａから受信した死活監視情報にイベント情報が付加されている場合には、マスタ１０Ａが送信した最新のイベント情報のイベントＩＤである最新送信完了イベントＩＤを用いて、該イベント情報を二重に受信していないか確認する冗送確認処理を行う。なお、上記した最新送信完了イベントＩＤと死活監視装置１０が記憶する最新受信完了イベントＩＤとは、同種の情報であり、クライアント視点では、「最新送信完了イベントＩＤ」とし、死活監視装置視点では、「最新受信完了イベントＩＤ」としている。具体的には、セッション管理部２１ａは、最新送信完了イベントＩＤを保持し、受信したイベント情報のイベントＩＤが最新送信完了イベントＩＤよりも新しいイベント情報であれば、イベント情報をアプリケーション２２に通知する。
【００３８】
また、セッション管理部２１ａは、マスタ１０Ａが故障してフェイルオーバが起こると、接続先を新たなマスタ１０Ｂに変更する。ここで、フェイルオーバ中にクライアントが故障等により再接続を行わなかった場合について、図６を用いて説明する。図６は、死活監視システムによる新マスタへの切替処理を説明する図である。図６に例示するように、マスタ１０Ａに故障が発生してフェイルオーバでマスタが交代し、新マスタとなる（図６の（１）参照）。ここで、フェイルオーバ中にクライアント２０Ｂは、故障したため新マスタ１０Ｂと再接続を行わなかったものとし（図６の（２）参照）、クライアント２０Ａは、新マスタ１０Ｂと再接続を行ったものとする（図６の（３）参照）。
【００３９】
この場合には、新マスタ１０Ｂは、一定期間再接続のなかったセッション（この例では、故障したクライアント２０Ｂとのセッション）に関する情報を新マスタ１０Ｂの記憶部１５およびデータベース３０Ｂから削除する。つまり、セッションが切断した場合には、そのクライアントへのイベント情報の送信が不要になるため、セッションに関する情報を記憶部１５およびデータベース３０Ｂから削除する（図６の（４）参照）。
【００４０】
［死活監視システムによる処理］
次に、図７〜図１１を用いて、実施例１に係る死活監視システム１による処理を説明する。図７は、実施例１に係る死活監視システムによる正常時のイベント配送処理の流れを示すシーケンス図である。図８〜図１１は、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを示すシーケンス図である。また、図８〜図１１は、それぞれフェイルオーバの発生時が異なる。具体的には、図８の例では、イベント発生前にフェイルオーバが発生した場合を示しており、図９の例では、イベント情報送信前にフェイルオーバが発生した場合を示しており、図１０の例では、応答受信前にフェイルオーバが発生した場合を示しており、図１１の例では、応答受信後にフェイルオーバが発生した場合を示している。
【００４１】
まず、図７を用いて、実施例１に係る死活監視システムによる正常時のイベント配送処理の流れを説明する。図７に示すように、マスタ１０Ａは、イベントが発生すると（ステップＳ１０１）、イベント情報を記憶部１５およびデータベース３０Ａに登録し（ステップＳ１０２）、該イベント情報の複製をレプリカ１０Ｂ、１０Ｃに通知する（ステップＳ１０３）。レプリカ１０Ｂ、１０Ｃは、イベント情報の複製を受信すると、データベース３０Ｂ、３０Ｃにイベント情報の複製を登録し、登録を行った旨の応答をマスタ１０Ａに送信する（ステップＳ１０４）。
【００４２】
そして、マスタ１０Ａは、定期的に通信している死活監視情報にイベント情報を付加して、クライアント２０のクライアントライブラリ２１にイベント情報を送信する（ステップＳ１０５）。クライアントライブラリ２１は、イベント情報の受信を完了すると、最新送信完了イベントＩＤを用いて、イベント情報を二重に受信していないか確認する冗送確認処理を行う（ステップＳ１０６）。そして、クライアントライブラリ２１は、二重に受信していないイベント情報である場合には、イベント情報をアプリケーション２２に通知する（ステップＳ１０７）。
【００４３】
そして、クライアントライブラリ２１は、最新受信完了イベントＩＤを含むイベント受信完了応答をマスタ１０Ａに送信する（ステップＳ１０８）。続いて、マスタ１０Ａは、イベント受信完了応答を受信すると、イベント情報の送信が完了した旨の登録と最新受信完了イベントＩＤの更新とを行う（ステップＳ１０９）。その後、マスタ１０Ａは、最新受信完了イベントＩＤの複製をレプリカ１０Ｂ、１０Ｃに通知する（ステップＳ１１０）。レプリカ１０Ｂ、１０Ｃは、最新受信完了イベントＩＤの複製を受信すると、データベース３０Ｂ、３０Ｃに最新受信完了イベントＩＤを登録し、登録を行った旨の応答をマスタ１０Ａに送信する（ステップＳ１１１）。そして、マスタ１０Ａは、レプリカ１０Ｂ、１０Ｃからの応答を受信し、イベント情報を受信すべき全クライアント２０から応答が揃った場合に、送信を完了したイベント情報を削除する（ステップＳ１１２）。その後、マスタ１０Ａは、自身のデータベース３０Ａからイベント情報を削除した場合には、レプリカ１０Ｂ、１０Ｃに対してイベント情報の削除を複製させる（ステップＳ１１３）。そして、レプリカ１０Ｂ、１０Ｃは、イベント情報の削除を複製してデータベース３０Ｂ、３０Ｃからイベント情報を削除すると、削除を行った旨の応答をマスタ１０Ａに送信する（ステップＳ１１４）。
【００４４】
続いて、図８を用いて、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを説明する。図８に示すように、マスタ１０Ａは、イベントが発生すると（ステップＳ２０１）、イベント情報を記憶部１５およびデータベース３０Ａに登録し（ステップＳ２０２）、該イベント情報の複製をレプリカ１０Ｂ、１０Ｃに通知する（ステップＳ２０３）。
【００４５】
そして、マスタ１０Ａに故障が発生し（ステップＳ２０４）、フェイルオーバによりレプリカ１０Ｂを新マスタ１０Ｂに切り替える。ここで、マスタ１０Ａが故障しているため、通信ができず、レプリカ１０Ｃからの応答が失敗する（ステップＳ２０５）。また、クライアントライブラリ２１は、マスタ１０Ａとの定期通信が途絶えたことからマスタ１０Ａとの接続切断を検出すると、レプリカのどれかにマスタの問い合わせを行い（ステップＳ２０６）、新マスタ１０Ｂから新しいマスタである旨の返信を受信する（ステップＳ２０８）。そして、クライアントライブラリ２１は、新マスタ１０Ｂとの再接続を要求し（ステップＳ２０９）、新マスタ１０Ｂとのセッションを確立してマスタと再接続する（ステップＳ２１０）。また、新マスタ１０Ｂは、クライアントライブラリ２１との再接続処理と並行して、データベース３０Ｂからイベント情報を読み出し、イベント情報を復元する処理を行う（ステップＳ２０７）。
【００４６】
そして、新マスタ１０Ｂは、イベント情報のうちクライアント２０に対して送信未完了であるイベント情報を、最新受信完了イベントＩＤを用いて特定し、該送信未完了であるイベント情報をクライアント２０に送信する（ステップＳ２１１）。クライアントライブラリ２１は、イベント情報の受信を完了すると、最新送信完了イベントＩＤを用いて、イベント情報を二重に受信していないか確認する冗送確認処理を行う（ステップＳ２１２）。そして、クライアントライブラリ２１は、二重に受信していないイベント情報である場合には、イベント情報をアプリケーション２２に通知する（ステップＳ２１３）。
【００４７】
そして、クライアントライブラリ２１は、最新受信完了イベントＩＤを含むイベント受信完了応答を新マスタ１０Ｂに送信する（ステップＳ２１４）。続いて、新マスタ１０Ｂは、イベント受信完了応答を受信すると、イベント情報の送信が完了した旨の登録と最新受信完了イベントＩＤの更新とを行う（ステップＳ２１５）。その後、新マスタ１０Ｂは、最新受信完了イベントＩＤの複製をレプリカ１０Ｃに通知する（ステップＳ２１６）。レプリカ１０Ｃは、最新受信完了イベントＩＤの複製を受信すると、データベース３０Ｃに最新受信完了イベントＩＤを登録し、登録を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ２１７）。そして、新マスタ１０Ｂは、レプリカ１０Ｃからの応答を受信し、イベント情報を受信すべき全クライアント２０から応答が揃った場合に、送信を完了したイベント情報を削除する（ステップＳ２１８）。その後、新マスタ１０Ｂは、自身のデータベース３０Ｂからイベント情報を削除した場合には、レプリカ１０Ｃに対してイベント情報の削除を複製させる（ステップＳ２１９）。そして、レプリカ１０Ｃは、イベント情報の削除を複製してデータベース３０Ｃからイベント情報を削除すると、削除を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ２２０）。
【００４８】
次に、図９を用いて、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを説明する。図９に示すように、マスタ１０Ａは、イベントが発生すると（ステップＳ３０１）、イベント情報を記憶部１５およびデータベース３０Ａに登録し（ステップＳ３０２）、該イベント情報の複製をレプリカ１０Ｂ、１０Ｃに通知する（ステップＳ３０３）。レプリカ１０Ｂ、１０Ｃは、イベント情報の複製を受信すると、データベース３０Ｂ、３０Ｃにイベント情報の複製を登録し、登録を行った旨の応答をマスタ１０Ａに送信する（ステップＳ３０４）。
【００４９】
そして、マスタ１０Ａに故障が発生し（ステップＳ３０５）、イベント情報の送信が失敗すると（ステップＳ３０６）、フェイルオーバによりレプリカ１０Ｂを新マスタ１０Ｂに切り替える。続いて、新マスタ１０Ｂは、データベース３０Ｂからイベント情報を読み出し、イベント情報を復元する処理を行う（ステップＳ３０７）。ここで、クライアントライブラリ２１は、マスタ１０Ａとの定期通信が途絶えたことからマスタ１０Ａとの接続切断を検出すると、レプリカのどれかにマスタの問い合わせを行い（ステップＳ３０８）、新マスタ１０Ｂから新しいマスタである旨の返信を受信する（ステップＳ３０９）。そして、クライアントライブラリ２１は、新マスタ１０Ｂとの再接続を要求し（ステップＳ３１０）、新マスタ１０Ｂとのセッションを確立してマスタと再接続する（ステップＳ３１１）。
【００５０】
そして、新マスタ１０Ｂは、イベント情報のうちクライアント２０に対して送信未完了であるイベント情報を、最新受信完了イベントＩＤを用いて特定し、該送信未完了であるイベント情報をクライアント２０に送信する（ステップＳ３１２）。クライアントライブラリ２１は、イベント情報の受信を完了すると、最新送信完了イベントＩＤを用いて、イベント情報を二重に受信していないか確認する冗送確認処理を行う（ステップＳ３１３）。そして、クライアントライブラリ２１は、二重に受信していないイベント情報である場合には、イベント情報をアプリケーション２２に通知する（ステップＳ３１４）。
【００５１】
そして、クライアントライブラリ２１は、最新受信完了イベントＩＤを含むイベント受信完了応答を新マスタ１０Ｂに送信する（ステップＳ３１５）。続いて、新マスタ１０Ｂは、イベント受信完了応答を受信すると、イベント情報の送信が完了した旨の登録と最新受信完了イベントＩＤの更新とを行う（ステップＳ３１６）。その後、新マスタ１０Ｂは、最新受信完了イベントＩＤの複製をレプリカ１０Ｃに通知する（ステップＳ３１７）。レプリカ１０Ｃは、最新受信完了イベントＩＤの複製を受信すると、データベース３０Ｃに最新受信完了イベントＩＤを登録し、登録を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ３１８）。そして、新マスタ１０Ｂは、レプリカ１０Ｃからの応答を受信し、イベント情報を受信すべき全クライアント２０から応答が揃った場合に、送信を完了したイベント情報を削除する（ステップＳ３１９）。その後、新マスタ１０Ｂは、自身のデータベース３０Ｂからイベント情報を削除した場合には、レプリカ１０Ｃに対してイベント情報の削除を複製させる（ステップＳ３２０）。そして、レプリカ１０Ｃは、イベント情報の削除を複製してデータベース３０Ｃからイベント情報を削除すると、削除を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ３２１）。
【００５２】
次に、図１０を用いて、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを説明する。図９に示すように、マスタ１０Ａは、イベントが発生すると（ステップＳ４０１）、イベント情報を記憶部１５およびデータベース３０Ａに登録し（ステップＳ４０２）、該イベント情報の複製をレプリカ１０Ｂ、１０Ｃに通知する（ステップＳ４０３）。レプリカ１０Ｂ、１０Ｃは、イベント情報の複製を受信すると、データベース３０Ｂ、３０Ｃにイベント情報の複製を登録し、登録を行った旨の応答をマスタ１０Ａに送信する（ステップＳ４０４）。
【００５３】
そして、マスタ１０Ａは、定期的に通信している死活監視情報にイベント情報を付加して、クライアント２０のクライアントライブラリ２１にイベント情報を送信する（ステップＳ４０５）。クライアントライブラリ２１は、イベント情報の受信を完了すると、最新送信完了イベントＩＤを用いて、イベント情報を二重に受信していないか確認する冗送確認処理を行う（ステップＳ４０６）。そして、クライアントライブラリ２１は、二重に受信していないイベント情報である場合には、イベント情報をアプリケーション２２に通知する（ステップＳ４０７）。
【００５４】
そして、マスタ１０Ａに故障が発生し、フェイルオーバによりレプリカ１０Ｂを新マスタ１０Ｂに切り替える（ステップＳ４０８）。続いて、新マスタ１０Ｂは、データベース３０Ｂからイベント情報を読み出し、イベント情報を復元する処理を行う（ステップＳ４０７）。また、クライアントライブラリ２１は、マスタ１０Ａに故障が発生したため、イベント受信完了応答を旧マスタ１０Ａに送信することに失敗する（ステップＳ４１０）。ここで、クライアントライブラリ２１は、マスタ１０Ａとの定期通信が途絶えたことからマスタ１０Ａとの接続切断を検出すると、レプリカのどれかにマスタの問い合わせを行い（ステップＳ４１１）、新マスタ１０Ｂから新しいマスタである旨の返信を受信する（ステップＳ４１２）。そして、クライアントライブラリ２１は、新マスタ１０Ｂとの再接続を要求し（ステップＳ４１３）、新マスタ１０Ｂとのセッションを確立してマスタと再接続する（ステップＳ４１４）。
【００５５】
続いて、新マスタ１０Ｂは、イベント情報のうちクライアント２０に対して送信未完了であるイベント情報を、最新受信完了イベントＩＤを用いて特定し、該送信未完了であるイベント情報をクライアント２０に送信する（ステップＳ４１５）。そして、クライアントライブラリ２１は、イベント情報の受信を完了すると、最新送信完了イベントＩＤを用いて、イベント情報を二重に受信していないか確認する冗送確認処理を行う（ステップＳ４１６）。ここでは、クライアントライブラリ２１は、受信したイベント情報が、ステップＳ４０５において受信しているイベント情報であるため、イベント情報をアプリケーション２２に通知せずに、最新受信完了イベントＩＤを含むイベント受信完了応答を新マスタ１０Ｂに送信する（ステップＳ４１７）。
【００５６】
続いて、新マスタ１０Ｂは、イベント受信完了応答を受信すると、イベント情報の送信が完了した旨の登録と最新受信完了イベントＩＤの更新とを行う（ステップＳ４１８）。その後、新マスタ１０Ｂは、最新受信完了イベントＩＤの複製をレプリカ１０Ｃに通知する（ステップＳ４１９）。レプリカ１０Ｃは、最新受信完了イベントＩＤの複製を受信すると、データベース３０Ｃに最新受信完了イベントＩＤを登録し、登録を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ４２０）。そして、新マスタ１０Ｂは、レプリカ１０Ｃからの応答を受信し、イベント情報を受信すべき全クライアント２０から応答が揃った場合に、送信を完了したイベント情報を削除する（ステップＳ４２１）。その後、新マスタ１０Ｂは、自身のデータベース３０Ｂからイベント情報を削除した場合には、レプリカ１０Ｃに対してイベント情報の削除を複製させる（ステップＳ４２２）。そして、レプリカ１０Ｃは、イベント情報の削除を複製してデータベース３０Ｃからイベント情報を削除すると、削除を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ４２３）。
【００５７】
次に、図１１を用いて、実施例１に係る死活監視システムによるフェイルオーバ時のイベント配送処理の流れを説明する。図１１に示すように、マスタ１０Ａは、イベントが発生すると（ステップＳ５０１）、イベント情報を記憶部１５およびデータベース３０Ａに登録し（ステップＳ５０２）、該イベント情報の複製をレプリカ１０Ｂ、１０Ｃに通知する（ステップＳ５０３）。レプリカ１０Ｂ、１０Ｃは、イベント情報の複製を受信すると、データベース３０Ｂ、３０Ｃにイベント情報の複製を登録し、登録を行った旨の応答をマスタ１０Ａに送信する（ステップＳ５０４）。
【００５８】
そして、マスタ１０Ａは、定期的に通信している死活監視情報にイベント情報を付加して、クライアント２０のクライアントライブラリ２１にイベント情報を送信する（ステップＳ５０５）。クライアントライブラリ２１は、イベント情報の受信を完了すると、最新送信完了イベントＩＤを用いて、イベント情報を二重に受信していないか確認する冗送確認処理を行う（ステップＳ５０６）。そして、クライアントライブラリ２１は、二重に受信していないイベント情報である場合には、イベント情報をアプリケーション２２に通知する（ステップＳ５０７）。
【００５９】
そして、クライアントライブラリ２１は、最新受信完了イベントＩＤを含むイベント受信完了応答をマスタ１０Ａに送信する（ステップＳ５０８）。ここで、マスタ１０Ａに故障が発生し、フェイルオーバによりレプリカ１０Ｂを新マスタ１０Ｂに切り替える（ステップＳ５０９）。続いて、新マスタ１０Ｂは、データベース３０Ｂからイベント情報を読み出し、イベント情報を復元する処理を行う（ステップＳ５１０）。ここで、クライアントライブラリ２１は、マスタ１０Ａとの定期通信が途絶えたことからマスタ１０Ａとの接続切断を検出すると、レプリカのどれかにマスタの問い合わせを行い（ステップＳ５１１）、新マスタ１０Ｂから新しいマスタである旨の返信を受信する（ステップＳ５１２）。そして、クライアントライブラリ２１は、新マスタ１０Ｂとの再接続を要求し（ステップＳ５１３）、新マスタ１０Ｂとのセッションを確立してマスタと再接続する（ステップＳ５１４）。
【００６０】
続いて、新マスタ１０Ｂは、イベント情報のうちクライアント２０に対して送信未完了であるイベント情報を、最新受信完了イベントＩＤを用いて特定し、該送信未完了であるイベント情報をクライアント２０に送信する（ステップＳ５１５）。そして、クライアントライブラリ２１は、イベント情報の受信を完了すると、最新送信完了イベントＩＤを用いて、イベント情報を二重に受信していないか確認する冗送確認処理を行う（ステップＳ５１６）。ここでは、クライアントライブラリ２１は、受信したイベント情報が、ステップＳ５０５において受信しているイベント情報であるため、イベント情報をアプリケーション２２に通知せずに、最新受信完了イベントＩＤを含むイベント受信完了応答を新マスタ１０Ｂに送信する（ステップＳ５１７）。
【００６１】
続いて、新マスタ１０Ｂは、イベント受信完了応答を受信すると、イベント情報の送信が完了した旨の登録と最新受信完了イベントＩＤの更新とを行う（ステップＳ５１８）。その後、新マスタ１０Ｂは、最新受信完了イベントＩＤの複製をレプリカ１０Ｃに通知する（ステップＳ５１９）。レプリカ１０Ｃは、最新受信完了イベントＩＤの複製を受信すると、データベース３０Ｃに最新受信完了イベントＩＤを登録し、登録を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ５２０）。そして、新マスタ１０Ｂは、レプリカ１０Ｃからの応答を受信し、イベント情報を受信すべき全クライアント２０から応答が揃った場合に、送信を完了したイベント情報を削除する（ステップＳ５２１）。その後、新マスタ１０Ｂは、自身のデータベース３０Ｂからイベント情報を削除した場合には、レプリカ１０Ｃに対してイベント情報の削除を複製させる（ステップＳ５２２）。そして、レプリカ１０Ｃは、イベント情報の削除を複製してデータベース３０Ｃからイベント情報を削除すると、削除を行った旨の応答を新マスタ１０Ｂに送信する（ステップＳ５２３）。
【００６２】
［クライアントによる処理］
次に、図１２〜図１５を用いて、実施例１に係るクライアント２０による処理を説明する。図１２は、実施例１に係るクライアントの定期通信開始処理の処理手順を説明するためのフローチャートである。図１３は、実施例１に係るクライアントの定期通信受信処理の処理手順を説明するためのフローチャートである。図１４は、実施例１に係るクライアントのイベント処理の処理手順を説明するためのフローチャートである。図１５は、実施例１に係るクライアントの再接続処理の処理手順を説明するためのフローチャートである。
【００６３】
まず、図１２を用いてクライアントの定期通信開始処理の処理手順を説明する。図１２に示すように、クライアント２０は、全てのサーバ１０Ａ〜１０Ｅへ接続要求を行う（ステップＳ６０１）。そして、クライアント２０は、マスタ１０Ａの接続先を受信すると（ステップＳ６０２）、マスタ１０Ａへ受信完了応答を送信する（ステップＳ６０３）。
【００６４】
続いて、クライアント２０は、死活監視タイマをセットし（ステップＳ６０４）、定期通信受信処理（後に図１３を用いて詳述）を行って（ステップＳ６０５）、処理を終了する。
【００６５】
次に、図１３を用いてクライアントの定期通信受信処理の処理手順を説明する。図１３に示すように、クライアント２０は、死活監視タイムアウト前に受信したか判定する（ステップＳ７０１）。この結果、クライアント２０は、死活監視タイムアウト前に死活監視情報を受信した場合には（ステップＳ７０１肯定）、イベント処理（後に図１４を用いて詳述）を行って（ステップＳ７０２）、マスタ１０Ａへ受信完了応答を送信し（ステップＳ７０３）、死活監視タイマをリセットした後、再度セットして（ステップＳ７０４）、ステップＳ７０１に戻る。
【００６６】
また、ステップＳ７０１において、クライアント２０は、死活監視タイムアウト前に死活監視情報を受信しなかった場合には（ステップＳ７０１否定）、再接続処理（後に図１５を用いて詳述）を行って（ステップＳ７０５）、処理を終了する。
【００６７】
次に、図１４を用いてクライアントのイベント処理の処理手順を説明する。図１４に示すように、クライアント２０は、受信したイベント情報が空か否か、すなわち、死活監視情報にイベント情報が付加されているか否かを判定する（ステップＳ８０１）。この結果、クライアント２０は、受信したイベント情報が空である場合には（ステップＳ８０１肯定）、処理を終了する。一方、クライアント２０は、受信したイベント情報が空でない場合には（ステップＳ８０１否定）、アプリケーションに通知済みのイベントであるか否かを判定する（ステップＳ８０２）。
【００６８】
この結果、クライアント２０は、アプリケーションに通知済みのイベントである場合には（ステップＳ８０２肯定）、処理を終了する。一方、クライアント２０は、アプリケーション２２に通知済みのイベントでない場合には（ステップＳ８０２否定）、アプリケーション２２にイベント情報を通知して（ステップＳ８０３）、処理を終了する。
【００６９】
次に、図１５を用いてクライアントの再接続処理の処理手順を説明する。図１５に示すように、クライアント２０は、再接続タイマをセットし（ステップＳ９０１）、全てのサーバへ接続を要求する（ステップＳ９０２）。この結果、クライアント２０は、再接続タイムアウト前に再接続できたか判定する（ステップＳ９０３）。具体的には、クライアント２０は、全てのサーバへ接続を要求することで、どのサーバがマスタ１０Ａであるか特定し、そのマスタ１０Ａとのセッションを確立することが、指定した時間内に処理できたか判定する。
【００７０】
この判定の結果、クライアント２０は、再接続タイムアウト前に再接続できなかった場合には（ステップＳ９０３否定）、処理を終了する。また、クライアント２０は、再接続タイムアウト前に再接続できた場合には（ステップＳ９０３肯定）、イベント処理（図１４参照）を行い（ステップＳ９０４）、マスタ１０Ａへ受信完了応答を送信する（ステップＳ９０５）。そして、クライアント２０は、死活監視タイマをセットし（ステップＳ９０６）、定期通信受信処理（図１３参照）を行って（ステップＳ９０７）、処理を終了する。
【００７１】
［死活監視装置による処理］
次に、図１６を用いて、実施例１に係る死活監視装置１０による処理を説明する。図１６は、実施例１に係る死活監視装置１０におけるマスタ１０Ａの再接続処理の処理手順を説明するためのフローチャートである。
【００７２】
図１６に示すように、マスタ１０Ａは、イベントが発生すると、イベント情報を登録し（ステップＳ１００１）、レプリカ１０Ｂ〜１０Ｅへイベント情報の複製を通知する（ステップＳ１００２）。そして、マスタ１０Ａは、クライアント２０へイベント情報を送信し（ステップＳ１００３）、クライアントから最新受信完了イベントＩＤを含むイベント受信完了応答を受信する（ステップＳ１００４）。そして、マスタ１０Ａは、イベント受信完了応答に含まれる最新受信完了イベントＩＤを登録する（ステップＳ１００５）。
【００７３】
続いて、マスタ１０Ａは、イベント受信完了応答に含まれる最新受信完了イベントＩＤを複製して、レプリカ１０Ｂ〜１０Ｅへ通知する（ステップＳ１００６）。その後、マスタ１０Ａは、イベント情報を送信したクライアント全てから応答があったか判定する（ステップＳ１００７）。この結果、マスタ１０Ａは、イベント情報を送信したクライアント全てから応答がなかった場合（ステップＳ１００７否定）、処理を終了する。
【００７４】
また、マスタ１０Ａは、イベント情報を送信したクライアント全てから応答があった場合（ステップＳ１００７肯定）、イベント情報を削除し（ステップＳ１００８）、レプリカ１０Ｂ〜１０Ｅへイベント情報削除を複製させて（ステップＳ１００９）、処理を終了する。
【００７５】
[実施例１の効果]
上述してきたように、死活監視装置１０は、複数のサーバのうちの一つのサーバであるマスタ１０Ａのデータベース３０Ａが記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント２０に対して送信する。そして、マスタ１０Ａのデータベース３０Ａが記憶するイベント情報と、クライアント２０に対してイベント情報の送信を完了したか否かを示す情報とを、レプリカ１０Ｂ〜１０Ｅに記憶させる。そして、死活監視装置１０は、マスタに故障が発生した場合には、レプリカのなかから選択された新しいマスタ１０Ｂとクライアント２０とを通信可能に接続する。そして、新しいマスタ１０Ｂが記憶するイベント情報のうちクライアント２０に対して送信未完了であるイベント情報を特定し、該送信未完了であるイベント情報をクライアント２０に送信する。このため、死活監視装置１０は、クライアント２０側で欠送イベント情報の補完をする処理が不要であり、システム構成を複雑にすることなく、イベント情報の欠送が発生することを防止することが可能である。
【００７６】
また、実施例１によれば、死活監視装置１０は、マスタ１０Ａに故障が発生し、クライアント２０から新しいマスタ１０Ｂの問い合わせを受信した場合には、該クライアント２０に新しいマスタ１０Ｂを送信するとともに、該新しいマスタ１０Ｂとクライアント２０とを通信可能に接続する。このため、マスタ１０Ａに故障が発生した場合であっても、クライアント２０からの要求を受け付けることで、新しいマスタ１０Ｂとクライアント２０とを適切に接続することが可能である。
【００７７】
また、実施例１によれば、死活監視装置１０は、クライアント２０に対して送信した最新のイベント情報を識別する最新受信完了イベントＩＤを用いて、クライアント２０に対して送信未完了であるイベント情報を特定し、該送信未完了であるイベント情報をクライアント２０に送信する。このため、適切に送信未完了であるイベント情報を特定することが可能である。
【実施例２】
【００７８】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例２として本発明に含まれる他の実施例を説明する。
【００７９】
（１）再接続処理
上記の実施例１では、新しいマスタとクライアントとが再接続する際に、クライアントから新しいマスタへ再接続を要求する場合を説明したが、本発明はこれに限定されるものではなく、新しいマスタからクライアントへ再接続を要求するようにしてもよい。
【００８０】
ここで、新しいマスタからクライアントへ再接続を要求して再接続を行う場合について、図１７を用いて説明する。図１７は、実施例１に係る死活監視システムにおけるサーバからの再接続処理の流れを示すシーケンス図である。図１７に示すように、マスタに故障が発生し、フェイルオーバによりレプリカを新マスタに切り替える（ステップＳ１１０１）。続いて、新マスタは、データベースからイベント情報を読み出し、イベント情報を復元する処理を行う（ステップＳ１１０２）。
【００８１】
ここで、クライアントライブラリは、定期通信が行われなくなったことからマスタとの接続断を検知する（ステップＳ１１０３）。続いて、新マスタは、再接続要求をクライアントライブラリに通知し（ステップＳ１１０４）、クライアントライブラリとのセッションを復元する（ステップＳ１１０５）。その後、新マスタは、クライアントライブラリに対して定期的に死活監視情報の送信を行い（ステップＳ１１０６）、その応答を受信する（ステップＳ１１０７）。
【００８２】
このように、マスタに故障が発生した場合には、クライアントに新しいマスタとの再接続要求を通知し、該新しいマスタとクライアントとを通信可能に接続するので、クライアントと新しいマスタとを確実に接続することが可能である。
【００８３】
（２）システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、イベント送信部１１と送信未完了イベント送信部１４を統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８４】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８５】
（３）プログラム
また、上記実施形態において説明した死活監視装置１０が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、実施例１に係る死活監視装置１０が実行する処理をコンピュータが実行可能な言語で記述したイベント配送プログラムを作成することもできる。この場合、コンピュータがイベント配送プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるイベント配送プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたイベント配送プログラムをコンピュータに読み込ませて実行することにより上記第一の実施形態と同様の処理を実現してもよい。以下に、図２に示した死活監視装置１０と同様の機能を実現するイベント配送プログラムを実行するコンピュータの一例を説明する。
【００８６】
図１８は、イベント配送プログラムを実行するコンピュータ１０００を示す図である。図１８に例示するように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、ネットワークインタフェース１０７０とを有し、これらの各部はバス１０８０によって接続される。
【００８７】
メモリ１０１０は、図１８に例示するように、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、図１８に例示するように、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、図１８に例示するように、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブに挿入される。
【００８８】
ここで、図１８に例示するように、ハードディスクドライブ１０３１は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、上記のイベント配送プログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０３１に記憶される。
【００８９】
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ１０１０やハードディスクドライブ１０３１に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０３１に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出し、各手順を実行する。
【００９０】
なお、イベント配送プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０３１に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、イベント配送プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００９１】
１  死活監視システム
１０  死活監視装置
１０Ａ  マスタ
１０Ｂ〜１０Ｅ  レプリカ
１１  イベント送信部
１２  同期部
１３  接続部
１４  送信未完了イベント送信部
１５  記憶部
２０  クライアント
２１  クライアントライブラリ
２２  アプリケーション
【要約】
【課題】システム構成を複雑にすることなく、イベント情報の欠送が発生することを防止することを課題とする。
【解決手段】死活監視装置１０は、複数のサーバのうちの一つのサーバであるマスタ１０Ａのデータベースが記憶する自装置上で発生したイベントに関する情報であるイベント情報をクライアント２０に対して送信する。そして、マスタ１０Ａのデータベースが記憶するイベント情報と、クライアント２０に対してイベント情報の送信を完了したか否かを示す情報とを、レプリカ１０Ｂ〜１０Ｅに記憶させる。そして、死活監視装置１０は、マスタに故障が発生した場合には、レプリカのなかから選択された新しいマスタ１０Ｂとクライアント２０とを通信可能に接続する。そして、新しいマスタ１０Ｂが記憶するイベント情報のうちクライアント２０に対して送信未完了であるイベント情報を特定し、該送信未完了であるイベント情報をクライアント２０に送信する。
【選択図】図１【図１】
0005431551.tif 000002
【図２】
0005431551.tif 000003
【図３】
0005431551.tif 000004
【図４】
0005431551.tif 000005
【図５】
0005431551.tif 000006
【図６】
0005431551.tif 000007
【図７】
0005431551.tif 000008
【図８】
0005431551.tif 000009
【図９】
0005431551.tif 000010
【図１０】
0005431551.tif 000011
【図１１】
0005431551.tif 000012
【図１２】
0005431551.tif 000013
【図１３】
0005431551.tif 000014
【図１４】
0005431551.tif 000015
【図１５】
0005431551.tif 000016
【図１６】
0005431551.tif 000017
【図１７】
0005431551.tif 000018
【図１８】
0005431551.tif 000019