(57)【特許請求の範囲】
【請求項１】
少なくとも一つのマスターサーバと複数のスレーブサーバとがネットワークを介して接続されたシステムにおいて、
前記マスターサーバは、
第１のデータ格納手段と、
クライアントからのデータ更新要求に応答して前記第１のデータ格納手段に格納されたデータの更新を行うとともに更新されたデータを送信する送信手段と、
前記複数のサーバのうちの過半数の台数のサーバからコピー成功応答が返って来たことを確認したとき、前記クライアントにコピー成功応答を返す応答手段と
を備え、
前記スレーブサーバのそれぞれは、
第２のデータ格納手段と、
前記マスターサーバから送信される前記更新されたデータにより前記第２のデータ格納手段のデータを更新し、更新が成功した場合には前記コピー成功応答を前記マスターサーバに返す更新手段と、
全サーバのうちの半数以上の台数のサーバが最新のデータを保有するとき前記ネットワークに障害が発生し該ネットワークが少なくとも２つのサーバグループに分断された場合に、自サーバが前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属しているときには、自サーバが属している前記サーバグループ内の全サーバ内の前記データ格納手段に格納されたデータのうちで最も新しいデータを自サーバのデータとして保持する復旧手段と
を備えることを特徴とするデータ整合システム。
【請求項２】
前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属する前記サーバのうちの少なくとも１つを予め定めた規則に従って選択し、選択されたサーバを新たなマスターサーバとすることを特徴とする請求項１に記載のデータ整合システム。
【請求項３】
前記マスターサーバの前記送信手段は、同じ前記更新されたデータを複数回連続して前記サーバに送信することを特徴とする請求項１または２に記載のデータ整合システム。
【請求項４】
少なくとも一つのマスターサーバと複数のスレーブサーバとがネットワークを介して接続されたシステムにおいて、
前記マスターサーバが、クライアントからのデータ更新要求に応答して第１のデータ格納手段に格納されたデータの更新を行うとともに更新されたデータを送信する送信ステップと、
前記マスターサーバが、前記複数のサーバのうちの過半数の台数のサーバからコピー成功応答が返って来たことを確認したとき、前記クライアントにコピー成功応答を返す応答ステップと、
前記スレーブサーバのそれぞれが、前記マスターサーバから送信される前記更新されたデータにより第２のデータ格納手段のデータを更新し、更新が成功した場合には前記コピー成功応答を前記マスターサーバに返す更新ステップと、
前記スレーブサーバのそれぞれが、全サーバのうちの半数以上の台数のサーバが最新のデータを保有するとき前記ネットワークに障害が発生し該ネットワークが少なくとも２つのサーバグループに分断された場合に、自サーバが前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属しているときには、自サーバが属している前記サーバグループ内の全サーバ内の前記データ格納手段に格納されたデータのうちで最も新しいデータを自サーバのデータとして保持する復旧ステップと
を含むことを特徴とするデータ整合方法。
【請求項５】
前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属する前記サーバのうちの少なくとも１つを予め定めた規則に従って選択し、選択されたサーバを新たなマスターサーバとすることを特徴とする請求項４に記載のデータ整合方法。
【請求項６】
少なくとも一つのマスターサーバと複数のスレーブサーバとがネットワークを介して接続されたシステムにおいて、
前記マスターサーバに、
クライアントからのデータ更新要求に応答して第１のデータ格納手段に格納されたデータの更新を行うとともに更新されたデータを送信する送信処理と、
前記複数のサーバのうちの過半数の台数のサーバからコピー成功応答が返って来たことを確認したとき、前記クライアントにコピー成功応答を返す応答処理と
を実行させ、
前記スレーブサーバのそれぞれに、
前記マスターサーバから送信される前記更新されたデータにより第２のデータ格納手段のデータを更新し、更新が成功した場合には前記コピー成功応答を前記マスターサーバに返す更新処理と、
全サーバのうちの半数以上の台数のサーバが最新のデータを保有するとき前記ネットワークに障害が発生し該ネットワークが少なくとも２つのサーバグループに分断された場合に、自サーバが前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属しているときには、自サーバが属している前記サーバグループ内の全サーバ内の前記データ格納手段に格納されたデータのうちで最も新しいデータを自サーバのデータとして保持する復旧処理と
を実行させることを特徴とするデータ整合プログラム。
【請求項７】
前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属する前記サーバのうちの少なくとも１つを予め定めた規則に従って選択し、選択されたサーバを新たなマスターサーバとすることを特徴とする請求項６に記載のデータ整合プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ整合システム、データ整合方法およびデータ整合プログラムに関し、特に、マスタースレーブレプリケションを行うデータベースシステムにおけるデータ整合システム、データ整合方法およびデータ整合プログラムに関する。
【背景技術】
【０００２】
マスターサーバのデータをスレーブサーバにコピーして、データの同期をとるデータベースレプリケーションにおいて、マスターサーバと複数のスレーブサーバとを繋ぐネットワークに障害が発生すると、スレーブサーバへのコピーに失敗し、データの同期がとれなくなる。
【０００３】
このような障害が発生した場合に、スレーブサーバの一つを新マスターサーバとして昇格させる方法があるが、その場合に、何の根拠もなく昇格させるスレーブサーバを選んでしまうと、最新データを持っていないスレーブサーバを新しいマスターサーバとして選択してしまう可能性がある。
【０００４】
特許文献１に、ネットワーク障害前にシステムを構成していたサーバ（マスターサーバとスレーブサーバ）のうち過半数のサーバがネットワーク障害後にも繋がっている場合に、繋がっているサーバの中で最新のデータを持っているサーバを新しいマスターサーバとして決定するデータ管理システムが記載されている。
【０００５】
特許文献１について、図１１を参照して、マスターサーバＭと４台のスレーブサーバＳ１、Ｓ２、Ｓ３およびＳ４との計５台のサーバが、ネットワーク障害の発生により、サーバＭおよびＳ１と、サーバＳ２、Ｓ３およびＳ４との２つのグループに分断されてしまった場合を考える（以下、すべての図において、データ番号は、データの更新世代を示し、データ番号の数が大きいほど新しいデータであるとする）。図１１では、最新データ番号は３である。
【０００６】
しかし、右側のサーバグループ（Ｓ２、Ｓ３およびＳ４）を新たな運用グループとして選択した場合、サーバＳ２、Ｓ３およびＳ４の中での最新データ番号は２となる。
【０００７】
これら３台のサーバを使用してネットワークを再構築して、これら３台のサーバのうちで最新データであるデータ番号が２のデータを持つサーバＳ３をマスターサーバに昇格させて運用を継続すると、本来の最新データであるデータ番号３（障害発生前のマスターサーバが記憶していた最新データ番号）のデータが抜け落ち、あるクライアントがすでに処理成功と判断済みのデータ番号３のデータが再構築後のシステムに反映されないため、クライアント間でのデータの整合性に矛盾が生じて正常な処理を継続することができない。
【０００８】
すなわち、ネットワーク障害後に運用継続グループとして使用することに決定したサーバ群の中で、最も新しいデータを持っているサーバを新たなマスターサーバとして選んだとしても、そのマスターサーバが障害発生前のシステム全体の最新データを持っていなければ正常な処理を続行できないのである。
【０００９】
このような事態を防ぐためには、システムの運用を一旦停止させ、システム管理者がシステム全体のデータの更新状況等を確認するといったような作業が必要となるが、それではシステムが一旦停止してから運用再開するまでに時間がかかってしまう。
【００１０】
そこで、ネットワーク障害が発生したとしても、運用停止時間を可能な限り短く、また、残存サーバで最新データを用いた運用を継続する方法が望まれている。
【００１１】
また、特許文献２には、スプリットブレイン状況発生時の継続使用するサーバ群の決定方法について、障害前のサーバ台数の過半数が繋がっていること、および、サーバごとの履歴情報によりサーバグループを選択することが記載されている。ここで、サーバごとの履歴情報とは、サーバグループに合流した日時の情報、そのグループは使用サーバのグループか否かの情報およびサーバがマスターかスレーブかの情報を含む。
【００１２】
特許文献３には、マスターサーバとスレーブサーバとのデータベースを等価にするシステムが記載されている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１０−２７７４６７号公報
【特許文献２】特開２０１０−１８６４７２号公報
【特許文献３】特開２００８−２７６５５３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
特許文献１に記載のデータ管理システムでは、上述したように、新しいマスターサーバが障害発生前のシステム全体での最新データを持っていることを保障できないという問題点がある。
【００１５】
特許文献２では、スレーブサーバにマスターサーバのデータがコピーされている前提で記述されており、スレーブサーバのデータが最新でない場合について考慮されていない。
【００１６】
また、特許文献３記載のシステムでは、マスターサーバのデータ更新をスレーブサーバへ反映する処理が非同期に行われており、スレーブサーバへの更新データの反映前にネットワーク障害が発生した場合にはデータ不整合が発生するという問題点がある。
【００１７】
本発明の目的は、上述した問題点を解決するデータ整合システム、データ整合方法およびデータ整合プログラムを提供することにある。
【課題を解決するための手段】
【００１８】
本発明のデータ整合システムは、ネットワークに接続された複数のサーバを含むシステムにおいて、前記複数のサーバのそれぞれは、データを格納するデータ格納手段と、前記ネットワークに障害が発生し該ネットワークが少なくとも２つのサーバグループに分断された場合に、自サーバが前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属しているときには、自サーバが属している前記サーバグループ内の全サーバ内の前記データ格納手段に格納されたデータのうちで最も新しいデータを自サーバのデータとして保持する復旧手段とを備え、前記ネットワーク障害発生後は、前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループによりシステムの運用を継続する。
【００１９】
本発明のデータ整合方法は、ネットワークに接続された複数のサーバを含むシステムにおいて、
前記複数のサーバのそれぞれが、前記ネットワークに障害が発生し該ネットワークが少なくとも２つのサーバグループに分断された場合に、自サーバが前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属しているときには、自サーバが属している前記サーバグループ内の全サーバ内のデータのうちで最も新しいデータを自サーバのデータとして保持する復旧ステップを含み、前記ネットワーク障害発生後は、前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループによりシステムの運用を継続する。
【００２０】
本発明のデータ整合プログラムは、ネットワークに接続された複数のサーバを含むシステムにおいて、前記複数のサーバのそれぞれに、前記ネットワークに障害が発生し該ネットワークが少なくとも２つのサーバグループに分断された場合に、自サーバが前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループに属しているときには、自サーバが属している前記サーバグループ内の全サーバ内のデータのうちで最も新しいデータを自サーバのデータとして保持する復旧処理を実行させ、前記ネットワーク障害発生後は、前記ネットワーク障害発生前の全サーバ台数の半数以上の台数のサーバからなる前記サーバグループによりシステムの運用を継続させる。
【発明の効果】
【００２１】
以上、本発明には、マスターサーバおよびスレーブサーバから構成されるシステムにおけるサーバ間のデータの整合性を保障できるという効果がある。
【図面の簡単な説明】
【００２２】
【図１】本発明の第１の実施形態のブロック図である。
【図２】本発明の第１の実施形態におけるクライアントを示すブロック図である。
【図３】本発明の第１の実施形態におけるマスターサーバおよびスレーブサーバを示すブロック図である。
【図４】本発明の第１の実施形態における更新処理の正常時のフローを示す図である。
【図５】本発明の第１の実施形態における更新処理の異常時のパターン１のフローを示す図である。
【図６】本発明の第１の実施形態における更新処理の異常時のパターン２のフローを示す図である。
【図７】本発明の第１の実施形態における障害時の動作説明をするためのブロック図である。
【図８】本発明の第２の実施形態のブロック図である。
【図９】本発明の第２の実施形態におけるマスターサーバおよびスレーブサーバを示すブロック図である。
【図１０】本発明の第２の実施形態における更新処理の正常時のフローを示す図である。
【図１１】特許文献１に記載の発明を説明するためのブロック図である。
【発明を実施するための形態】
【００２３】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００２４】
図１は本発明の第１の実施形態を示すブロック図である。
【００２５】
図１において、本実施形態は、１つのマスターサーバ２０１と、複数のスレーブサーバ２０２と、複数のクライアント１００とから構成され、これらの構成要素によりデータベースシステムが構成されている。
【００２６】
マスターサーバ２０１とスレーブサーバ２０２とは、ネットワークで繋がっている。また、クライアント１００は、マスターサーバ２０１とスレーブサーバ２０２とが繋がっているネットワークとは別のネットワークで、マスターサーバ２０１およびスレーブサーバ２０２に繋がっている。
【００２７】
クライアント１００は、マスターサーバ２０１またはスレーブサーバ２０２にアクセス要求を行う。
【００２８】
クライアント１００は、図２に示すように、サーバ２０１または２０２に要求する処理の種類（更新または参照）および要求処理の宛先サーバ情報を格納する要求処理情報格納部１０１と、マスターサーバ２０１からエラー応答を受けたときに別サーバにリトライするためのタイマーを格納する再送時間情報格納部１０２を持つ。
【００２９】
マスターサーバ２０１は、クライアント１００からのデータの更新または参照要求を受け、更新要求を受けた場合には更新処理したデータを保持する。
【００３０】
スレーブサーバ２０２は、クライアント１００から参照要求のみ受け付け、マスターサーバ２０１の保持するデータのコピーを保持する。
【００３１】
クライアント１００は、アクセスするサーバ（マスターサーバ２０１またはスレーブサーバ２０２）を決定して、アクセスする。アクセスするサーバを決定する方法は、例えば、あらかじめ決めた順番に使用する、あるいは、ランダムに使用する等がある。
【００３２】
マスターサーバ２０１およびすべてのスレーブサーバ２０２は、図３に示すように、クライアント１００からの要求を処理する要求処理部２１０と、最新データを持つサーバ台数を計算する台数演算部２２０と、ネットワーク障害を検知する障害検知部２３０と、ネットワーク障害発生時に運用継続グループを探し、新しいマスターサーバ２０１を選択し、運用継続グループの他のサーバに最新データをコピーする障害復旧部２４０と、最新データを持つサーバ台数情報、自サーバと繋がっているサーバ台数情報および自サーバと繋がっているサーバの過半数台数情報を格納する台数情報格納部２５０と、データコピー送信先のスレーブサーバ情報を格納するスレーブ情報格納部２６０と、マスターサーバ２０１からスレーブサーバ２０２への再送間隔および再送回数を格納する再送制御情報格納部２７０と、クライアント１００が更新または参照するデータおよびデータ番号を格納するデータ格納部２８０とを持つ。
【００３３】
図１に示す第１の実施形態は、マスターサーバ２０１が１台とスレーブサーバ２０２が３台の合計４台で構成されている。
【００３４】
すべてのサーバ（マスターサーバ２０１およびすべてのスレーブサーバ２０２）は、運用開始時に自分と繋がっているサーバの台数（自分も含めた台数）を自サーバと繋がっているサーバ台数情報として台数情報格納部２５０に格納する。さらに、すべてのサーバは、「（自分と繋がっているサーバの台数）／２＋１」（小数点以下は切り捨て）で過半数（以下「ｂｏｒｄｅｒ」とする）を計算し、自サーバと繋がっているサーバの過半数台数情報として台数情報格納部２５０に格納する。
【００３５】
マスターサーバ２０１はクライアント１００からのデータの更新要求を要求処理部２１０で処理し、各スレーブサーバ２０２に更新したデータの差分情報をコピーする。ここで、更新したデータの差分情報とは、該当する更新要求で処理したデータの更新後の値および更新世代を示すデータ番号である。
【００３６】
マスターサーバ２０１は、データの差分情報を元に、各スレーブサーバ２０２へのコピーを実行し、その結果、最新データを持つ（すなわち、上記コピーが成功した）サーバ台数が、自サーバと繋がっているサーバの過半数以上であればコピー成功応答をクライアント１００に返却する。逆に、過半数より少なければ、マスターサーバ２０１はコピー失敗応答をクライアント１００に返却する。
【００３７】
次に、図４を参照してマスターサーバＭの動作を詳細に説明する。
【００３８】
マスターサーバＭは、クライアントＣｌからデータの更新処理要求を受けて、初めに、最新データを持っているサーバ台数（以下、「Ｓ＿ｃｏｕｎｔ」）を初期化（０に設定）する。次に、マスターサーバＭは、マスターサーバＭのデータ格納部２８０内の、クライアントからの上記更新要求のあったデータを更新し、Ｓ＿ｃｏｕｎｔに１加算する。
【００３９】
次に、マスターサーバＭは、すべてのスレーブサーバＳ１〜Ｓ３に更新したデータの差分情報を送信する。
【００４０】
マスターサーバＭからデータ差分情報を受け取った各スレーブサーバＳ１〜Ｓ３は、データ差分情報をデータ格納部２８０のデータに反映し、コピー完了後、コピー成功応答（「コピー成功通知」とも言う。）をマスターサーバMに返却する。
【００４１】
マスターサーバＭは、複数のスレーブサーバＳ１〜Ｓ３のそれぞれからコピー成功応答を受け取る度にＳ＿ｃｏｕｎｔに１を加算していく。マスターサーバＭは、スレーブサーバＳ１〜Ｓ３からコピー成功応答を受け取ることで、マスターサーバＭとスレーブサーバＳ１〜Ｓ３との有するデータを同期するとともに、スレーブサーバＳ１〜Ｓ３に障害が発生していないことを監視している。
【００４２】
マスターサーバＭは、すべてのスレーブサーバＳ１〜Ｓ３から応答を受け取った後、Ｓ＿ｃｏｕｎｔの値とｂｏｒｄｅｒの値との大小関係を調べ、Ｓ＿ｃｏｕｎｔの値がｂｏｒｄｅｒの値以上（すなわち、データベースシステム構成台数の過半数以上のサーバにデータがコピーされた）ならば、クライアントＣｌにコピー成功応答を返却する。
【００４３】
図４では、すべてのスレーブサーバＳ１〜Ｓ３からコピー成功応答を受け取っているため、Ｓ＿ｃｏｕｎｔ＝４、ｂｏｒｄｅｒ＝３となる。この結果、Ｓ＿ｃｏｕｎｔ≧ｂｏｒｄｅｒとなり、データベースシステム構成台数の過半数以上のサーバが最新データを持つことを確認できるため、マスターサーバＭはクライアントＣｌにコピー成功応答を返す。
【００４４】
次に、コピー通信中のデータ消失、ディスク破壊等で、スレーブサーバへのデータコピーが失敗した場合について、図５を参照して説明する。
【００４５】
マスターサーバＭは、クライアントＣｌからデータの更新処理要求を受けて、初めに、最新データを持っているサーバ台数（以下、「Ｓ＿ｃｏｕｎｔ」）を初期化（０に設定）する。次に、マスターサーバＭは、マスターサーバＭのデータ格納部２８０内の、クライアントからの上記更新要求のあったデータを更新し、Ｓ＿ｃｏｕｎｔに１加算する。
【００４６】
次に、マスターサーバＭは、すべてのスレーブサーバＳ１〜Ｓ３に更新したデータの差分情報を送信する。
【００４７】
マスターサーバＭは、スレーブサーバＳ１およびＳ２からはコピー成功応答を受け取っている。しかし、スレーブサーバＳ３からのコピー成功応答が一定時間（再送制御情報格納部２７０に格納した再送間隔）を超えても返ってこないため、マスターサーバＭは、スレーブサーバＳ３へデータ差分情報の再送を行う。
【００４８】
図５では、その１回目の再送の応答として、スレーブサーバＳ３からマスターサーバＭにコピー失敗応答（「コピー失敗通知」とも言う。）が返ってきている。マスターサーバＭは、コピー失敗応答を受け取ると、スレーブサーバＳ３にデータ差分情報を再度送信する。
【００４９】
図５では、その２回目の再送に対する応答もコピー失敗応答が返ってきている。再送制御情報格納部２７０に再送回数を２回と設定していた場合、マスターサーバＭは、３回目の再送処理を行わず、スレーブサーバＳ３をデータベースシステムから論理的に切り離す。マスターサーバＭは、データ破壊が起きている可能性があるスレーブサーバＳ３を切り離した後、Ｓ＿ｃｏｕｎｔの値とｂｏｒｄｅｒの値との大小関係を比較する。
【００５０】
本例では、Ｓ＿ｃｏｕｎｔ＝３、ｂｏｒｄｅｒ＝３となる。この場合、Ｓ＿ｃｏｕｎｔ≧ｂｏｒｄｅｒの条件を満たすため、マスターサーバＭは、クライアントＣｌにコピー成功応答を返す。スレーブサーバＳ３を切り離した事でシステムの構成台数が１台減ったため、マスターサーバＭは、ｂｏｒｄｅｒの値を再計算し、ｂｏｒｄｅｒ＝２に再設定する。
【００５１】
最後に、図６を参照して、マスターサーバＭがクライアントＣｌにコピー失敗応答を返すときの動きを説明する。今回の例では、再送回数は２回と設定している。
【００５２】
マスターサーバＭは、クライアントＣｌからデータの更新処理要求を受けて、初めに、最新データを持っているサーバ台数（以下、「Ｓ＿ｃｏｕｎｔ」）を初期化（０に設定）する。次に、マスターサーバＭは、マスターサーバＭのデータ格納部２８０内の、クライアントからの上記更新要求のあったデータを更新し、Ｓ＿ｃｏｕｎｔに１加算する。
【００５３】
次に、マスターサーバＭは、すべてのスレーブサーバＳ１〜Ｓ３に更新したデータの差分情報を送信する。
【００５４】
その結果、マスターサーバＭは、スレーブサーバＳ１からのコピー成功応答を受け取っているが、スレーブサーバＳ２およびＳ３のいずれからもコピー成功応答は受け取っていない。
【００５５】
具体的に、まず、スレーブサーバＳ２の動作について説明する。マスターサーバＭは、スレーブサーバＳ２から何も応答が返らず、あらかじめ設定しておいた再送間隔を過ぎると、データ差分情報をスレーブサーバＳ２に再送する。それでも応答が返ってこないため、マスターサーバＭは、もう一度再送しているが、スレーブサーバＳ２からは何も応答が返ってこない。再送回数は２回と設定されているため、マスターサーバＭは、３回目の再送を行わずに、スレーブサーバＳ２をデータベースシステムから論理的に切り離す。
【００５６】
次に、スレーブサーバＳ３の動作について具体的に説明する。スレーブサーバＳ３からはコピー失敗応答がマスターサーバＭに返ってきている。マスターサーバＭは、コピー失敗応答を受け取ると、データ差分情報を再送する。
【００５７】
図６では、この再送に対してもコピー失敗応答がマスターサーバＭに返ってきている。再送回数は２回と設定されているため、マスターサーバＭは、２回目の再送に対する応答にもコピー成功応答が返ってこない場合には、３回目の再送を行わずにスレーブサーバＳ３をデータベースシステムから論理的に切り離す。
【００５８】
この結果、図６では、Ｓ＿ｃｏｕｎｔ＝２、ｂｏｒｄｅｒ＝３となる。この結果、Ｓ＿ｃｏｕｎｔ＜ｂｏｒｄｅｒとなり、Ｓ＿ｃｏｕｎｔ≧ｂｏｒｄｅｒの条件を満たさないため、すなわち、データベースシステム構成台数の過半数以上のサーバに最新データがコピーされていないため、最終的に、マスターサーバＭはクライアントＣｌにコピー失敗応答を返す。スレーブサーバＳ２およびＳ３を切り離した事で、システムの構成台数が２台減ったため、マスターサーバＭは、ｂｏｒｄｅｒの値を再計算し、ｂｏｒｄｅｒ＝２に再設定する。
【００５９】
図６の例では、再送回数を２回と設定したが、再送回数は任意である。また、再送を行わないことも可能である。
【００６０】
マスターサーバＭは、クライアントＣｌに返す応答を決めた後に、ｂｏｒｄｅｒの値の再計算をする。ｂｏｒｄｅｒの値の再計算により、図６のようにスレーブサーバの切り離しを行った後のデータベースシステム構成台数に基づいた過半数台数がｂｏｒｄｅｒに設定される。この処理により、クライアントＣｌから次の更新要求が行われた際にも、図４、５および６を参照して説明した処理を有効に行うことが可能になる。
【００６１】
以上の動作により、クライアント１００がコピー成功応答を受け取っているのであれば、過半数以上のサーバに最新かつ正しいデータがコピーされていることが保証される。したがって、ネットワーク障害によりサーバ群が分断された場合や、マスターサーバ２０１に障害が発生した場合でも、障害後に半数と繋がっているサーバが存在するならば、その半数と繋がっているサーバを含むサーバ群の中に、少なくとも１台は、最新かつ正しいデータを持つサーバが含まれることが言える。
【００６２】
以上のように、過半数のサーバに最新のデータが保有されていることが保障されたデータベースシステムにおいて、ネットワーク障害が発生した場合について、以下に説明する。
【００６３】
例えば、図７に示すように、サーバが４台の構成で運用しているデータベースシステムでネットワーク障害が発生したとする。
【００６４】
図７は、クライアントからマスターサーバへの更新要求の処理中にネットワーク障害が発生し、そのネットワーク障害により、マスターサーバＭおよびスレーブサーバＳ１からなるグループと、スレーブサーバＳ２およびＳ３からなるグループとに分断された様子を示している。
【００６５】
ここで、データ番号は更新世代を示し、その値が大きいほど新しいデータであることを示している。
【００６６】
図７では、マスターサーバＭと、スレーブサーバＳ２およびＳ３とが最新のデータ番号３のデータを保有し、スレーブサーバＳ１は最新データのコピー前に発生したネットワーク障害により、最新のデータ番号３のデータより古いデータ番号２のデータまでしか保有していないとする。この状態では、３台のサーバが最新のデータを保有しており、データベースシステムを構成する全サーバ台数（４台）のうちの過半数の台数のサーバが最新のデータを保有している。
【００６７】
ネットワーク障害は、各サーバ（マスターサーバおよびスレーブサーバ）が検出する。各サーバは
ネットワーク障害検出後、自分とつながっているサーバ台数を確認し、自分が障害前の全サーバ台数の半数以上の台数のサーバとつながっていることが分かった場合、自分が運用継続グループに属することになることを知る。
【００６８】
運用継続グループに属することを知った各サーバは、そのグループ内の他の全てのサーバに当該他の全てサーバが持つデータ番号を問い合わせ、自分の持つデータ番号と当該他の全てサーバが持つデータ番号とを比較し、自分の持つデータ番号が他の全てのサーバのそれよりも新しい場合には、何もせず、一方、自分の持つデータ番号より新しいデータ番号を持つ他のサーバのうちで最も新しいデータ番号を持つ他のサーバからそのデータ番号のデータを取得する。この結果、運用継続グループに属する全てのサーバが最新のデータ番号のデータを持つことになる。
【００６９】
その後、運用継続グループの中でマスターサーバとなるサーバを選択することになるが、どのサーバを選択するかは、様々な方法が考えられ、例えば、最初に障害を検出したサーバを選択したりする方法や、予め全てのサーバに優先順位を設定しておき、運用継続グループ内のサーバの中で一番優先順位の高いサーバを選択する方法などが考えられる。
【００７０】
また、図７のようにちょうど半数の２台ずつの２グループに分かれている場合に、どちらのグループを運用継続グループとして選ぶかは様々な方法が考えられるが、ここでは、障害前のマスターサーバＭがいる方を優先する方法で運用継続グループを選択している。
【００７１】
すると、運用継続グループとして、マスターサーバＭおよびスレーブサーバＳ１からなるグループが選ばれることになる。マスターサーバＭとスレーブサーバＳ１は、保持データのデータ番号を比較し、マスターサーバＭが保有する最新のデータのデータ番号は３であり、スレーブサーバＳ１のそれは２であるため、データ番号３のデータが本運用継続グループの最新データとして選択される。
【００７２】
その後、最新データであるデータ番号３を保有するマスターサーバＭから、スレーブサーバＳ１はデータ番号３のデータを取得してコピーし、サーバＭおよびＳ１によりデータベースシステムの運用が継続される。
【００７３】
データ番号は、わかりやすく説明するため、ここでは単に数字を使用したが、データの更新世代を一意に示すことができれば、データ更新時間やトランザクション番号等でも問題ない。
【００７４】
上記の例において、もし、最新データを持っているサーバが、例えば、サーバＭではなく、サーバＳ１であったとすると、最新データをマスターサーバＭにコピーした後、サーバＳ１が新マスターサーバに昇格し、運用を継続するようにしても良い。すなわち、新しいマスターサーバの選択方法は、障害前のマスターサーバを優先して使用する方法や、最新データを持っているスレーブサーバの中から予め定めた規則に従って選択する方法など、特に限定はない。
【００７５】
以上、説明したように、本実施形態には、ネットワーク障害発生時において、マスターサーバおよび複数のスレーブサーバから構成されるシステムにおけるサーバ間のデータの整合性を保障できるという効果がある。
【００７６】
図８は本発明の第２の実施形態を示すブロック図である。
【００７７】
本実施形態は、１台のマスターサーバＭと２台のスレーブサーバＳ１およびＳ２との合計３台のサーバで構成されている。
【００７８】
本実施形態のサーバ（マスターサーバＭおよびスレーブサーバＳ１およびＳ２）について、図９を参照して説明する。
【００７９】
本実施形態は、図９に示すように、第１の実施形態のサーバの構成に、送信制御情報格納部２９０を追加したものであり、クライアント１００の動作は第１の実施形態と同様であり説明は省略する。送信制御情報格納部２９０には、送信したデータのデータ番号、スレーブサーバごとのコピー完了通知受け取り済みフラグおよび同じデータを一度に送る送信回数を格納する。
【００８０】
本実施形態は、データの冗長性をより高めるために、マスターサーバはスレーブサーバからの応答を待たずに一度に同じコピーを常に送る。図８では、マスターサーバ１台、スレーブサーバ２台の３台構成だが、サーバの台数は任意の数だけ存在してよい。また、アクセスするクライアントも任意の数だけ存在して良い。
【００８１】
図１０を参照して図８のマスターサーバＭの動作を詳細に説明する。
【００８２】
マスターサーバＭは、クライアントＣｌから更新処理要求を受けて、最新データを持っているサーバ台数（以下「Ｓ＿ｃｏｕｎｔ」）およびスレーブサーバごとのコピー完了通知受け取り済みフラグ（以下「Ｓ１フラグ」、「Ｓ２フラグ」）を初期化する。マスターサーバＭは、マスターサーバＭのデータ格納部２８０のデータを更新し、Ｓ＿ｃｏｕｎｔに１を加算する。
【００８３】
次に、マスターサーバＭは、すべてのスレーブサーバＳ１およびＳ２に、送信制御情報格納部２９０内に格納された、同じデータを一度に送る送信回数(ここでは２回)ずつ、更新したデータの更新差分情報であるデータ差分情報を送信する。
【００８４】
マスターサーバＭからデータ差分情報を受け取ったスレーブサーバＳ１およびＳ２は、データ差分情報をデータ格納部２８０にコピーして反映し、コピー完了後、コピー成功応答をマスターサーバＭに返却する。
【００８５】
より具体的に説明すると、スレーブサーバＳ１は、マスターサーバＭから最初に送付された１回目のデータ差分情報によりコピーを実施し、マスターサーバＭに１回目のコピー成功応答を返す。なお、サーバＳ１が、２回目のデータ差分情報（１回目と同じデータ差分情報）を受け取った際は、すでにコピー完了済みでコピーは不要のため、コピーを実施しないでマスターサーバＭに２回目のコピー完了応答を返す。
【００８６】
マスターサーバＭは、送信したデータ差分情報に対応するスレーブサーバＳ１からの１回目のコピー成功応答を受け取ったとき、既にコピー成功応答を受け取っているか否かを示すＳ１フラグを確認する。
【００８７】
このときは、まだ、Ｓ１フラグが立っていないため、マスターサーバＭは、Ｓ１フラグを立てるとともに、Ｓ＿ｃｏｕｎｔの値に１を加算する。
【００８８】
マスターサーバＭは、送信した２回目のデータ差分情報（１回目と同じデータ差分情報）に対応するスレーブサーバＳ１からの２回目のコピー成功応答を受け取ったとき、Ｓ１フラグを再度確認する。このときには、既にＳ１フラグがたっているため、マスターサーバＭはＳ＿ｃｏｕｎｔの値の更新を行わない。
【００８９】
同様のやりとりがマスターサーバＭとスレーブサーバＳ２との間でも行われる。
【００９０】
その後、マスターサーバＭからクライアントＣｌにコピー成功応答が返される。
【００９１】
第２の実施形態により、マスターサーバは、スレーブサーバに一度に複数回データを送ることが可能となり、冗長性が高められる。例えば、マスターサーバが常に２回スレーブサーバに同じデータを送る事で、仮に一つが何らかの障害でスレーブサーバに届かなかった場合でも、もう片方がスレーブサーバに届き、障害の影響を受けずに運用が継続可能である。
【００９２】
以上、説明したように、本実施形態には、第１の実施形態のマスターサーバおよびスレーブサーバから構成されるシステムにおけるサーバ間のデータの整合性を保障できるという効果に加え、第１の実施形態よりも耐障害性を向上できるという効果もある。
【００９３】
また、本発明は１組のマスタースレーブ関係に閉じた内容であり、データベースシステム上にマスターとスレーブのグループが複数存在しても、それぞれのマスタースレーブに適用可能である。
【００９４】
なお、第１および第２の実施形態において、クライアント、マスターサーバおよびスレーブサーバは専用のハードウェアで実現しても良いし、一般のコンピュータで実現してもよい。
【００９５】
さらに、クライアントはマスターサーバ２０１およびスレーブサーバ２０２と同じハードウェア上で実現しても良い。
【符号の説明】
【００９６】
１００    クライアント
１０１    要求処理情報格納部
１０２    再送時間情報格納部
２００    サーバ
２０１    マスターサーバ
２０２    スレーブサーバ
２１０    要求処理部
２２０    台数演算部
２３０    障害検知部
２４０    障害復旧部
２５０    台数情報格納部
２６０    スレーブ情報格納部
２７０    再送制御情報格納部
２８０    データ格納部
２９０    送信制御情報格納部
【図１】
0005900094.tif 000002
【図２】
0005900094.tif 000003
【図３】
0005900094.tif 000004
【図４】
0005900094.tif 000005
【図５】
0005900094.tif 000006
【図６】
0005900094.tif 000007
【図７】
0005900094.tif 000008
【図８】
0005900094.tif 000009
【図９】
0005900094.tif 000010
【図１０】
0005900094.tif 000011
【図１１】
0005900094.tif 000012