(57)【要約】【課題】スプリットブレインの防止と多重故障発生時における可用性の確保とを両立させる。【解決手段】相互に通信可能なＮ個（Ｎは４以上の整数）のコンピュータ（処理要素）のうちの少なくともＱ個（Ｑは定足数）のコンピュータの動作を同期化させることができるときに限り、当該少なくともＱ個のコンピュータによって多重化処理が実行される分散システムにおいて、再起動されたコンピュータは、上記Ｎ個のコンピュータのうちの既に同期化されている少なくともＦ＋１台（Ｆ＝Ｎ−Ｑ）のコンピュータと通信ができるか判定する（ステップＳ１１，Ｓ１２）。もし、通信可能であるならば、再起動されたコンピュータは、このＦ＋１台のコンピュータがそれぞれ保持している実行状態のうちの最新の実行状態に、自身の処理の実行状態を再同期化する（ステップＳ１５）。【選択図】      図１
2005258946.tif 000002
【特許請求の範囲】
【請求項１】
相互に通信可能なＮ個の処理要素（Ｎは４以上の整数）のうちの少なくともＱ個（Ｑは定足数）の処理要素の動作を同期化させることができるときに限り、当該少なくともＱ個の処理要素によって多重化処理が実行される定足数多重化方式を適用した分散システムにおいて、
前記Ｎ個の処理要素の各々は、
再起動時に、前記Ｎ個の処理要素のうちの既に同期化されている少なくともＦ＋１個（Ｆ＝Ｎ−Ｑ）の処理要素と通信ができる場合に、自身の処理の実行状態を前記分散システム内の最新の実行状態に再同期化することが可能であると判定する再同期化判定手段と、
前記再同期化手段の判定結果に応じて、前記少なくともＦ＋１個の処理要素の各々の実行状態のうちの最新の実行状態に、自身の処理の実行状態を再同期化する再同期化手段と
を具備することを特徴とする分散システム。
【請求項２】
前記Ｎ個の処理要素の各々は、自身の処理の最新の実行状態を保持する実行状態記憶手段を更に具備し、
前記再同期化手段は、前記少なくともＦ＋１個の処理要素のうち前記分散システム内で最新の実行状態を保持している処理要素から自身の前記実行状態記憶手段に当該最新の実行状態をコピーすることにより前記再同期化を実行する
ことを特徴とする請求項１記載の分散システム。
【請求項３】
前記Ｎ個の処理要素の各々は、当該処理要素における処理の進行状況の指標となる進行状況情報を保持する進行状況情報保持手段を更に具備し、
前記再同期化手段は、前記少なくともＦ＋１個の処理要素の前記進行状況情報保持手段に保持されている進行状況情報から、前記分散システム内で最新の実行状態を保持している処理要素を検出する
ことを特徴とする請求項１記載の分散システム。
【請求項４】
前記進行状況情報保持手段は、対応する前記処理装置での処理が進む毎にインクリメントされる順序番号を前記進行状況情報として保持し、
前記再同期化手段は、前記少なくともＦ＋１個の処理要素の前記進行状況情報保持手段に前記進行状況情報として保持されている前記順序番号を比較し、最も値の大きい順序番号を保持する前記進行状況情報保持手段を持つ処理要素を、前記分散システム内で最新の実行状態を保持している処理要素として検出する
ことを特徴とする請求項３記載の分散システム。
【請求項５】
前記Ｑが、前記Ｎの２／３を超える最小の整数に一致する２／３定足数であることを特徴とする請求項１記載の分散システム。
【請求項６】
相互に通信可能なＮ個の処理要素（Ｎは４以上の整数）のうちの少なくともＱ個（Ｑは定足数）の処理要素の動作を同期化させることができるときに限り、当該少なくともＱ個の処理要素によって多重化処理が実行される定足数多重化方式を適用した分散システムにおいて、処理を多重化するための多重化制御方法であって、
前記処理要素の再起動時に、当該再起動された処理要素が前記Ｎ個の処理要素のうちの既に同期化されている少なくともＦ＋１個（Ｆ＝Ｎ−Ｑ）の処理要素と通信が可能であるかを判定するステップと、
前記少なくともＦ＋１個の処理要素と通信が可能な場合、当該少なくともＦ＋１個の処理要素の中から、前記分散システム内で最新の実行状態を保持している処理要素を前記再起動された処理要素が検出するステップと、
検出された処理要素の実行状態に、前記再起動された処理要素の実行状態を再同期化するステップと
を具備することを特徴とする多重化制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク接続されたコンピュータに代表される、相互に通信可能なＮ個（Ｎは４以上の整数）の処理要素によって処理が多重化される分散システム及び多重化制御方法に関する。
【背景技術】
【０００２】
近年、コンピュータ技術やネットワーク技術の向上は目覚ましく、これに伴って、業務のコンピュータ処理化が広く行われている。しかし、業務の内容によっては、コンピュータの故障などによる中断が許されないものも多い。そこで最近では、複数のコンピュータをネットワークで結合した分散システムを構築することが一般的になりつつある。また、１つのコンピュータ上で並列に動作する、相互に通信が可能な複数の処理要素（処理実行単位）を用いて構築される分散システムも知られている。この処理要素としては、例えばオペレーティングシステム（ＯＳ）上で動作し、共通のインタフェースを介してメッセージまたはパケットを授受することにより相互に通信を行うプロセスが知られている。ここでは、複数のコンピュータをネットワークで結合した分散システムを例に説明する。
【０００３】
分散システムの運用手法の１つとして、コンピュータの処理の多重化が知られている。分散システムでは、各コンピュータが独立に故障する可能性がある。仮に、１つのコンピュータが故障しただけでシステム全体が機能しないシステムでは、システムの稼働率は、１台のコンピュータの稼働率よりも低くなってしまう。かかる事態を防止するために、システム全体に係わる処理は多重化することが必要である。逆に、多重化することによって、分散システムの稼働率を１台のコンピュータの稼働率よりも高くすることが可能である。例えば、稼働率９９パーセントのコンピュータ１０台で構成する分散システムが、全く多重化されていないとすると、その分散システムの稼働率は９０％程度である。もし、これが多重化によって３台の故障まで耐え得るとすると、稼働率は、９９．９９９８％程度となる。
【０００４】
［フェイルオーバ方式］
分散システムにおいて、コンピュータの処理を多重化する方式として、コンピュータの故障を検出したら、別のコンピュータでその処理を引き継ぐ方式が従来から知られている。この方式をフェイルオーバ方式と呼ぶ。
【０００５】
フェイルオーバ方式では、コンピュータの故障を検出するのに、コンピュータ間で定期的に通信し合い、お互いの動作状況を確認し合う方法が一般的に行われている。この通信のことを「ハートビート」と呼ぶ。コンピュータの故障停止は、ハートビートのタイムアウトによって検出される。つまり一定時間ハートビートが送出されていないコンピュータは故障停止したものとみなされる。
【０００６】
フェイルオーバ方式を適用する分散システムにおいては、スプリットブレインの発生が問題となる。スプリットブレインとは、実行のコンテキスト（状態）が２つ以上に分かれてしまうことを指す。スプリットブレインは、故障検出が誤って行われたときに発生する。例えば、分散システムを構成するコンピュータが、２つのコンピュータグループの間で互いに通信できない状態となった場合（network partitioning: ネットワーク分割）、両コンピュータグループは、互いに相手の故障を検出する。この場合、両コンピュータグループは独立して動作を始めることから、スプリットブレインに陥る。或いは、異常な高負荷のために、あるコンピュータのハートビートの送信が一時的に中断して故障が検出され、その後、そのコンピュータが動作を再開した後も、スプリットブレインに陥る可能性がある。
【０００７】
多重化された処理は、一般に分散システムの中で重要な処理である。そのため、スプリットブレインが起きると、その処理に一貫性がなくなり、システム全体に致命的な影響を及ぼす。
【０００８】
［多数決方式］
フェイルオーバ方式でのスプリットブレインの問題を根源的に解決するための方式として、多数決を用いた方式（多数決方式）が知られている。この方式は、多重化した全てのコンピュータで同一の処理を実行し、全体の過半数（majority）を占めるコンピュータの動作を一致（同期化）させることができるならば、他のコンピュータの動作に関係なく、処理を継続するものである。この方式では、スプリットブレインを原理的に回避できる。
【０００９】
例えば、３台のコンピュータＸ，Ｙ，Ｚで処理を多重化（３重化）している場合で、２台のコンピュータＸ，ＹのグループＡと、１台のコンピュータＺのグループＢにネットワーク分割となったものとする。この場合でも、グループＡでの処理は動き続ける。これに対し、グループＢでの処理は中断する。ここでの中断とは、自身を含めて動作を一致させることができるコンピュータの数が過半数となるまで、処理を先に進めない状態をいう。
【００１０】
また、コンピュータＺが異常な高負荷でハングアップしたものとすると、残りの過半数を占めるコンピュータグループ（ここではグループＡ）での処理は、当該コンピュータＺに関係なく継続される。コンピュータＺが回復したとき、当該コンピュータＺでの処理は、過半数を構成できないため勝手に実行されることはない。つまりコンピュータＺは、他の過半数を占めるコンピュータグループの処理に再同期化した後に、動作を再開する。
【００１１】
［定足数方式］
上記多数決方式は、定足数方式の１つである。定足数方式とは、多重化した全てのコンピュータで同一の処理を実行し、定足数（quorum:クォーラム）を占めるコンピュータの動作を一致させることができるならば、他のコンピュータの動作に関係なく、処理を継続するものである。特許文献１及び２には、定足数方式を適用する分散システムが記載されている。特許文献１には、定足数を全体の過半数（つまり１／２を超える数）とする多数決方式の例が示されている。この特許文献１には、多数決をする（つまりクォーラムグループを構成する）サーバ（コンピュータ）の数がＮの場合に、そのＮのうちの定足数（過半数）を満足する数のサーバが動作していれば、Ｎの数を動的に変更できる分散システムが示されている。一方、特許文献２には、定足数を全体の２／３を超える最小の整数とする２／３定足数方式の例が示されている。２／３定足数方式は冗長性がより高い多重化方式といえる。
【特許文献１】特開２００１−１１７８９５（段落０００７、段落００１８乃至００２２、図１乃至図５）
【特許文献２】特開２００３−６７２１５（段落００５６乃至００６４、図４）
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上記したように、定足数方式では、フェイルオーバ方式とは異なって、スプリットブレインの発生を原理的に回避できる。しかし、定足数方式には、フェイルオーバ方式にはない別の問題がある。この問題について説明する。
【００１３】
まず、分散システムにおいて、複数のコンピュータが故障した場合、即ち多重故障が発生した場合、フェイルオーバ方式では、１台のコンピュータが動作していれば、処理を続行できる。これに対して、定足数方式では、常に定足数を満たす数のコンピュータが動作し続けていないといけない。もし、動作しているコンピュータの数が一旦定足数未満になってしまうと、その時点で動作していたコンピュータは処理を続行できなくなる。この場合、システムは停止するのが一般的である。
【００１４】
これに対し、動作しているコンピュータの数が定足数未満になった場合に、システムを停止させる代わりに、その時点で動作していたコンピュータの処理を一時中断させることが考えられる。更に、故障したコンピュータが故障から回復して再起動（リブート）した段階で、その再起動したコンピュータを残りのコンピュータの処理に再同期化して、処理を自動的に再開することが考えられる。しかし、この手法は採用はできない。なぜなら、時間軸方向でのスプリットブレインを招く可能性があるからである。時間軸方向のスプリットブレインとは、多重化された処理がある時点に巻き戻り、もう一度処理が実行された場合に、外部との入出力の過程で不整合が発生するタイプのスプリットブレインを指す。
【００１５】
この時間軸方向のスプリットブレインについて、７台のコンピュータ＃１〜＃７によって処理が多重化された２／３定足数方式を適用する分散システムを例に、図５を参照して説明する。この場合、定足数は５である。まず、コンピュータ＃１〜＃７が処理Ｐ１，Ｐ２，Ｐ３を実行し終えた時点Ｔ１で、２台のコンピュータ＃１，＃２と５台のコンピュータ＃３〜＃７との間で通信が行えなくなったものとする。即ち、２台のコンピュータ＃１，＃２から構成されるコンピュータグループＡと５台のコンピュータ＃３〜＃７から構成されるコンピュータグループＢとに、ネットワーク分割したとする。
【００１６】
この場合、定足数を満たすグループＢのコンピュータ＃３〜＃７は処理を継続する。これに対し、定足数に満たないグループＡのコンピュータ＃１，＃２は処理を一時中断する。やがて、グループＢの５台のコンピュータ＃３〜＃７が処理Ｐ３に後続する処理Ｐ４，Ｐ５，Ｐ６を実行し終えた時点Ｔ２で、当該コンピュータ＃３〜＃７がいずれも故障する多重故障が発生したものとする。そして、時点Ｔ３で、グループＢのコンピュータ＃３〜＃７がいずれも再起動して、ネットワーク分割も解消したとする。
【００１７】
そこで、再起動したグループＢのコンピュータ＃３〜＃７を、グループＡのコンピュータ＃１，＃２に再同期化する。このとき、グループＡのコンピュータ＃１，＃２は、時点Ｔ１の状態、つまり処理Ｐ３を実行し終えた状態で処理を中断している。したがって、７台のコンピュータ＃１〜＃７は、時点Ｔ３において、処理Ｐ３を実行し終えた状態から処理を再開する。これにより、コンピュータ＃３〜＃７では、時点Ｔ１から時点Ｔ２までの処理がもう一度実行されることになる。ところが、時点Ｔ３から再開された処理においても、外部との入出力を伴うため、時点Ｔ３から再開された処理Ｐ３に後続する処理Ｐ４’，Ｐ５’，Ｐ６’と、時点Ｔ１から時点Ｔ２までに実行された処理Ｐ４，Ｐ５，Ｐ６との間で不整合、つまり時間軸方向のスプリットブレインが発生する可能性がある。
【００１８】
本発明は上記事情を考慮してなされたものでその目的は、相互に通信可能なＮ個（Ｎは４以上の整数）の処理要素によって処理を多重化する場合において、スプリットブレインの防止と多重故障発生時における可用性の確保とを両立させることができる分散システム及び多重化制御方法を提供することにある。
【課題を解決するための手段】
【００１９】
本発明の１つの観点によれば、相互に通信可能なＮ個の処理要素（Ｎは４以上の整数）のうちの少なくともＱ個（Ｑは定足数）の処理要素の動作を同期化させることができるときに限り、当該少なくともＱ個の処理要素によって多重化処理が実行される定足数多重化方式を適用した分散システムが提供される。このシステム内の上記Ｎ個の処理要素の各々は、再起動時に、当該Ｎ個の処理要素のうちの既に同期化されている少なくともＦ＋１個（Ｆ＝Ｎ−Ｑ）の処理要素と通信ができる場合に、自身の処理の実行状態を上記システム内の最新の実行状態に再同期化することが可能であると判定する再同期化判定手段と、この再同期化手段の判定結果に応じて、上記少なくともＦ＋１個の処理要素の各々の実行状態のうちの最新の実行状態に、自身の処理の実行状態を再同期化する再同期化手段とを備えたことを特徴とする。
【００２０】
上記の構成において、ＦはＮ−Ｑであり、故障しても多重化の処理が止まることのない処理要素の最大数である。つまり、Ｆ個以下の処理要素が同時に故障する多重故障が発生しても、多重化処理は一時的にも中断しない。これに対し、Ｆ個を超える多重故障が発生した場合には、定足数Ｑを満たさなくなることから、従来技術ではシステムが停止する。また、多重化処理を一時中断している状態とし、故障から回復した処理要素の再起動時に、既に同期化されている処理要素の実行状態に無条件で再同期化すると、時間軸方向にスプリットブレインを起こす。
【００２１】
これに対して上記の構成においては、故障から回復した処理要素の再起動時に、その再起動された処理要素がＮ個の処理要素のうちの既に同期化されている少なくともＦ＋１個の処理要素と通信ができる場合に限り再同期化が可能であると判定される。上記システムでは、少なくともＱ個の処理要素の動作を同期化させることができるときに限り、当該少なくともＱ個の処理要素によって処理が続行される。このシステムでは、最低でもＱ個の処理要素は、最新の実行状態にあることになる。したがって、Ｆ（＝Ｎ−Ｑ）個を超える多重故障が発生したとしても、その再起動された処理要素がＮ個の処理要素のうちの既に同期化されている少なくともＦ＋１個の処理要素と通信ができるならば、当該少なくともＦ＋１台の処理要素のうち、最低でもどれか１つは、最新の実行状態を持っている。ここで、少なくともＦ＋１個の処理要素と通信ができるためには、許容される多重故障の処理要素の数はＮ−（Ｆ＋１）＝（Ｎ−Ｆ）−１＝Ｑ−１である。
【００２２】
そこで、上記構成においては、再起動された処理要素は、上記少なくともＦ＋１個の処理要素と通信ができる場合に限り、当該少なくともＦ＋１台の処理要素がそれぞれ持つ実行状態のうち、最新の実行状態に再同期化する。この再起動された処理要素の再同期化後の実行状態は、システム全体でも最新の実行状態となっている。したがって、この再同期化によってスプリットブレインを起こす虞はない。
【発明の効果】
【００２３】
本発明によれば、Ｎ個の処理要素（Ｎは４以上の整数）のうちの少なくともＱ個（Ｑは定足数）の処理要素の動作を同期化させることができるときに限り、当該少なくともＱ個の処理要素によって多重化処理が実行される定足数多重化方式を適用する分散システムにおいて、Ｆ（＝Ｎ−Ｑ）個を超える多重故障が発生したとしても、故障から回復して再起動された処理要素がＮ個の処理要素のうちの既に同期化されている少なくともＦ＋１個の処理要素と通信ができるならば、この再起動された処理要素は、当該少なくともＦ＋１台の処理要素の各々の実行状態のうちの最新の実行状態に自動的に再同期化する構成としたので、システム全体でＱ台以上が動作する状態となった段階で、上記最新の実行状態をもとに処理を自動的に再開することができる。これにより、スプリットブレインの防止と多重故障発生時における可用性の確保とを両立させることができる。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の一実施形態につき図面を参照して説明する。  
図１は本発明の一実施形態に係る分散システムの構成を示すブロック図である。図１の分散システムは、Ｎ台（Ｎは４以上の整数）、例えば７台のコンピュータ１０-1（＃１）〜１０-7（＃７）から構成される。コンピュータ１０-1〜１０-7は、相互に通信可能な処理要素である。コンピュータ１０-1〜１０-7は、ネットワーク２０によって相互接続されており、当該ネットワーク２０を介して相互に通信が可能なように構成されている。
【００２５】
図１の分散システムでは、７台のコンピュータ１０-1〜１０-7によって処理が多重化される。また、図１の分散システムでは、上記多重化の制御のために、従来技術で述べた定足数方式が適用される。この定足数方式を適用した図１の分散システムの特徴について、説明する。まず、処理を多重化するコンピュータの数をＮで表す。本実施形態では、Ｎ＝７である。また、定足数をＱで表す。周知のように、定足数をＱとする客定足数方式では、Ｎ台のコンピュータで処理を多重化している場合に、Ｑ台以上のコンピュータの動作を一致（同期化）させることができるとき（つまり同一グループを構成できるとき）に限り、たとえ他のコンピュータが故障していても処理を継続できる。定足数方式として２／３定足数決方式を適用するものとすると、ＱはＮの２／３を超える最小の整数であり、Ｎ＝７の例では５となる。また、Ｎ−Ｑの値をＦで表す。明らかなように、Ｆは、故障してもシステム全体における多重化の処理が止まらないコンピュータの最大数である。Ｎ＝７のシステムで定足数方式として２／３定足数決方式を適用する場合、Ｑ＝５であることから、Ｆ＝２となる。
【００２６】
本実施形態の特徴は、あるコンピュータ＃ｉが故障（障害）から回復して再起動して、他のコンピュータの動作に再同期化する場合の条件と方法とにある。本実施形態における再同期化とは、コンピュータ＃ｉが、その時点において起動されている他のコンピュータのうち、最新の処理の状態を保持しているコンピュータから、当該最新の処理の状態を自身の処理の状態として当該コンピュータ＃ｉ内にコピーすることをいう。最新の処理の状態を保持しているコンピュータの台数は問わない。また、本実施形態における再同期化の条件は、コンピュータ＃ｉが再起動した場合に、当該コンピュータ＃ｉの他に、当該コンピュータ＃ｉと同一グループを構成できる、つまり当該コンピュータ＃ｉと通信できる少なくともＦ＋１台のコンピュータが存在することである。
【００２７】
このような本実施形態特有の再同期化処理を行うことで、時間軸方向のスプリットブレインを防止できる。以下、その理由について述べる。定足数方式を適用する本実施形態の分散システムでは、必ずＱ台以上のコンピュータから構成されるグループができている場合に、多重化処理が続行する。したがって、分散システムにおける最新の処理の状態は、少なくともＱ台のコンピュータに保持されていることになる。もし、最新の処理の状態を保持するコンピュータの数が、最低のＱ台であるものとすると、最新の処理の状態を保持していないコンピュータの数は、残りのコンピュータの数、つまりＮ−Ｑ＝Ｆ台となる。また、最新の処理の状態を保持するコンピュータの数が、Ｑ台を超えているものとすると、最新の処理の状態を保持していないコンピュータの数は、Ｎ−Ｑ台未満、つまりＦ台未満となる。このことは、システム内の任意のＦ＋１台のコンピュータのうち、最低でもどれか１台は最新の処理の状態を持っていることを意味する。したがって、コンピュータ＃ｉが上記の再同期化条件のもとで再同期化した場合、当該コンピュータ＃ｉの処理の状態（実行状態）は、システム全体でみても必ず最新の状態となっている。したがって、時間軸方向のスプリットブレインを起こすことはない。
【００２８】
次に、上記再同期化のための具体的な仕組みについて、図１を参照して説明する。コンピュータ１０-1（＃１）〜１０-7（＃７）は、いずれも、当該コンピュータ１０-1〜１０-7によって多重化される処理の手順を記述したプログラム１１と、当該コンピュータ１０-1〜１０-7の現時点における実行状態（処理の状態）を保持する実行状態記憶部１２と、プログラム１１に従う処理の多重化（定足数での多重化）を制御する多重化制御部１３とを備えている。但し、作図の都合上、図１中のコンピュータ１０-3〜１０-7では、プログラム１１、実行状態記憶部１２及び多重化制御部１３が省略されている。また、図１中の各コンピュータ１０-i（ｉ＝１〜７）では、プログラム１１を記憶するための記憶領域、及び実行状態記憶部１２を実現するための記憶領域を提供する記憶装置が省略されている。
【００２９】
各コンピュータ１０-i内の多重化制御部１３は、例えば当該コンピュータ１０-iにインストールされた特定のソフトウェアプログラムを当該コンピュータ１０-iが読み取って実行することにより実現される。このプログラムは、コンピュータで読み取り可能な記憶媒体、例えばフロッピー（登録商標）ディスクに代表される磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤに代表される光ディスク、フラッシュメモリに代表される半導体メモリ等の記憶媒体に予め格納して頒布可能である。また、このプログラムが、ネットワークを介してダウンロード（頒布）されても構わない。多重化制御部１３は、順序番号保持部１３１と、再同期化判定部１３２と、再同期化部１３３とを有する。
【００３０】
順序番号保持部１３１は、コンピュータ１０-iにおける処理の進行状況の指標となる進行状況情報としての順序番号を保持するのに用いられる。順序番号保持部１３１の内容は、プログラム１１の処理が進む毎に例えば１インクリメントされる。
【００３１】
再同期化判定部１３２は、コンピュータ１０-iが再起動された場合に、当該コンピュータ１０-iをシステム内の最新の実行状態を保持するコンピュータの処理に再同期化することが可能であるかを判定する。再同期化部１３３は、再同期化判定部１３２の判定結果に応じて当該コンピュータ１０-iを再同期化する。ここでは再同期化部１３３は、コンピュータ１０-i内の実行状態記憶部１２の内容をシステム内の最新の実行状態にすることにより、当該コンピュータ１０-iを再同期化する。システム内の最新の実行状態を保持するコンピュータは、コンピュータ１０-iと通信が可能な既に同期化されているコンピュータ（後述する多重化制御の実行中のコンピュータ）の順序番号保持部１３１に保持されている順序番号を比較することで検出可能である。
【００３２】
次に、図１のシステムにおける動作を、図２及び図３のフローチャート並びに図４のシーケンスチャートを参照して説明する。  
まず、多重化制御について説明する。各コンピュータ１０-i（ｉ＝１〜７）内の多重化制御部１３は、互いにネットワーク２０を介して情報を交換する（ステップＳ１）。この情報交換により、コンピュータ１０-i内の多重化制御部１３は、当該コンピュータ１０-i自身を含む少なくともＱ台のコンピュータの動作を一致（同期化）させることができるかを判定する（ステップＳ２）。前記特許文献２の例では、各コンピュータ間で処理Ｐｊのための入力が交換され、その入力を少なくともＱ台のコンピュータで一致させることができるかが判定される。処理Ｐｊのための入力を少なくともＱ台のコンピュータで一致させることができることは、自身を含む少なくともＱ台のコンピュータの動作を一致させることができることと等価である。
【００３３】
コンピュータ１０-i内の多重化制御部１３は、当該コンピュータ１０-i自身を含む少なくともＱ台のコンピュータの動作を一致させることができる場合（ステップＳ２）、当該少なくともＱ台のコンピュータから構成されるグループを作成してステップＳ３に進む。このステップＳ３において、コンピュータ１０-i内の多重化制御部１３は、プログラム１１に記述されている処理のうち、実行状態記憶部１２に保持されている現在の実行状態に対応する処理Ｐｊを実行する。そして処理Ｐｊを実行し終えると、多重化制御部１３は、実行状態記憶部１２に保持されている実行状態を、処理Ｐｊの実行が完了している状態に更新する（ステップＳ４）。また多重化制御部１３は、順序番号保持部１３１に保持されている順序番号を１インクリメントする（ステップＳ５）。多重化制御部１３は、以上のステップＳ１乃至Ｓ５を繰り返す。
【００３４】
一方、コンピュータ１０-i自身を含む少なくともＱ台のコンピュータの動作を一致させることができない場合（ステップＳ２）、当該コンピュータ１０-i内の多重化制御部１３はプログラム１１の処理を中断する。この場合、多重化制御部１３は、上記少なくともＱ台のコンピュータの動作を一致させることができるまでは、上記ステップＳ１での他のコンピュータとの間の情報の交換及び前記ステップＳ２での判定を繰り返す。このコンピュータ１０-iの多重化制御部１３によるステップＳ１及びＳ２の繰り返しも多重化制御の一部である。つまり、ステップＳ１及びＳ２が繰り返されている期間、コンピュータ１０-iではプログラム１１の新たな処理は行われないものの、当該コンピュータ１０-i自身は図２のフローチャートに従って多重化制御を実行している。この場合、コンピュータ１０-iを含む少なくともＱ台のコンピュータの動作を一致させることができる状態になれば、当該コンピュータ１０-iはプログラム１１の処理を実行している他のコンピュータの動作に同期して、直ちに新たな処理（ステップＳ３）に進むことができる。
【００３５】
さて、システム内の全てのコンピュータ１０-1〜１０-7において、図４に示すように、プログラム１１の処理Ｐ１，Ｐ２，Ｐ３が実行されたものとする。そして、処理Ｐ３を実行し終えた時点Ｔ１で、２台のコンピュータ１０-1（＃１），１０-2（＃２）と５台のコンピュータ１０-3（＃３）〜１０-7（＃７）との間で通信が行えなくなったものとする。即ち、２台のコンピュータ１０-1（＃１），１０-2（＃２）から構成されるコンピュータグループＡと５台のコンピュータ１０-3（＃３）〜１０-7（＃７）から構成されるコンピュータグループＢとに、ネットワーク分割したとする。ここで、図１のシステムが定足数方式として２／３定足数方式を適用しているものとすると、Ｎ＝７，Ｑ＝５，Ｆ＝２である。
【００３６】
この場合、コンピュータグループＢは５台のコンピュータ１０-3〜１０-7から構成されるため、２／３定足数Ｑを満たす。したがって、コンピュータ１０-3〜１０-7は、図４に示すように処理Ｐ３に後続するプログラム１１の処理を継続する。一方、コンピュータグループＡのコンピュータ１０-1，１０-2はＱ（＝５）台に満たないため、図４に示すように、処理Ｐ３に後続する処理に進まずにプログラム１１の処理を中断する。
【００３７】
その後、コンピュータ１０-3〜１０-7が処理Ｐ３に後続する処理Ｐ４，Ｐ５，Ｐ６を実行し終えた時点Ｔ２で、当該コンピュータ１０-3〜１０-7のうち例えば４台のコンピュータ１０-4〜１０-7が故障（障害）を引き起こしたものとする。この場合、コンピュータ１０-3は、たとえコンピュータ１０-1，１０-2との間のネットワーク分割が解消されて、当該コンピュータ１０-1，１０-2との間で動作を一致させることができたとしても、つまり同一のグループを作成できたとしても、２／３定足数Ｑを満たさないことから、処理を中断する。
【００３８】
さて、コンピュータ１０-4〜１０-7の故障は一時的であり、やがて当該故障から回復して再起動したものとする。すると、コンピュータ１０-4〜１０-7内の多重化制御部１３は、図３のフローチャートに従う再起動時処理を開始する。
【００３９】
まず、コンピュータ１０-j（ｊ＝４〜７）内の多重化制御部１３は、システム内の他の各コンピュータと通信する（ステップＳ１１）。コンピュータ１０-j内の多重化制御部１３が有する再同期化判定部１３２は、ステップＳ１１での通信の結果、多重化制御を実行している（既に同期化されている）Ｆ＋１台以上のコンピュータ（つまり少なくともＦ＋１台のコンピュータ）と通信が可能であるかを判定する（ステップＳ１２）。もし、コンピュータ１０-jと通信が可能な、多重化制御を実行しているＦ＋１台以上のコンピュータが存在するならば、再同期化判定部１３２はコンピュータ１０-jの再同期化が可能であると判定する。この場合、再同期化判定部１３２は、同じコンピュータ１０-j内の再同期化部１３３に制御を渡す。
【００４０】
さて、図１のシステムが７台のコンピュータ１０-1〜１０-7から構成され（Ｎ＝７）、定足数方式として２／３定足数方式を適用している本実施形態では（Ｑ＝５）、Ｆ＋１＝（Ｎ−Ｑ）＋１＝（７−５）＋１＝３である。前記したように、多重化制御を実行しているＦ＋１（＝３）台以上のコンピュータが存在する場合、当該Ｆ＋１（＝３）台以上のコンピュータのうち、最低でもどれか１台は最新の実行状態（処理の状態）を持っている。図４のシーケンスチャートの例では、時点Ｔ３において多重化制御を実行しているコンピュータの数は、コンピュータ１０-1〜１０-3のＦ＋１（＝３）台である。この場合、Ｆ＋１（＝３）台のコンピュータ１０-1〜１０-3のうちのいずれか１つは、最新の実行状態（ここでは、処理Ｐ６の実行が完了している状態）を保持している。
【００４１】
そこで、コンピュータ１０-j（ｊ＝４〜７）内の再同期化部１３３は、最新の実行状態を保持しているコンピュータを検出して、その最新の実行状態を保持しているコンピュータに当該コンピュータ１０-jを再同期化するための処理を次のように行う。まずコンピュータ１０-jは、当該コンピュータ１０-jと通信が可能な、多重化制御を実行しているＦ＋１台以上のコンピュータ（ここではＦ＋１＝３台のコンピュータ１０-1〜１０-3）から、当該Ｆ＋１台以上のコンピュータの順序番号保持部１３１にそれぞれ保持されている順序番号を取得する（ステップＳ１３）。この順序番号の取得は、例えば、コンピュータ１０-j内の再同期化部１３３から、上記Ｆ＋１台以上のコンピュータに対して順序番号の転送を要求することにより実現される。
【００４２】
コンピュータ１０-j内の再同期化部１３３は、上記Ｆ＋１台以上のコンピュータから取得した順序番号を比較することにより、最新の順序番号（ここでは、最も値の大きい順序番号）を判別する（ステップＳ１４）。多重化制御を実行しているコンピュータの中で最新の順序番号を保持しているコンピュータ（以下、コンピュータ１０-kと称する）は、図４のシーケンスチャートの例では、コンピュータ１０-1〜１０-3のうちのコンピュータ１０-3である。再同期化部１３３は、この最新の順序番号を保持しているコンピュータ１０-kを特定し、当該特定されたコンピュータ１０-kの現在の実行状態に、コンピュータ１０-jを再同期化させる（ステップＳ１５）。図４の例では、コンピュータ１０-kはコンピュータ１０-3であることから、コンピュータ１０-j（ｊ＝４〜７）、つまりコンピュータ１０-4〜１０-7は、コンピュータ１０-3に再同期化される。この再同期化は、コンピュータ１０-k（最新の順序番号を保持しているコンピュータ）の実行状態記憶部１２の内容(最新の実行状態）を、再同期化部１３３がコンピュータ１０-jの実行状態記憶部１２にコピーすることにより実現される。この再同期化では、最新の順序番号をコンピュータ１０-jの順序番号保持部１３１にコピーする動作も行われる。なお、ステップＳ１４で判定された最新の順序番号が、コンピュータ１０-jの順序番号保持部１３１にも保持されている場合には、再同期化が完了しているものとして、上記のコピーを省略することも可能である。
【００４３】
コンピュータ１０-j（ｊ＝４〜７）は、コンピュータ１０-k（１０-3）への再同期化を完了すると、図２のフローチャートに従う多重化制御を開始する。これによりコンピュータ１０-jの多重化制御部１３は、自身を含むＱ台のコンピュータの動作を一致させることができた段階で、実行状態記憶部１２に保持されている最新の実行状態をもとに、後続する処理を実行する。図４の例では、コンピュータ１０-k、即ちコンピュータ１０-3は、コンピュータ１０-4〜１０-7が故障した時点Ｔ２で処理Ｐ６まで完了している。その後、コンピュータ１０-4〜１０-7が再起動され、更にコンピュータ１０-1〜１０-3とコンピュータ１０-4〜１０-7との間の通信が可能となった結果、コンピュータ１０-4〜１０-7が、図４に示すように時点Ｔ３でコンピュータ１０-3に再同期化できたものとする。この場合、コンピュータ１０-4〜１０-7の実行状態はコンピュータ１０-3と同じ最新の実行状態にある。また、コンピュータ１０-1，１０-2の実行状態も多重化制御によりコンピュータ１０-3と同じ最新の実行状態にある。この結果、コンピュータ１０-1〜１０-7では、図４に示すように、時点Ｔ３において、処理Ｐ６に後続する処理Ｐ７から多重化処理が開始され、時間軸方向のスプリットブレインを起こすことはない。
【００４４】
以上に述べた本実施形態の効果について、以下に整理して示す。  
まず本実施形態では、分散システムを構成するＮ台（Ｎ＝７）のコンピュータのうちＱ台（Ｑ＝５）以上のコンピュータで動作を一致させることができる場合に処理（多重化処理）を続行する定足数方式（２／３定足数方式）を適用している。この場合、Ｆ台（Ｆ＝Ｎ−Ｑ＝２）以下のコンピュータの故障では、特許文献２に記載された従来技術と同様に、多重化処理は一時的にも中断しない。一方、Ｆ＋１台以上のコンピュータの故障でも、Ｑ−１台までのコンピュータの故障ならばシステムは停止されず、それらのうち何台かが再起動し全体でＱ台以上が動作するならば、それまでの間、一時的に処理が中断するものの、処理を自動的に再開することができる。したがって、Ｎ＝７，Ｑ＝５，Ｆ＝２の本実施形態では、Ｆを超える３台（Ｆ＋１＝３）から４台（Ｑ−１＝４）までのコンピュータが故障しても、処理を自動的に再開することが可能となる。４台のコンピュータが故障した場合を例にとるならば、それらのうち２台が再起動すれば、残りの３台（Ｆ＋１台）のコンピュータの処理に再同期化して、処理を自動的に再開することができる。この再同期化による処理の自動再開は、従来から知られている定足数方式では、時間軸方向のスプリットブレインの恐れがあるため、できないことであった。
【００４５】
コンピュータの故障は、二度と立ち上がらなくなる永続的なハードウェア故障ではなく、一過性のハードウェア故障や、ＯＳ（オペレーティングシステム）のソフトウェア的な障害によるものが大半を占めている。本実施形態では、コンピュータの起動時に自動的に再同期化を行うため、このような障害のケースでのシステムの可用性を大幅に向上させるという効果がある。
【００４６】
上記実施形態では、定足数方式として２／３定足数方式を適用している。しかし、本発明は、２／３定足数方式以外の定足数方式、例えば多数決方式にも同様に適用できる。但し、Ｎが奇数の場合には、Ｆ＋１＝Ｑであることから、以下に述べるように上記実施形態における再起動時の再同期化処理を適用する効果は小さい。まず、Ｆ＋１＝Ｑの場合、再同期化の条件である、少なくともＦ＋１台のコンピュータが多重化制御を実行中であることは、少なくともＱ台のコンピュータが多重化制御を実行中であることに他ならず、多重化処理は一時的にも中断しない。この場合、故障したコンピュータは、図２のフローチャートに従う多重化制御で最新の実行状態を持つコンピュータの動作に一致させることができるため、上記実施形態における再起動時の再同期化処理は必要ない。これに対し、Ｎが偶数の場合には、Ｑ−Ｆ＝２、つまりＦ＋１＜Ｑであることから、上記実施形態における再起動時の再同期化処理の効果は大きい。因みにＮ＝８の場合、多数決方式では、Ｑ＝５，Ｆ＝３，Ｆ＋１＝４となり、２／３定足数方式では、Ｑ＝６，Ｆ＝２，Ｆ＋１＝３となる。
【００４７】
また、上記実施形態では、分散システムを構成する相互に通信可能な処理要素がコンピュータである場合について説明した。しかし本発明は、上記処理要素がコンピュータのＯＳ上で動作する多重化されたプロセス、更には多重化されたサーバである場合にも、同様に適用できる。
【００４８】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【図面の簡単な説明】
【００４９】
【図１】本発明の一実施形態に係る分散システムの構成を示すブロック図。
【図２】同実施形態における多重化制御の手順を示すフローチャート。
【図３】同実施形態における再同期化を含む再起動時処理の手順を示すフローチャート。
【図４】同実施形態における各コンピュータの処理状態を示すシーケンスチャート。
【図５】再起動時の再同期化処理を無条件で行うことにより時間軸方向のスプリットブレインが発生する場合の各コンピュータの処理状態を示すシーケンスチャート。
【符号の説明】
【００５０】
１０-1〜１０-7…コンピュータ（処理要素）、１１…プログラム、１２…実行状態記憶部、１３…多重化制御部、２０…ネットワーク、１３１…順序番号保持部（進行状況情報保持手段）、１３２…再同期化判定部、１３３…再同期化部。
【図１】
2005258946.tif 000003
【図２】
2005258946.tif 000004
【図３】
2005258946.tif 000005
【図４】
2005258946.tif 000006
【図５】
2005258946.tif 000007