(57)【要約】【課題】分散システムにおいて、マスタサーバ上の情報とスレーブサーバ上の情報との同期を取る際の、ネットワーク帯域やマスタサーバの計算リソースの消費を低減し、マスタサーバの起動時やフェイルオーバ時等によるサービスの停止時間を低減する。【解決手段】マスタサーバは、当該マスタサーバの起動またはフェイルオーバが発生したとき、スレーブサーバ一覧管理情報に示されるスレーブサーバそれぞれからメタデータを取得し、メタデータ管理情報に格納するバックグラウンド同期処理を行う。そして、マスタサーバは、バックグラウンド同期処理中に、クライアントサーバからの要求を受信した場合、スレーブサーバ一覧管理情報を参照して、要求の対象となるメタデータがスレーブサーバ上のメタデータと同期済みでなかったとき、当該メタデータをスレーブサーバから取得してクライアントサーバからの要求に対する応答を返す。【選択図】図７
2015014929.tif 000002
【特許請求の範囲】
【請求項１】
１以上のスレーブサーバから取得した情報を記憶し、前記情報を用いてクライアント装置からの要求に対する応答を返すマスタサーバであって、
前記情報ごとに、当該情報を保持するスレーブサーバの識別情報と、当該情報が当該スレーブサーバと同期済みか否かを示す同期情報とを示した管理情報を記憶する記憶部と、
前記マスタサーバの起動またはフェイルオーバが発生したとき、前記管理情報に示されるスレーブサーバそれぞれから情報を取得し、前記管理情報に反映させるバックグラウンド同期処理を行うバックグラウンド同期部と、
前記スレーブサーバから情報が取得されたとき、前記管理情報における前記情報の同期情報を、同期済みに変更する情報管理部と、
前記バックグラウンド同期処理中に、前記クライアント装置からの要求を受信した場合において、前記管理情報を参照して、前記要求の対象となる情報が前記スレーブサーバと同期済みでなかったとき、オンデマンド同期部により前記スレーブサーバから取得された情報を用いて前記クライアント装置からの要求に対する応答を返す要求処理部と、
前記管理情報を参照して、前記クライアント装置からの要求の対象となる情報を保持するスレーブサーバから、前記情報を取得し、前記管理情報に反映させる前記オンデマンド同期部と、
を備えることを特徴とするマスタサーバ。
【請求項２】
前記オンデマンド同期部は、
前記スレーブサーバから取得した情報が、前記管理情報において当該スレーブサーバに保持される情報と異なるとき、さらに、当該スレーブサーバ以外のスレーブサーバから前記情報を取得し、前記管理情報に反映させ、
前記管理部は、
前記管理情報における当該情報を保持するスレーブサーバの識別情報に、前記オンデマンド同期部による情報の取得元のスレーブサーバの識別情報を追加することを特徴とする請求項１に記載のマスタサーバ。
【請求項３】
前記スレーブサーバから取得した情報は、前記スレーブサーバが保持するデータのバージョンを含む前記データのメタデータであることを特徴とする請求項１または請求項２に記載のマスタサーバ。
【請求項４】
前記管理情報は、前記情報ごとに、当該情報を保持するスレーブサーバの識別情報を示したデータ管理情報と、前記スレーブサーバごとに、前記情報が当該スレーブサーバと同期済みか否かを示す同期情報を示したスレーブサーバ一覧管理情報とを含んで構成されることを特徴とする請求項１ないし請求項３のいずれか１項に記載のマスタサーバ。
【請求項５】
１以上のスレーブサーバから取得した情報を記憶し、前記情報を用いてクライアント装置からの要求に対する応答を返すマスタサーバが、
前記マスタサーバの起動またはフェイルオーバが発生したとき、前記情報ごとに、当該情報を保持するスレーブサーバの識別情報と、当該情報が当該スレーブサーバと同期済みか否かを示す同期情報とを対応付けて示した管理情報を参照して、前記管理情報に示されるスレーブサーバそれぞれから情報を取得し、前記管理情報に反映させるバックグラウンド同期処理を行うステップと、
前記スレーブサーバから情報が取得されたとき、前記管理情報における前記情報に対する同期情報を、同期済みに変更するステップと、
前記バックグラウンド同期処理中に、前記クライアント装置からの要求を受信した場合において、前記管理情報を参照して、前記要求の対象となる情報が前記スレーブサーバと同期済みでなかったとき、前記スレーブサーバから、前記情報を取得し、前記管理情報に反映させるステップと、
前記取得された情報を用いて前記クライアント装置からの要求に対する応答を返すステップと
を実行することを特徴とする情報同期方法。
【請求項６】
１以上のスレーブサーバから取得した情報を記憶し、前記情報を用いてクライアント装置からの要求に対する応答を返すマスタサーバに、
前記マスタサーバの起動またはフェイルオーバが発生したとき、前記情報ごとに、当該情報を保持するスレーブサーバの識別情報と、当該情報が当該スレーブサーバと同期済みか否かを示す同期情報とを対応付けて示した管理情報を参照して、前記管理情報に示されるスレーブサーバそれぞれから情報を取得し、前記管理情報に反映させるバックグラウンド同期処理を行うステップと、
前記スレーブサーバから情報が取得されたとき、前記管理情報における前記情報に対する同期情報を、同期済みに変更するステップと、
前記バックグラウンド同期処理中に、前記クライアント装置からの要求を受信した場合において、前記管理情報を参照して、前記要求の対象となる情報が前記スレーブサーバと同期済みでなかったとき、前記スレーブサーバから、前記情報を取得し、前記管理情報に反映させるステップと、
前記取得された情報を用いて前記クライアント装置からの要求に対する応答を返すステップと
を実行させるための情報同期プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マスタサーバ、情報同期方法、および、情報同期プログラムに関する。
【背景技術】
【０００２】
マスタサーバとスレーブサーバとを備える分散システムにおいて、マスタサーバの起動時やフェイルオーバ時等、マスタサーバとスレーブサーバとが切り離される瞬間がある。このようにマスタサーバとスレーブサーバとが切り離されると、各スレーブサーバ上の情報とマスタサーバ上のメタデータに差異が生じる可能性があり、このような差異を低減するため、以下の手法が提案されている。
【０００３】
第一の手法は、スレーブサーバが定期的にスレーブサーバ上の情報をマスタサーバ群に送信しておき、マスタサーバがフェイルオーバ等で切り替わった場合や復帰した場合、改めてスレーブサーバから情報を収集し、マスタサーバ上の情報を構築する手法である（例えば非特許文献１，２参照）。
【０００４】
第二の手法は、マスタサーバとスレーブサーバとの間のエラーハンドリングを細かく制御することで、マスタサーバとスレーブサーバとの間を常に同期させる手法である。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】The  Google  File  System,  Proceedings  of  the  19th  ACM  Symposium  on  Operating  Systems  Principles,  pp.  29-43,  October,  2003
【非特許文献２】The  Hadoop  Distributed  File  System,  Proceedings  of  the  26th  IEEE  Symposium  on  Mass  Storage  Systems  and  Technologies  (MSST),  pp.1,10,  3-7  May  2010
【発明の概要】
【発明が解決しようとする課題】
【０００６】
前記した第一の手法では、スレーブサーバが定期的にスレーブサーバ上の情報をマスタサーバに送信し、マスタサーバ側では受信した情報を元に、マスタサーバ上の情報を更新する必要がある。このため、ネットワーク帯域やマスタサーバの計算リソースを消費してしまうという問題がある。この問題はスケールアウトによってスレーブサーバの台数を増加させた場合により深刻になる。
【０００７】
また、前記した第二の手法では、マスタサーバの起動時やフェイルオーバ時など、マスタサーバがスレーブサーバと同期がとれない状態になると、マスタサーバが全スレーブサーバから情報の収集を終えない限りは、マスタサーバ上の情報が構築できないため、サービスの停止時間が発生するという課題がある。この問題もまた、スレーブサーバの台数に比例して、サービスの停止時間の長期化を招く。
【０００８】
そこで、本発明は、前記した問題を解決し、マスタサーバとスレーブサーバとを備える分散システムにおいて、マスタサーバ上の情報とスレーブサーバ上の情報との同期を取る際の、ネットワーク帯域やマスタサーバの計算リソースの消費を低減し、マスタサーバの起動時やフェイルオーバ時等によるサービスの停止時間を低減する手段を提供することを課題とする。
【課題を解決するための手段】
【０００９】
前記した課題を解決するため、本発明は、１以上のスレーブサーバから取得した情報を記憶し、前記情報を用いてクライアント装置からの要求に対する応答を返すマスタサーバであって、前記情報ごとに、当該情報を保持するスレーブサーバの識別情報と、当該情報が当該スレーブサーバと同期済みか否かを示す同期情報とを示した管理情報を記憶する記憶部と、前記マスタサーバの起動またはフェイルオーバが発生したとき、前記管理情報に示されるスレーブサーバそれぞれから情報を取得し、前記管理情報に反映させるバックグラウンド同期処理を行うバックグラウンド同期部と、前記スレーブサーバから情報が取得されたとき、前記管理情報における前記情報の同期情報を、同期済みに変更する情報管理部と、前記バックグラウンド同期処理中に、前記クライアント装置からの要求を受信した場合において、前記管理情報を参照して、前記要求の対象となる情報が前記スレーブサーバと同期済みでなかったとき、オンデマンド同期部により前記スレーブサーバから取得された情報を用いて前記クライアント装置からの要求に対する応答を返す要求処理部と、前記管理情報を参照して、前記クライアント装置からの要求の対象となる情報を保持するスレーブサーバから、前記情報を取得し、前記管理情報に反映させる前記オンデマンド同期部とを備える。
【発明の効果】
【００１０】
本発明によれば、分散システムにおいて、マスタサーバ上の情報とスレーブサーバ上の情報との同期を取る際の、ネットワーク帯域やマスタサーバの計算リソースの消費を低減し、マスタサーバの起動時やフェイルオーバ時等によるサービスの停止時間を低減できる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本実施形態の分散システムの構成例を示した図である。
【図２】図２は、図１のマスタサーバの機能ブロック図である。
【図３】図３は、マスタサーバのメタデータ管理情報およびスレーブサーバ一覧管理情報を例示した図である。
【図４】図４は、スレーブサーバで保持されるメタデータ管理情報を例示した図である。
【図５】図５は、マスタサーバの処理手順を示した図である。
【図６】図６は、バックグラウンド同期処理の処理手順を示した図である。
【図７】図７は、マスタサーバの要求処理部およびオンデマンド同期部の処理手順を示した図である。
【図８】図８は、スレーブサーバ（サーバ１）〜スレーブサーバ（サーバ４）上のメタデータ管理情報の例を示した図である。
【図９】図９は、情報同期プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１２】
（全体構成）
以下、本発明を実施するための形態（実施形態）について説明する。まず、図１を用いて本実施形態の分散システムの構成例を説明する。図１は、本実施形態の分散システムの構成例を示した図である。
【００１３】
図１に示すように、分散システムは、１以上のマスタサーバ１０と１以上のスレーブサーバ２０、１以上のクライアントプロセスを含むシステムとして構成され、クライアントプロセスはスレーブサーバ２０やクライアントサーバ（クライアント装置）３０といった任意のサーバ上で実行可能なものとする。各サーバは、インターネット等のネットワークにより通信可能に接続される。各サーバの台数は、図１に例示した台数に限定されない。
【００１４】
マスタサーバ１０は記憶部１２内に、各スレーブサーバ２０の保持する情報（ここではメタデータ）の少なくとも一部のコピーを保持する。そして、マスタサーバ１０は、クライアントプロセスから要求を受け付けると、この記憶部１２のメタデータを用いて、クライアントプロセスからの要求に対する応答を返却する。
【００１５】
また、スレーブサーバ２０は、記憶部２１、データ管理部２２、要求処理部２３を備える。記憶部２１は、スレーブサーバ２０の保持するデータを記憶する。また、この記憶部２１は、データ本体のほか、当該データのメタデータ管理情報を記憶する。このスレーブサーバ２０の保持するメタデータ管理情報は、図４を用いて後記する。データ管理部２２は、記憶部２１のデータやメタデータ管理情報の読み出しや、更新等を行う。要求処理部２３は、マスタサーバ１０やクライアントプロセスからの要求に基づき、データ管理部２２経由で、記憶部２１のデータやメタデータ管理情報の内容を読み出し、送信する。
【００１６】
マスタサーバ１０やスレーブサーバ２０は分散システムの可用性や性能、スケーラビリティを高めるために２台以上で動作させることも可能であり、スレーブサーバ２０はスケールアウトによる恩恵を受けるため複数台用意し、格納するデータの複製を複数のスレーブサーバ２０（スレーブサーバ２０Ａ,２０Ｂ,…）に分散して保存してよい。
【００１７】
ここでは、分散システムが、現用系のマスタサーバ１０Ａと、待機系のマスタサーバ１０Ｂとを備える場合を例に説明する。また、マスタサーバ１０およびスレーブサーバ２０がそれぞれ、スレーブサーバ２０またはいずれかのサーバに格納される情報（データ）のメタデータを保持する場合を例に説明する。
【００１８】
このメタデータは、データ内容に関連する様々な情報であり、例えば、データのデータサイズ、バージョン、スレーブサーバ２０における当該データの格納位置（ファイルパス、FilePath）等が考えられる。なお、以下の説明においてクライアントプロセスは、クライアントサーバ３０において動作する場合を例に説明するが、これに限定されない。
【００１９】
（概要）
ここで、分散システムの動作概要を説明する。まず、マスタサーバ１０の要求処理部１３６において、クライアントサーバ３０から要求を受け付けると、データ管理部１３４経由で記憶部１２から要求の対象となるメタデータを検索し、この要求に対する応答を返却する。
【００２０】
例えば、マスタサーバ１０は、クライアントサーバ３０からの要求に示されるキーに基づきデータを保持するスレーブサーバ２０の一覧を示すメタデータを検索し、クライアントサーバ３０へ送信する。なお、このメタデータを受信したクライアントサーバ３０はメタデータに示される保持するスレーブサーバ２０の一覧に基づき、該当データを保持するスレーブサーバ２０に対しデータ要求等を行う。スレーブサーバ２０は、要求処理部１３６によりこのデータ要求を受け付けると、データ管理部１３４経由で記憶部１２からデータ要求の対象となっているデータを検索し、クライアントサーバ３０へ返す。
【００２１】
このような分散システムおいて、マスタサーバ１０がクライアントプロセスからの要求を処理するためには、マスタサーバ１０上のメタデータと各スレーブサーバ２０上のメタデータとの同期がとれている（それぞれのサーバ上のメタデータが同じである）必要がある。このため、本実施形態の分散システムは、以下の処理を行う。
【００２２】
すなわち、まず、マスタサーバ１０（１０Ａ，１０Ｂ）は、死活監視部１３１により互いの死活状態を監視し、マスタサーバ１０の起動や、障害発生によるフェイルオーバが発生したことを検知すると、バックグラウンド同期部１３２はデータ管理部１３４および要求処理部１３６経由で、各スレーブサーバ２０からメタデータを取得し、記憶部１２に格納する。つまり、マスタサーバ１０は、スレーブサーバ２０上のメタデータとの同期を取る。ここで、マスタサーバ１０の同期処理中に、マスタサーバ１０の要求処理部１３６が、クライアントサーバ３０からの要求を受信したとき、オンデマンド同期部１３３により、この要求の対象のデータのメタデータを保持するスレーブサーバ２０から当該メタデータを取得し、クライアントサーバ３０へ送信する。そして、マスタサーバ１０のオンデマンド同期部１３３は、スレーブサーバ２０から取得したメタデータを記憶部１２のメタデータに反映させる。
【００２３】
つまり、マスタサーバ１０は、自身のマスタサーバ１０の起動や、フェイルオーバが発生したことを契機として、スレーブサーバ２０上のデータ（メタデータ）との同期を取る。そして、マスタサーバ１０とスレーブサーバ２０とのメタデータ同期中にクライアントサーバ３０からの要求がきたときには、スレーブサーバ２０から該当するメタデータを取得し、クライアントサーバ３０へ送信する。このようにすることで、マスタサーバ１０は、スレーブサーバ２０上のメタデータの同期を取りつつ、クライアントサーバ３０からの要求を受信した場合にも、これに速やかに対応できる。したがって、マスタサーバ１０はスレーブサーバ２０とメタデータの同期を取りつつ、マスタサーバ１０の起動時やフェイルオーバが発生した際にもサービスの停止時間を低減することができる。
【００２４】
（マスタサーバ）
次に、図２を用いてマスタサーバ１０の構成を詳細に説明する。図２は、図１のマスタサーバの機能ブロック図である。
【００２５】
図２に示すにように、マスタサーバ１０は、通信制御部１１、記憶部１２、制御部１３を備える。
【００２６】
通信制御部１１は、ネットワーク経由で、スレーブサーバ２０やクライアントサーバ３０と通信を行うときの通信インタフェースを司る。例えば、通信制御部１１は、ネットワーク経由で、クライアントサーバ３０から受信した要求を制御部１３へ出力し、また制御部１３から出力された情報（例えば、記憶部１２から読み出されたメタデータ等）をネットワーク経由で、スレーブサーバ２０やクライアントサーバ３０へ送信する。
【００２７】
記憶部１２は、メタデータ管理情報およびスレーブサーバ一覧管理情報（管理情報）を記憶する。
【００２８】
（メタデータ管理情報）
メタデータ管理情報は、スレーブサーバ２０の保持するデータのメタデータを示した情報である。このメタデータ管理情報は、メタデータの識別情報と、メタデータ本体、そのメタデータを保持するスレーブサーバ２０の識別情報とを対応付けて示した情報である。このメタデータ管理情報を、図３を用いて説明する。図３は、マスタサーバのメタデータ管理情報およびスレーブサーバ一覧管理情報を例示した図である。
【００２９】
図３に例示するように、メタデータ管理情報は、メタデータの識別情報であるキーと、メタデータ（データのデータサイズおよびバージョン）、当該メタデータを保持するスレーブサーバ２０の識別情報（保持スレーブサーバリスト）とを対応付けて示した情報である。例えば、図３に示すメタデータ管理情報において、キー「key0」に対応するメタデータはデータサイズ「100」、バージョン「5」であり、このメタデータを保持するスレーブサーバ２０は「サーバ１、サーバ２、サーバ３」であることを示す。なお、メタデータ管理情報中、符号５０１に示す、データサイズおよびバージョンは、当該マスタサーバ１０がスレーブサーバ２０との間で同期する情報である。つまり、マスタサーバ１０は、スレーブサーバ２０との間で、メタデータにおけるデータサイズおよびバージョンの項目の情報について同期を取るようにする。
【００３０】
ここで、スレーブサーバ２０側で保持するメタデータ管理情報を説明する。図４は、スレーブサーバで保持されるメタデータ管理情報を例示した図である。例えば、図４に示すように、スレーブサーバ２０のメタデータ管理情報には、メタデータの識別情報であるキーと、メタデータ（データのデータサイズおよびバージョン、データの位置（例えば、ファイルパス））とが示される。そして、スレーブサーバ２０のメタデータ管理情報のうち、データサイズおよびバージョンの情報（符号６０１に示す情報）についてマスタサーバ１０上の情報と同期される。
【００３１】
（スレーブサーバ一覧管理情報）
図３の説明に戻る。マスタサーバ１０のスレーブサーバ一覧管理情報は、スレーブサーバ２０の識別情報ごとに、マスタサーバ１０において当該スレーブサーバ２０のメタデータが同期済みか否かを示すフラグ（同期済みフラグ）の値を示した情報である。例えば、図３に示すスレーブサーバ一覧管理情報において、スレーブサーバ２０のうち、サーバ１のメタデータは、当該マスタサーバ１０のメタデータと同期済み（True）であるが、サーバ２〜サーバ４のメタデータは、当該マスタサーバ１０上のメタデータと同期済みではないこと（False）を示す。
【００３２】
なお、このスレーブサーバ一覧管理情報における同期済みフラグ（同期情報）は、メタデータ管理情報の一部に組み込んでもよい。例えば、メタデータ管理情報の各メタデータについて、当該メタデータを保持するスレーブサーバ２０ごとに、メタデータの同期済みフラグの値を付与するようにしてもよい。
【００３３】
図２の説明に戻る。制御部１３は、死活監視部１３１、バックグラウンド同期部１３２、オンデマンド同期部１３３、データ管理部（管理部）１３４、スレーブサーバ一覧管理部１３５、要求処理部１３６を備える。
【００３４】
（死活監視部）
死活監視部１３１は、通信制御部１１経由で、冗長構成の相手方のマスタサーバ１０の死活状態を監視する。例えば、自身のマスタサーバ１０が待機系である場合において、死活監視部１３１は、現用系のマスタサーバ１０の障害等によりフェイルオーバが発生したとき、このことをバックグラウンド同期部１３２へ通知する。なお、この死活監視部１３１は、スレーブサーバ２０の死活状態を監視してもよい。また、分散システムの設計上、マスタサーバ１０において死活状態を監視する対象が無ければ、この死活監視部１３１を装備する必要はない。
【００３５】
（バックグラウンド同期部）
バックグラウンド同期部１３２は、自身のマスタサーバ１０の起動、または、死活監視部１３１からフェイルオーバの発生が通知されたとき、スレーブサーバ２０との間でバックグラウンド同期処理を行う。すなわち、バックグラウンド同期部１３２は、スレーブサーバ一覧管理情報に示されるスレーブサーバ２０のうち、メタデータの同期が済んでいないスレーブサーバ２０からメタデータを取得する。そして、バックグラウンド同期部１３２は、スレーブサーバ２０から取得したデータをメタデータ管理情報に格納し、スレーブサーバ一覧管理情報に示される、当該メタデータの取得元のスレーブサーバ２０の同期済みフラグの値を同期済み（つまり、「True」）にする。
【００３６】
具体的には、バックグラウンド同期部１３２は、自身のマスタサーバ１０の起動、または、フェイルオーバが発生したとき、スレーブサーバ一覧管理部１３５およびデータ管理部１３４経由で、記憶部１２のスレーブサーバ一覧管理情報を参照し、メタデータの同期が済んでいないスレーブサーバ２０を特定する。そして、バックグラウンド同期部１３２は、データ管理部１３４および要求処理部１３６経由で、この特定したスレーブサーバ２０から、最新のメタデータを取得し、メタデータ管理情報に格納する。また、バックグラウンド同期部１３２は、データ管理部１３４およびスレーブサーバ一覧管理部１３５経由で、スレーブサーバ一覧管理情報における当該メタデータの取得元のスレーブサーバ２０の同期済みフラグの値を同期済み（つまり、「True」）にする。
【００３７】
（オンデマンド同期部）
オンデマンド同期部１３３は、要求処理部１３６からの指示に基づき、要求処理部１３６で受信したクライアントサーバ３０からの要求を処理するのに必要なメタデータをスレーブサーバ２０から取得し、要求処理部１３６へ出力する。
【００３８】
具体的には、オンデマンド同期部１３３は、データ管理部１３４およびスレーブサーバ一覧管理部１３５経由で、スレーブサーバ一覧管理情報を参照して、クライアントサーバ３０からの要求を処理するのに必要なメタデータを保持するスレーブサーバ２０のうち、同期済みではないスレーブサーバ２０を特定する。そして、オンデマンド同期部１３３は、要求処理部１３６および通信制御部１１経由で、クライアントサーバ３０からの要求を処理するのに必要なメタデータを、前記特定したスレーブサーバ２０から取得し、要求処理部１３６へ出力する。また、オンデマンド同期部１３３は、取得したメタデータをデータ管理部１３４経由でメタデータ管理情報に格納する。また、オンデマンド同期部１３３は、データ管理部１３４およびスレーブサーバ一覧管理部１３５経由で、当該メタデータの取得元のスレーブサーバ２０に関する同期済みフラグの値を同期済み（つまり、「True」）にする。
【００３９】
（データ管理部）
データ管理部１３４は、制御部１３の各部が、記憶部１２のメタデータ管理情報やスレーブサーバ一覧管理情報の情報を読み出したり、書き込んだりするときのインタフェースを司る。
【００４０】
（スレーブサーバ一覧管理部）
スレーブサーバ一覧管理部１３５は、制御部１３の各部がスレーブサーバ一覧管理情報の情報を読み出したり、書き込んだりするときのインタフェースを司る。
【００４１】
（要求処理部）
要求処理部１３６は、通信制御部１１経由でクライアントサーバ３０やスレーブサーバ２０からの各種要求を受け付けると、その要求に対する処理結果を通信制御部１１経由で送信する。例えば、要求処理部１３６は、クライアントサーバ３０から要求を受信すると、データ管理部１３４およびスレーブサーバ一覧管理部１３５経由で、メタデータ管理情報およびスレーブサーバ一覧管理情報を参照し、この受信した要求を処理するために必要なメタデータを保持するスレーブサーバ２０について同期済みフラグが設定されているか否かを確認する。ここで、当該メタデータについて同期済みフラグが設定されていれば、要求処理部１３６は、メタデータ管理情報に格納されるメタデータを用いて、クライアントサーバ３０からの要求を処理し、応答を返却する。
【００４２】
一方、当該メタデータについて同期済みフラグが設定されていなければ、要求処理部１３６は、オンデマンド同期部１３３に、当該メタデータを保持するスレーブサーバ２０から当該メタデータを取得させる。そして、要求処理部１３６は、スレーブサーバ２０から取得されたメタデータを用いて、クライアントサーバ３０からの要求を処理し、応答を返却する。
【００４３】
（処理手順）
次に、図５を用いてマスタサーバ１０の処理手順を説明する。図５は、マスタサーバの処理手順を示した図である。
【００４４】
（バックグラウンド同期処理開始まで）
マスタサーバ１０は、死活監視部１３１により、マスタサーバ１０の起動や、マスタサーバ１０のフェイルオーバの発生を検知すると（Ｓ２０１でＹｅｓ）、マスタサーバ１０は、当該マスタサーバ１０上のメタデータのうち、スレーブサーバ２０との同期が取れていない部分に関して、同期済みフラグに「False」を設定する（Ｓ２０２）。
【００４５】
つまり、マスタサーバ１０は、メタデータ管理情報に格納されるメタデータのうち、同期が済んでいないと推測されるメタデータの範囲を特定し、スレーブサーバ一覧管理情報における、当該範囲のメタデータを保持するスレーブサーバ２０の同期済みフラグに「False（同期済みではない）」を設定する。なお、同期が済んでいないと推測されるメタデータの範囲は、例えば、マスタサーバ１０が保持する分散システムに関する様々な情報を参照して特定される。
【００４６】
Ｓ２０２の後、マスタサーバ１０はバックグラウンド同期部１３２により、バックグラウンド同期処理を開始する（Ｓ２０３）。なお、マスタサーバ１０がマスタサーバ１０の起動や、マスタサーバ１０のフェイルオーバの発生を検知しない場合（Ｓ２０１でＮｏ）、Ｓ２０１へ戻る。
【００４７】
（バックグラウンド同期処理）
次に、図６を用いてバックグラウンド同期部１３２によるバックグラウンド同期処理を説明する。図６は、バックグラウンド同期処理の処理手順を示した図である。図５のＳ２０３により、バックグラウンド同期処理が開始されると、バックグラウンド同期部１３２は、スレーブサーバ一覧管理部１３５およびデータ管理部１３４経由で、スレーブサーバ一覧管理情報を参照し、マスタサーバ１０上のメタデータと同期済みではないスレーブサーバ２０の一覧を取得し、リストに格納する（Ｓ３０１）。
【００４８】
そして、バックグラウンド同期部１３２は、リストが空になるまで（Ｓ３０２でＹｅｓ）、Ｓ３０３〜Ｓ３０５の処理を実行する。
【００４９】
すなわち、バックグラウンド同期部１３２は、リストがまだ空でなければ（Ｓ３０２のＮｏ）、リストよりスレーブサーバ２０をＮ個取り出し、Ｎ個のスレーブサーバ２０に対して最新のメタデータを取得する（Ｓ３０３）。つまり、バックグラウンド同期部１３２は、データ管理部１３４および要求処理部１３６経由で、Ｎ個のスレーブサーバ２０から最新のメタデータを取得する。
【００５０】
Ｓ３０３の後、バックグラウンド同期部１３２は、取得したスレーブサーバ２０上のメタデータを、マスタサーバ１０上のメタデータに反映する（Ｓ３０４）。つまり、バックグラウンド同期部１３２は、スレーブサーバ２０から取得したメタデータで、メタデータ管理情報を更新する。これにより、マスタサーバ１０のメタデータ管理情報上のメタデータは最新のメタデータになる。
【００５１】
Ｓ３０４の後、バックグラウンド同期部１３２は、スレーブサーバ一覧管理情報における、Ｓ３０３で取得したメタデータに関する同期済みフラグに「True」を設定する（Ｓ３０５）。つまり、バックグラウンド同期部１３２は、スレーブサーバ一覧管理部１３５およびデータ管理部１３４経由で、スレーブサーバ一覧管理情報における当該メタデータの取得元のスレーブサーバ２０の同期済みフラグの値を「True（同期済み）」にする。
【００５２】
そして、Ｓ３０５の後、Ｓ３０２へ戻り、リストが空になったら（Ｓ３０２でＹｅｓ）、マスタサーバ１０は、バックグラウンド同期処理を終了し、リストが空になっていなければ（Ｓ３０２でＮｏ）、Ｓ３０３〜Ｓ３０５の処理を繰り返す。バックグラウンド同期部１３２が以上の処理を行うことで、スレーブサーバ一覧管理情報におけるすべてのスレーブサーバ２０の同期済みフラグの値が同期済み（「True」）になる。そして、バックグラウンド同期部１３２はバックグラウンド同期処理を終了する。
【００５３】
（オンデマンド同期処理）
次に、図７を用いて、マスタサーバ１０の要求処理部１３６およびオンデマンド同期部１３３の処理手順を説明する。図７は、マスタサーバの要求処理部およびオンデマンド同期部の処理手順を示した図である。
【００５４】
マスタサーバ１０の要求処理部１３６は、クライアントサーバ３０からの要求を受信すると（Ｓ４００）、バックグラウンド同期部１３２においてバックグラウンド同期処理を実行中か否かを確認する（Ｓ４０１）。ここで、バックグラウンド同期処理を実行中でなければ（Ｓ４０１でＮｏ）、Ｓ４０２をスキップし、要求処理部１３６はクライアントサーバ３０からの要求を処理し、応答を返却する（Ｓ４０７）。例えば、要求処理部１３６は、データ管理部１３４経由でメタデータ管理情報からクライアントサーバ３０からの要求に対応するメタデータを読み出し、この読み出したメタデータをクライアントサーバ３０への応答として送信する。そして、処理を終了する。
【００５５】
一方、Ｓ４０１においてバックグラウンド同期処理を実行中であれば（Ｓ４０１でＹｅｓ）、要求処理部１３６は、メタデータ管理情報およびスレーブサーバ一覧管理情報を参照して、クライアントサーバ３０から受信した要求を処理するのに必要なメタデータの同期済みフラグに「False（同期済みではない）」が設定されているか否かを判断する（Ｓ４０２）。つまり、要求処理部１３６は、データ管理部１３４経由で、メタデータ管理情報を参照し、クライアントサーバ３０から受信した要求を処理するのに必要なメタデータを保持するスレーブサーバ２０を特定する。そして、要求処理部１３６は、データ管理部１３４およびスレーブサーバ一覧管理部１３５経由でスレーブサーバ一覧管理情報を参照し、この特定したスレーブサーバ２０の同期済みフラグに「False（同期済みではない）」が設定されているか否かを判断する。
【００５６】
Ｓ４０２で、クライアントサーバ３０から受信した要求を処理するのに必要なメタデータの同期済みフラグに「False（同期済みではない）」が設定されていないとき（Ｓ４０２でＮｏ）、Ｓ４０７へ進む。
【００５７】
一方、クライアントサーバ３０から受信した要求を処理するのに必要なメタデータの同期済みフラグに「False（同期済みではない）」が設定されているとき（Ｓ４０２でＹｅｓ）、Ｓ４０３へ進み、オンデマンド同期部１３３にオンデマンド同期処理を実行させる。
【００５８】
オンデマンド同期部１３３は、クライアントサーバ３０から受信した要求を処理するのに必要なメタデータを同期するために問い合わせる必要のあるスレーブサーバ２０の一覧を取得する（Ｓ４０３）。つまり、オンデマンド同期部１３３は、スレーブサーバ一覧管理情報において、クライアントサーバ３０から受信した要求を処理するのに必要なメタデータの同期済みフラグに「False（同期済みではない）」が設定されているスレーブサーバ２０の一覧を取得する。
【００５９】
Ｓ４０３の後、オンデマンド同期部１３３は要求処理部１３６経由で、Ｓ４０３で取得したスレーブサーバ２０の一覧に示されるスレーブサーバ２０それぞれから当該メタデータの最新版を取得し、マスタサーバ１０上のメタデータに反映する（Ｓ４０４）。つまり、オンデマンド同期部１３３は、同期済みではないスレーブサーバ２０それぞれから最新のメタデータを取得し、データ管理部１３４経由で、メタデータ管理情報のメタデータに反映させる。
【００６０】
Ｓ４０４の後、オンデマンド同期部１３３は、Ｓ４０４でメタデータ管理情報へメタデータを反映した結果、マスタ（マスタサーバ１０）上のメタデータが更新されたか否かを判断する（Ｓ４０５）。つまり、オンデマンド同期部１３３は、メタデータ管理情報へメタデータを反映させた結果、当該メタデータが変更されたか否かを判断する。ここで、マスタサーバ１０上のメタデータが更新されていない場合（Ｓ４０５でＮｏ）、Ｓ４０７へ進む。
【００６１】
一方、Ｓ４０５においてオンデマンド同期部１３３が、メタデータ管理情報へメタデータを反映させた結果、当該メタデータが更新された場合（Ｓ４０５でＹｅｓ）、Ｓ４０３でメタデータを取得していなかったスレーブサーバ２０からも、当該メタデータの最新版を取得し、マスタサーバ１０上のメタデータに反映する（Ｓ４０６）。
【００６２】
つまり、Ｓ４０６において、オンデマンド同期部１３３は、要求処理部１３６経由で、Ｓ４０３でメタデータを取得したスレーブサーバ２０以外のスレーブサーバ２０であって、スレーブサーバ一覧管理情報において同期済みフラグが「False(同期済みではない)」であるスレーブサーバ２０に対して、当該メタデータの取得要求を行う。そして、Ｓ４０３でメタデータを取得したスレーブサーバ２０以外のスレーブサーバ２０が当該メタデータの最新版を保持していた場合、オンデマンド同期部１３３は取得したメタデータの最新版を、データ管理部１３４経由でメタデータ管理情報に反映させる。
【００６３】
また、Ｓ４０６において、オンデマンド同期部１３３はデータ管理部１３４経由で、このメタデータの最新版を保持しているスレーブサーバ２０の識別情報を、当該メタデータの保持スレーブサーバリストに追加する。そして、Ｓ４０７へ進む。
【００６４】
このようにすることで、マスタサーバ１０は、バックグラウンド同期処理中に、クライアントサーバ３０からの要求を受け付けたときも、この要求を処理し、応答を返却することができる。また、マスタサーバ１０は、スレーブサーバ２０からメタデータを取得した結果、このメタデータが、メタデータ管理情報に格納されるメタデータとは異なるものであった場合、当該メタデータを保持する他のすべてのスレーブサーバ２０からも当該メタデータを取得する。つまり、いずれかのスレーブサーバ２０においてメタデータが更新されていた場合、他のスレーブサーバ２０においても当該メタデータが更新されている可能性があるので、マスタサーバ１０は、この他のスレーブサーバ２０からも当該メタデータ（つまり最新版のメタデータ）を取得する。これにより、マスタサーバ１０はメタデータ管理情報上に記載される情報を最新のものに同期することができる。
【００６５】
（オンデマンド同期処理の例）
次に、図３、図７、図８を用いてオンデマンド同期処理の例を説明する。図８は、スレーブサーバ（サーバ１）〜スレーブサーバ（サーバ４）上のメタデータ管理情報の例を示した図である。
【００６６】
ここでは、マスタサーバ１０においてフェイルオーバ発生後、バックグラウンド同期処理を開始し、「サーバ１」のスレーブサーバ２０とのバックグラウンド同期処理を完了した状態であるものとする。このときのマスタサーバ１０におけるメタデータ管理情報およびスレーブサーバ一覧管理情報は、図３に示した状態であるものとする。すなわち、スレーブサーバ一覧管理情報において、「サーバ１」の同期済みフラグは「True（同期済み）」が設定されているものとする。
【００６７】
この状態においてマスタサーバ１０の要求処理部１３６が、クライアントサーバ３０から、キー「key1」を含む要求を受信した場合を考える。この場合、図３に示すように、メタデータ管理情報における「key1」を保持するスレーブサーバ２０は「サーバ２、サーバ３、サーバ４」であり、スレーブサーバ一覧管理情報における「サーバ２、サーバ３、サーバ４」の同期済みフラグには「False（同期済みではない）」が設定されている。つまり、受信した要求を処理するのに必要なメタデータの同期済みフラグに「False（同期済みではない）」が設定されている（図７のＳ４０２でＹｅｓ）。よって、マスタサーバ１０の要求処理部１３６は、Ｓ４０３以降のオンデマンド同期部１３３によるオンデマンド同期処理を実行させる。
【００６８】
Ｓ４０３で、オンデマンド同期部１３３は、スレーブサーバ２０の一覧として「サーバ２、サーバ３、サーバ４」を取得する。そして、Ｓ４０４でオンデマンド同期部１３３は、この「サーバ２、サーバ３、サーバ４」の各スレーブサーバ２０から「key1」に関する最新のメタデータを取得する。
【００６９】
例えば、図８に示すサーバ１〜サーバ４のスレーブサーバ２０のメタデータ管理情報における「key1」に関するメタデータは、データサイズ「200」、バージョン「5」で、マスタサーバ１０上のメタデータ（図３参照）と差異がない。よって、Ｓ４０４の結果、マスタサーバ１０のメタデータ管理情報上のメタデータは更新されない。つまり、Ｓ４０５でＮｏとなる。その後、Ｓ４０７へと進み、マスタサーバ１０はクライアントサーバ３０からの要求を処理する。
【００７０】
一方、マスタサーバ１０の要求処理部１３６が、クライアントサーバ３０から受信した要求が「key2」を含む場合でも同様にＳ４０４まで進む。
【００７１】
ただし、「key2」の場合、各スレーブサーバ２０のメタデータ管理情報における「key2」に関するメタデータは、図７に示すとおりバージョン「5」であり、また、マスタサーバ１０のメタデータ管理情報における「key2」に関するメタデータは、図３に示すとおりバージョン「4」である。よって、Ｓ４０４にてマスタサーバ上のメタデータは更新されるので、Ｓ４０５でＹｅｓとなる。従って、図３に示すメタデータ管理情報における「保持スレーブサーバリスト」に含まれていないスレーブサーバ２０が当該メタデータを保持している可能性が生じる。
【００７２】
よって、マスタサーバ１０のオンデマンド同期部１３３はＳ４０６にて、メタデータ管理情報における当該メタデータの「保持スレーブサーバリスト」に含まれていないスレーブサーバ２０であって、スレーブサーバ一覧管理情報における同期済みフラグが「False（同期済みではない）」であるスレーブサーバ２０（例えば、「サーバ２」）から当該メタデータの最新版を取得する。そして、マスタサーバ１０は、Ｓ４０７の処理を実行する。
【００７３】
もし、分散システムの仕様上、マスタサーバ１０上のメタデータとスレーブサーバ２０上のメタデータに差異が発生しても、マスタサーバ１０上のメタデータに記録されている「保持スレーブサーバリスト」に含まれていないスレーブサーバ２０が当該メタデータを保持する可能性がない場合は、Ｓ４０５、Ｓ４０６の処理をスキップしてもよい。
【００７４】
なお、メタデータ管理情報に、メタデータごとに当該メタデータを保持するスレーブサーバ２０に関する同期済みフラグの値が保持される場合、マスタサーバ１０は以下の処理を行う。例えば、図６のＳ３０４で、マスタサーバ１０のバックグラウンド同期部１３２が、スレーブサーバ２０から取得したメタデータをメタデータ管理情報に反映した後、前記した図６のＳ３０５において、データ管理部１３４経由で、メタデータ管理情報における当該メタデータの取得元のスレーブサーバ２０に関する同期済みフラグに「True（同期済み）」を設定する。また、オンデマンド同期部１３３は、前記した図７のＳ４０６によりメタデータを取得し、メタデータ管理情報に反映した後、データ管理部１３４経由で、メタデータ管理情報における当該メタデータの取得元のスレーブサーバ２０に関する同期済みフラグに「True（同期済み）」を設定する。その後、Ｓ４０７へ進む。
【００７５】
（プログラム）
また、上記実施形態に係るマスタサーバ１０、スレーブサーバ２０、クライアントサーバ３０が実行する処理をコンピュータが実行可能な言語で記述した情報同期プログラムを作成することもできる。この場合、コンピュータが情報同期プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。
【００７６】
図９は、情報同期プログラムを実行するコンピュータを示す図である。図９に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００７７】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）などのブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスクなどの着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００７８】
ここで、図９に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。上記実施形態で説明した各テーブルは、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００７９】
また、情報同期プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。例えば、上記実施形態で説明したマスタサーバ１０の制御部１３の実行する各ステップが記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。
【００８０】
また、情報同期プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００８１】
なお、情報同期プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００などを介してＣＰＵ１０２０によって読み出されてもよい。あるいは、情報同期プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）などのネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００８２】
１０    マスタサーバ
１１    通信制御部
１２    記憶部
１３    制御部
２０    スレーブサーバ
３０    クライアントサーバ
１３１  死活監視部
１３２  バックグラウンド同期部
１３３  オンデマンド同期部
１３４  データ管理部
１３５  スレーブサーバ一覧管理部
１３６  要求処理部
【図１】
2015014929.tif 000003
【図２】
2015014929.tif 000004
【図３】
2015014929.tif 000005
【図４】
2015014929.tif 000006
【図５】
2015014929.tif 000007
【図６】
2015014929.tif 000008
【図７】
2015014929.tif 000009
【図８】
2015014929.tif 000010
【図９】
2015014929.tif 000011