(57)【要約】【課題】２重化システムにおけるスプリットブレインの発生を防止する。【解決手段】サーバコンピュータ１０-1，１０-2は、ハートビート機構１２-1，１２-2で互いに相手を認識できない場合、互いに相手の故障を判定する。この状態で、クライアントコンピュータ３０のサーバ接続部３２が、サーバコンピュータ１０-1，１０-2のいずれか、例えば稼動系のサーバコンピュータ１０-1に接続して、当該コンピュータ１０-1のクライアント接続フラグ１３０-1をＯＮしたものとする。サーバコンピュータ１０-1の多重化制御部１３-1は、フラグ１３０-1がＯＮの場合、サーバコンピュータ１０-1とクライアントコンピュータ３０とでシステム内の多数を占めるグループを形成しているとして、当該サーバコンピュータ１０-1のサーバ処理部１１-1による処理を実行させる。【選択図】      図４
2005258947.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ台（Ｎは１以上の整数）のクライアントコンピュータにサービスを提供するための、相互に通信可能な２台のサーバコンピュータから構成され、当該２台のサーバコンピュータのいずれか一方が稼動系として動作し、他方が待機系として動作する２重化システムにおいて、
前記２台のサーバコンピュータの各々は、
前記サービスを提供するためのサーバ処理を実行するサーバ処理手段と、
前記Ｎ台のクライアントコンピュータとの接続状態を管理するためのクライアント接続状態管理手段と、
前記クライアント接続状態管理手段によって管理されている前記Ｎ台のクライアントコンピュータとの接続状態に基づく多数決により、前記サーバ処理手段によるサーバ処理を実行させるか否かを制御する多重化制御手段と
を具備することを特徴とする２重化システム。
【請求項２】
前記２台のサーバコンピュータの各々は、相互に通信を行うことで相互に相手を認識するハートビート機構を備え、
前記多重化制御手段は前記ハートビート機構が相手を認識できなかった場合に、前記クライアント接続状態管理手段によって管理されている前記Ｎ台のクライアントコンピュータとの接続状態に基づく多数決により、前記サーバ処理手段によるサーバ処理を実行させるか否かを制御する
ことを特徴とする請求項１記載の２重化システム。
【請求項３】
前記クライアント接続状態管理手段は、前記Ｎ台のクライアントコンピュータとの接続状態を、前記Ｎ台のクライアントコンピュータのうち対応する前記サーバコンピュータに接続されているクライアントコンピュータの数を示す接続数によって管理しており、
前記多重化制御手段は、前記クライアント接続状態管理手段によって管理されている前記接続数がＮ／２を超えるか否かにより、前記サーバ処理手段によるサーバ処理を実行させるか否かを制御する
ことを特徴とする請求項１記載の２重化システム。
【請求項４】
前記クライアント接続状態管理手段によって管理されている前記接続数は、前記Ｎ台のクライアントコンピュータのいずれかが接続先を切り替える際に更新され、対応する前記サーバコンピュータが切り替え後の新たな接続先となる際には１インクリメントされ、対応する前記サーバコンピュータが切り替え前の元の接続先となる際には１デクリメントされることを特徴とする請求項３記載の２重化システム。
【請求項５】
前記Ｎは１であり、
前記クライアント接続状態管理手段は、前記クライアントコンピュータとの接続状態を、当該クライアントコンピュータが対応する前記サーバコンピュータに接続されているか否かを示すフラグ情報であって、前記クライアントコンピュータが前記対応するサーバコンピュータに接続されている期間、前記クライアントコンピュータが前記対応するサーバコンピュータに接続されていことを示す第１の状態に、前記クライアントコンピュータによって定期的に更新されるフラグ情報により管理すると共に、当該フラグ情報が一定期間前記第１の状態に更新されなかった場合、当該フラグ情報を前記クライアントコンピュータが前記対応するサーバコンピュータに接続されていないことを示す第２の状態に設定し、
前記多重化制御手段は、前記クライアント接続状態管理手段によって管理されている前記フラグ情報が前記第１の状態または前記第２の状態のいずれであるかにより、前記サーバ処理手段によるサーバ処理を実行させるか否かを制御する
ことを特徴とする請求項１記載の２重化システム。
【請求項６】
Ｎ台（Ｎは１以上の整数）のクライアントコンピュータにサービスを提供するための、相互に通信可能な２台のサーバコンピュータから構成され、当該２台のサーバコンピュータのいずれか一方が稼動系として動作し、他方が待機系として動作する２重化システムにおいて、前記２台のサーバコンピュータ間で２重化されたサーバ処理を制御する多重化制御方法であって、
前記２台のサーバコンピュータの各々は、前記Ｎ台のクライアントコンピュータとの接続状態を管理し、
前記２台のサーバコンピュータの各々は、前記Ｎ台のクライアントコンピュータとの前記接続状態に基づく多数決により、自身がサーバ処理を実行するか否かを決定する
ことを特徴とする多重化制御方法。
【請求項７】
前記２台のサーバコンピュータの各々は、相互に通信を行うことで相互に相手を認識し、
前記２台のサーバコンピュータの各々は、相手を認識できなかった場合には、前記Ｎ台のクライアントコンピュータとの前記接続状態に基づく多数決により、自身がサーバ処理を実行するか否かを決定する
ことを特徴とする請求項６記載の多重化制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、相互に通信可能な２台のサーバコンピュータから構成され、当該２台のサーバコンピュータのいずれか一方が稼動系として動作し、他方が待機系として動作する２重化システム及び多重化制御方法に関する。
【背景技術】
【０００２】
近年、コンピュータ技術やネットワーク技術の向上は目覚ましく、これに伴って、業務のコンピュータ処理化が広く行われている。しかし、業務の内容によっては、故障などによる中断が許されないものも多い。そこで最近では、複数のコンピュータをネットワークで結合した分散システムを構築することが一般的になりつつある。
【０００３】
分散システムの運用手法の１つとして、コンピュータの処理の多重化が知られている。分散システムでは、各コンピュータが独立に故障する可能性がある。仮に、１つのコンピュータが故障しただけでシステム全体が機能しないシステムでは、システムの稼働率は、１台のコンピュータの稼働率よりも低くなってしまう。かかる事態を防止するために、システム全体に係わる処理は多重化することが必要である。逆に、多重化することによって、分散システムの稼働率を１台のコンピュータの稼働率よりも高くすることが可能である。例えば、稼働率９９パーセントのコンピュータ２台で構成する分散システムが、全く多重化（２重化）されていないとすると、その分散システムの稼働率は９８％程度である。もし、これが２重化されているとすると、稼働率は、９９．９９％程度となる。このような２重化システムは、例えば特許文献１に記載されている。この特許文献１に記載された２重化システムは、２台のサーバユニニットから構成される２重化サーバシステムである。また、特許文献１には、２重化システムを利用する複数のクライアント端末の全てから当該システム内の従系サーバユニット（待機系サーバコンピュータ）に対し、主系サーバユニット（稼動系サーバコンピュータ）からサービスの提供を受けられない旨の通知があった場合だけ、従系サーバユニットが主系サーバユニットに切り替わることが記載されている。このような２重化システムでは、たとえ２つのサーバユニット間で通信ができなくても、当該２つのサーバユニットが同時に主系となるのを防止することが可能となる。
【０００４】
＜フェイルオーバ方式＞
分散システムにおいて、コンピュータの処理を多重化する方式として、コンピュータの故障を検出したら、別のコンピュータでその処理を引き継ぐ方式が従来から知られている。この方式をフェイルオーバ方式と呼ぶ。
【０００５】
フェイルオーバ方式では、コンピュータの故障を検出するのに、コンピュータ間で定期的に通信し合い、お互いの動作状況を確認し合う方法が一般的に行われている。この通信のことを「ハートビート」と呼ぶ。コンピュータの故障停止は、ハートビートのタイムアウトによって検出される。つまり一定時間ハートビートが送出されていないコンピュータは故障停止したものとみなされる。
【０００６】
フェイルオーバ方式を適用する分散システムにおいては、スプリットブレインの発生が問題となる。スプリットブレインとは、実行のコンテキスト（状態）が２つ以上に分かれてしまうことを指す。スプリットブレインは、故障検出が誤って行われたときに発生する。例えば、分散システムを構成するコンピュータが、２つのコンピュータグループの間で互いに通信できない状態となった場合（network partitioning: ネットワーク分割）、両コンピュータグループは、互いに相手の故障を検出する。この場合、両コンピュータグループは独立して動作を始めることから、スプリットブレインに陥る。或いは、異常な高負荷のために、あるコンピュータのハートビートの送信が一時的に中断して故障が検出され、その後、そのコンピュータが動作を再開した後も、スプリットブレインに陥る可能性がある。
【０００７】
多重化された処理は、一般に分散システムの中で重要な処理である。そのため、スプリットブレインが起きると、その処理に一貫性がなくなり、システム全体に致命的な影響を及ぼす。
【０００８】
＜多数決方式＞
フェイルオーバ方式でのスプリットブレインの問題を根源的に解決するための方式として、多数決を用いた方式（多数決方式）が知られている。この多数決方式は、多重化した全てのコンピュータで同一の処理を実行し、全体の過半数（majority）を占めるコンピュータの動作を一致させることができるならば、他のコンピュータの動作に関係なく、処理を継続するものである。多数決方式は、定足数方式の１つである。定足数方式とは、多重化した全てのコンピュータで同一の処理を実行し、定足数（quorum:クォーラム）を占めるコンピュータの動作を一致させることができるならば、他のコンピュータの動作に関係なく、処理を継続するものである。この定足数を全体の過半数とした方式が多数決方式であり、例えば特許文献２に記載されている。
【０００９】
多数決方式では、スプリットブレインを原理的に回避できる。例えば、３台のコンピュータＸ，Ｙ，Ｚで処理を多重化（３重化）している場合で、２台のコンピュータＸ，ＹのグループＡと、１台のコンピュータＺのグループＢにネットワーク分割となったものとする。この場合でも、グループＡでの処理は動き続ける。これに対し、グループＢでの処理は中断する。ここでの中断とは、自身を含めて動作を一致させることができるコンピュータの数が過半数となるまで、処理を先に進めない状態をいう。
【００１０】
また、コンピュータＺが異常な高負荷でハングアップしたものとすると、残りの過半数を占めるコンピュータグループ（ここではグループＡ）での処理は、当該コンピュータＺに関係なく動作を続ける。コンピュータＺが回復したとき、当該コンピュータＺでの処理は、過半数を構成できないため勝手に動き出すことはない。つまりコンピュータＺは、他の過半数を占めるコンピュータグループの処理に再同期化した後に、動作を再開する。
【特許文献１】特開２０００−３３０８１４（段落００１３、図１）
【特許文献２】特開２００１−１１７８９５（段落０００７、段落００１８乃至００２２、図１乃至図５）
【発明の開示】
【発明が解決しようとする課題】
【００１１】
前述した多数決方式のシステムでは、最低でもコンピュータの数が３台以上必要である。したがって２台のコンピュータで構成される最も単純な多重化システム、つまり２重化されたコンピュータで構成される２重化システムでは、多数決方式は使用できない。
【００１２】
一方、特許文献１に記載された２重化システムでは、当該システムを利用する複数のクライアント端末の全てから従系サーバユニットに対し、主系サーバユニットからサービスの提供を受けられない旨の通知があった場合に、当該システム内の２重化されたサーバユニット（サーバコンピュータ）間での主系、従系の切り替えが行われる。この２重化システムでは、２つのサーバユニット間で通信ができなくても、当該２つのサーバユニットが同時に主系となる、一種のスプリットブレインに陥るのを防止できる。
【００１３】
しかし、この２重化システムでは、たとえ全てのクライアント端末が主系サーバユニットからサービスの提供を受けられなくなったとしても、１台でもクライアント端末が故障すると、その故障クライアント端末から従系サーバユニットに対し、主系サーバユニットからサービスの提供を受けられない旨が通知されないことから、主系、従系の切り替えが行われない。この場合、各クライアント端末は、主系、従系いずれからもサービスの提供を受けられなくなる。
【００１４】
本発明は上記事情を考慮してなされたものでその目的は、２重化されたサーバコンピュータ間でスプリットブレインが発生するのを防止しながら、クライアントコンピュータに対してサービスが提供されなくなる事態が発生するのを極力防止できる２重化システム及び多重化制御方法を提供することにある。
【課題を解決するための手段】
【００１５】
本発明の１つの観点によれば、Ｎ台（Ｎは１以上の整数）のクライアントコンピュータにサービスを提供するための、相互に通信可能な２台のサーバコンピュータから構成され、当該２台のサーバコンピュータのいずれか一方が稼動系として動作し、他方が待機系として動作する２重化システムが提供される。この２重化システムの上記２台のサーバコンピュータの各々は、上記サービスを提供するためのサーバ処理を実行するサーバ処理手段と、上記Ｎ台のクライアントコンピュータとの接続状態を管理するためのクライアント接続状態管理手段と、このクライアント接続状態管理手段によって管理されている上記Ｎ台のクライアントコンピュータとの接続状態に基づく多数決により、上記サーバ処理手段によるサーバ処理を実行させるか否かを制御する多重化制御手段とを備える。
【００１６】
上記の構成において、クライアントコンピュータが２重化システムからのサービスの提供を受けるには、当該システム内の２台のサーバコンピュータのうち、その時点においてサービスの提供が可能なサーバコンピュータに接続する必要がある。通常、クライアントコンピュータは２台のサーバコンピュータのうち稼動系のサーバコンピュータに接続する。また、稼動系のサーバコンピュータが故障して、当該稼動系のサーバコンピュータと通信できなくなった場合、つまり稼動系のサーバコンピュータを認識できなくなった場合には、クライアントコンピュータは、接続先を稼動系のサーバコンピュータから待機系のサーバコンピュータに切り替える。したがって、クライアントコンピュータが、２台のサーバコンピュータのいずれか一方に接続したということは、その接続先のサーバコンピュータを当該クライアントコンピュータが認識できたことを意味する。ここで、サーバコンピュータに接続されたクライアントコンピュータの数をｎとすると、当該サーバコンピュータとｎ台のクライアントコンピュータとにより１つのグループが形成されているといえる。そこで、上記２台のサーバコンピュータの各々が、上記Ｎ台のクライアントコンピュータとの接続状態を管理するならば、その接続状態から、自身が、クライアントコンピュータを含めたコンピュータの総数に対して多数を占めるグループに属しているか否かが判定可能である。
【００１７】
よって上記の構成においては、２重化システムを構成する２台のサーバコンピュータの各々は、上記接続状態から、当該サーバコンピュータを利用するクライアントコンピュータをも含めた一種の多数決により、サーバ処理を実行するか否かを正しく決定できる。これにより、たとえ２台のサーバコンピュータ間で相互に相手を認識できなくなって、互いに相手が故障したと判定しても、つまりネットワーク分割が発生しても、当該２台のサーバコンピュータの各々は、上記の接続状態からサーバ処理を実行するか否かを正しく決定できる。
【発明の効果】
【００１８】
本発明によれば、２重化システムを構成する２台のサーバコンピュータ（稼動系のサーバコンピュータと待機系のサーバコンピュータ）の間でたとえネットワーク分割が起きても、当該２台のサーバコンピュータの各々は、Ｎ台のクライアントコンピュータとの接続状態から、クライアントコンピュータをも含めた多数決により、自身がサーバ処理を実行するかを決定できる。これにより、スプリットブレインの発生を防止できると共に、クライアントコンピュータに対してサービスが提供されなくなる事態が発生するのを極力防止できる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態につき図面を参照して説明する。  
［第１の実施形態］
図１は本発明の第１の実施形態に係る２重化システムの構成を示すブロック図である。図１の２重化システムは、２台のサーバコンピュータ１０-1，１０-2から構成される。サーバコンピュータ１０-1，１０-2はネットワーク２０を介して相互に通信が可能なように構成されている。このサーバコンピュータ１０-1，１０-2（から構成される２重化システム）は、ネットワーク２０を介してクライアントコンピュータ３０から利用可能である。本実施形態では、サーバコンピュータ１０-1，１０-2は、データベースサーバが動作するデータベースサーバコンピュータであり、クライアントコンピュータ３０は、データベースサーバコンピュータを利用するアプリケーションサーバコンピュータである。このアプリケーションサーバコンピュータ上では、当該アプリケーションサーバコンピュータを利用するクライアント端末に対してサービスを提供するアプリケーションサーバが動作する。
【００２０】
サーバコンピュータ１０-1，１０-2は、それぞれサーバ処理部１１-1，１１-2と、ハートビート機構１２-1，１２-2と、多重化制御部１３-1，１３-2とを備えている。サーバ処理部１１-1，１１-2は、サーバ処理（サーバプログラム）を実行するサーバとして機能する。本実施形態において、サーバコンピュータ１０-1，１０-2はデータベースサーバコンピュータであり、サーバ処理部１１-1，１１-2はデータベースサーバとして機能する。ハートビート機構１２-1，１２-2は、互いにハートビートを授受することにより、互いが正常であることを確認する。
【００２１】
多重化制御部１３-1，１３-2は、対応するサーバコンピュータ１０-1，１０-2が稼動系となってサーバ処理部１１-1，１１-2を動作させるか、待機系となってサーバ処理部１１-1，１１-2の処理を待たせるかを制御する。この制御のために、多重化制御部１３-1，１３-2は、対応するサーバコンピュータ１０-1，１０-2とクライアントコンピュータ３０との接続状態を管理するクライアント接続状態管理手段としてのクライアント接続フラグ１３０-1，１３０-2を保持する。フラグ１３０-1，１３０-2は、サーバコンピュータ１０-1，１０-2にクライアントコンピュータ３０が接続しているか否かを表す。ここで、「サーバコンピュータ１０-1，１０-2にクライアントコンピュータ３０が接続している」とは、サーバコンピュータ１０-1，１０-2とクライアントコンピュータ３０との間にセッションが設定されていることを表す。
【００２２】
多重化制御部１３-1，１３-2は、対応するサーバコンピュータ１０-1，１０-2のハートビート機構１２-1，１２-2によって互いが正常であることが認識されている場合は、自身が稼動系であるならばサーバ処理部１１-1，１１-2による処理の実行を継続させ、待機系であるならばサーバ処理部１１-1，１１-2の停止状態を継続させる。また多重化制御部１３-1，１３-2は、ハートビート機構１２-1，１２-2が相手を認識しない場合、クライアント接続フラグ１３０-1，１３０-2がＯＮであるならば、サーバ処理部１１-1，１１-2による処理を実行させ、ＯＦＦであるならば、サーバ処理部１１-1，１１-2による処理を停止させる。
【００２３】
一方、クライアントコンピュータ３０は、クライアント処理部３１と、サーバ接続部３２とを備えている。クライアント処理部３１は、クライアント処理（クライアントプログラム）を実行するクライアントとして機能する。サーバ接続部３２は、サーバコンピュータ１０-1，１０-2との接続を管理する。サーバ接続部３２は、クライアントコンピュータ３０の接続先のサーバコンピュータ１０-i（ｉは１または２）が有するクライアント接続フラグ１３０-iをＯＮにする。またサーバ接続部３２は、クライアントコンピュータ３０の接続先をサーバコンピュータ１０-j（ｊは１または２、但しｊ≠ｉ）からサーバコンピュータ１０-iに切り替えたときには、元の接続先のサーバコンピュータ１０-jのクライアント接続フラグ１３０-jをＯＦＦにする。
【００２４】
次に、図１のシステムにおける動作について説明する。  
＜通常時の動作＞
まず、サーバコンピュータ１０-1，１０-2が共に正常である通常時の動作について、図２のシステム状態図を参照して説明する。今、サーバコンピュータ１０-1が稼動系として動作し、サーバコンピュータ１０-2が待機系として動作しているものとする。サーバコンピュータ１０-1，１０-2のハートビート機構１２-1，１２-2は、ネットワーク２０を介して相互に「ハートビート」と呼ばれる定期的な通信をし合うことにより、相手のサーバコンピュータの動作状況、即ち相手が正常に稼動しているかを確認する。
【００２５】
ここでは、ハートビート機構１２-1，１２-2が、ハートビートの授受により互いに相手のサーバコンピュータを認識することができ、したがって図２に示すように相手のサーバコンピュータが正常に稼動していると確認できているものとする。この場合、サーバコンピュータ１０-1は稼動系として動作を継続し、サーバコンピュータ１０-2は待機系として動作を継続する。
【００２６】
このような状況では、クライアントコンピュータ３０のサーバ接続部３は、サーバコンピュータ１０-1，１０-2のうちの待機系のサーバコンピュータ１０-2に対して接続要求を送出したとしても、当該要求は拒絶される。したがってクライアントコンピュータ３０はサーバコンピュータ１０-2に接続できない。一方、クライアントコンピュータ３０のサーバ接続部３から稼動系のサーバコンピュータ１０-1に対する接続要求は受け付けられる。したがって、クライアントコンピュータ３０は、図２において矢印２０１に示すように稼動系のサーバコンピュータ１０-1に接続される。この状態で、クライアントコンピュータ３０のサーバ接続部３は、サーバコンピュータ１０-1のクライアント接続フラグ１３０-1をＯＮにする。
【００２７】
サーバコンピュータ１０-1の多重化制御部１３-1は、クライアント接続フラグ１３０-1がＯＮの場合、当該サーバコンピュータ１０-1のサーバ処理部１１-1による処理を実行させる。つまり、サーバコンピュータ１０-1，１０-2のうち、稼動系のサーバコンピュータ１０-1がサーバ処理を実行して、クライアントコンピュータ３０に対してサービスを提供する。一方、待機系のサーバコンピュータ１０-2では、サーバ処理部１１-2は停止状態にある。
【００２８】
＜稼動系の停止時の動作＞
次に、稼動系のサーバコンピュータ１０-1が停止した場合の動作について、図３のシステム状態図を参照して説明する。稼動系のサーバコンピュータ１０-1が故障等で停止すると、当該サーバコンピュータ１０-1のハートビート機構１２-1からのハートビートが一定時間を超えて途絶える。この場合、待機系のサーバコンピュータ１０-2のハートビート機構１２-1は稼動系のサーバコンピュータ１０-1を認識できないため、取り敢えず当該サーバコンピュータ１０-1の故障を判定する。この状況では、クライアントコンピュータ３０は稼動系のサーバコンピュータ１０-1と通信できず、当該サーバコンピュータ１０-1からサービスの提供を受けられない。そこでクライアントコンピュータ３０のサーバ接続部３２は、接続先を、稼動系のサーバコンピュータ１０-1から、図３において矢印３０１で示すように待機系のサーバコンピュータ１０-2に切り替えて、当該サーバコンピュータ１０-2のクライアント接続フラグ１３０-2をＯＮにする。このことは、クライアントコンピュータ３０が稼動系のサーバコンピュータ１０-1の故障を認識したことを表す。
【００２９】
したがって、クライアントコンピュータ３０のサーバ接続部３２がサーバコンピュータ１０-2のクライアント接続フラグ１３０-2をＯＮしたことは、２台のサーバコンピュータ１０-1，１０-2と１台のクライアントコンピュータ３０との合計３台のコンピュータから構成されるシステムにおいて、サーバコンピュータ１０-2とクライアントコンピュータ３０の双方が、残りのサーバコンピュータ１０-1の故障を認識していることを表す。つまり、図３のシステムの状態は、クライアントコンピュータ３０を含めたコンピュータの総数に対して、待機系のサーバコンピュータ１０-2とクライアントコンピュータ３０との２台で多数を占めるグループを形成していることを表す。
【００３０】
そこで待機系のサーバコンピュータ１０-2の多重化制御部１３-2は、クライアント接続フラグ１３０-2がＯＮになると、当該サーバコンピュータ１０-2が、システム内のコンピュータの総数に対して多数（過半数）を占めているグループに属していると判断する。この場合、サーバコンピュータ１０-2の多重化制御部１３-2は、当該サーバコンピュータ１０-2が待機系であることから、当該サーバコンピュータ１０-2のサーバ処理部１１-2により、稼動系のサーバコンピュータ１０-1のサーバ処理部１１-1で行われていた処理を引き継がせる（フェイルオーバさせる）。これにより、サーバコンピュータ１０-2は待機系から稼動系に切り替わる。
【００３１】
＜ネットワーク分割時の動作＞
次に、図２の状態にあった稼動系のサーバコンピュータ１０-1と待機系のサーバコンピュータ１０-2との間でネットワーク分割となったときの動作について、図４のシステム状態図を参照して説明する。
【００３２】
今、稼動系のサーバコンピュータ１０-1と待機系のサーバコンピュータ１０-2が例えば正常に動作しているにも拘わらずに、通信障害等の要因により、図４に示すように、サーバコンピュータ１０-1のハートビート機構１２-1とサーバコンピュータ１０-2のハートビート機構１２-2との間で互いにハートビートを授受できない状態、つまりネットワーク分割が発生したものとする。この状態では、サーバコンピュータ１０-1，１０-2のハートビート機構１２-1，１２-2は、互いに相手を認識できず、互いに相手のサーバコンピュータの故障を判定する。このとき、クライアントコンピュータ３０のサーバ接続部３２は、稼動系のサーバコンピュータ１０-1または待機系のサーバコンピュータ１０-2のどちらにも接続することが可能である。
【００３３】
ここでは、クライアントコンピュータ３０のサーバ接続部３２は、図４に示すように稼動系のサーバコンピュータ１０-1に接続して、当該サーバコンピュータ１０-1のクライアント接続フラグ１３０-1をＯＮにしたものとする。この動作は、クライアントコンピュータ３０が既に稼動系のサーバコンピュータ１０-1に接続している場合には行われない。、  サーバコンピュータ１０-1の多重化制御部１３-1は、相手（サーバコンピュータ１０-2）の故障を判定し、且つクライアント接続フラグ１３０-1がＯＮの場合、当該サーバコンピュータ１０-1が、システム内のコンピュータの総数に対して多数（過半数）を占めているグループに属していると判断する。この場合、サーバコンピュータ１０-1の多重化制御部１３-1は、当該サーバコンピュータ１０-1が稼動系であることから、当該サーバコンピュータ１０-1のサーバ処理部１１-1による処理の実行を継続させる。
【００３４】
一方、サーバコンピュータ１０-2の多重化制御部１３-2は、相手（サーバコンピュータ１０-1）の故障を判定しても、この例のようにクライアント接続フラグ１３０-2がＯＦＦの場合、当該サーバコンピュータ１０-2が、システム内のコンピュータの総数に対して多数を占めているグループに属していないと判断する。この場合、サーバコンピュータ１０-2の多重化制御部１３-2は、当該サーバコンピュータ１０-2が待機系であることから、当該サーバコンピュータ１０-2のサーバ処理部１１-2の停止状態を継続させる。
【００３５】
このように本実施形態においては、サーバコンピュータ１０-1及び１０-2の間でネットワーク分割が発生しても、当該サーバコンピュータ１０-1及び１０-2の各々は、クライアント接続フラグ１３０-1及び１３０-2の状態、つまりクライアントコンピュータ３０との接続状態から、サーバ処理を実行するか否かを正しく決定できる。これにより、スプリットブレインの発生を防止できる。
【００３６】
＜稼動系が高負荷となりハートビート送信が渋滞したときの動作）
次に、サーバコンピュータ１０-1のハートビート機構１２-1からサーバコンピュータ１０-2へのハートビート送信が渋滞したときの動作について、図５のシステム状態図を参照して説明する。
【００３７】
今、図２の状態にあった稼動系のサーバコンピュータ１０-1が高負荷となって、当該サーバコンピュータ１０-1のハートビート機構１２-1からサーバコンピュータ１０-2へのハートビート送信が渋滞したものとする。待機系のサーバコンピュータ１０-2のハートビート機構１２-2は、図５に示すように稼動系のサーバコンピュータ１０-1を認識できない。この状態では、クライアントコンピュータ３０がサーバコンピュータ１０-1に接続していたとしても、当該サーバコンピュータ１０-1からクライアントコンピュータ３０に対するサービスの提供も渋滞する。
【００３８】
そこで、クライアントコンピュータ３０のサーバ接続部３２は、接続先を、稼動系のサーバコンピュータ１０-1から、図５において矢印５０１で示すように待機系のサーバコンピュータ１０-2に切り替えて、当該サーバコンピュータ１０-2のクライアント接続フラグ１３０-2をＯＮにする。このときサーバ接続部３２は、稼動系のサーバコンピュータ１０-1のクライアント接続フラグ１３０-1をＯＦＦにする。
【００３９】
待機系のサーバコンピュータ１０-2の多重化制御部１３-2は、クライアント接続フラグ１３０-2がＯＮになると、当該サーバコンピュータ１０-2が、システム内のコンピュータの総数に対して多数を占めているグループに属していると判断する。この場合、サーバコンピュータ１０-2の多重化制御部１３-2は、当該サーバコンピュータ１０-2が待機系であることから、当該サーバコンピュータ１０-2のサーバ処理部１１-2により、稼動系のサーバコンピュータ１０-1のサーバ処理部１１-1で行われていた処理を引き継がせる。これにより、サーバコンピュータ１０-2は待機系から稼動系に切り替わる。
【００４０】
一方、稼動系のサーバコンピュータ１０-1の多重化制御部１３-1は、クライアント接続フラグ１３０-1がＯＦＦになると、当該サーバコンピュータ１０-1が、システム内のコンピュータの総数に対して多数を占めているグループに属していないと判断する。この場合、サーバコンピュータ１０-1の多重化制御部１３-1は、当該サーバコンピュータ１０-1が稼動系であることから、当該サーバコンピュータ１０-1のサーバ処理部１１-12の動作を停止させる。これにより、サーバコンピュータ１０-1は稼動系から待機系に切り替わる。
【００４１】
上記第１の実施形態では、クライアントコンピュータ３０のサーバ接続部３２は、サーバコンピュータに接続する場合だけ接続先のサーバコンピュータのクライアント接続フラグをＯＮしている。また、サーバ接続部３２は、接続先を切り替えたときは、元の接続先のサーバコンピュータのクライアント接続フラグをＯＦＦにしている。しかし、サーバ接続部３２が、接続先のサーバコンピュータのクライアント接続フラグをＯＮにする更新操作（ＯＮ操作）を定期的に行うようにしても良い。この場合、サーバコンピュータの多重化制御部にクライアント接続フラグをＯＦＦにするＯＦＦ操作手段を持たせ、当該ＯＦＦ操作手段がクライアント接続フラグを定期的に監視して、一定時間ＯＮ操作が行われなかった場合に当該フラグをＯＦＦすると良い。ここで、一定時間ＯＮ操作が行われなかったことを検出可能とするには、例えばＯＮ操作毎に時刻情報が更新されるタイムスタンプをクライアント接続フラグに付加して、当該タイムスタンプを現在時刻と比較すれば良い。
【００４２】
［第２の実施形態］
図６は本発明の第２の実施形態に係る２重化システムの構成を示すブロック図である。図６において、図１中の構成要素と同様の要素には、便宜的に同一符号を付してある。
【００４３】
図６の２重化システムは、図１の２重化システムと同様に、ネットワーク２０を介して相互に通信可能な２台のサーバコンピュータ１０-1，１０-2から構成される。図６の２重化システムが、図１の２重化システムと異なる点は、当該２重化システム（を構成するサーバコンピュータ１０-1，１０-2）がＮ台（Ｎは２以上の整数）のクライアントコンピュータ３０-1〜３０-Nによって利用される点である。図６の２重化システムの特徴は、サーバコンピュータ１０-i（ｉ＝１，２）に接続されるクライアントコンピュータの数がクライアントコンピュータの総数の過半数を占めている（つまりＮ／２を超えている）場合には、当該サーバコンピュータ１０-iでサーバ処理を実行し、過半数に満たない（つまりＮ／２以下の）場合には、当該サーバコンピュータ１０-iでサーバ処理を実行しない点にある。
【００４４】
そこで、サーバコンピュータ１０-1，１０-2の多重化制御部１３-1，１３-2は、図１中のクライアント接続フラグ１３０-1，１３０-2に代えて、クライアント接続カウンタ１３１-1，１３１-2を有する。クライアント接続カウンタ１３１-1，１３１-2は、サーバコンピュータ１０-1，１０-2とクライアントコンピュータとの接続状態を管理するためのクライアント接続状態管理手段であり、サーバコンピュータ１０-1，１０-2に接続されているクライアントコンピュータの数（接続数）Ｃ１，Ｃ２を保持する。
【００４５】
各クライアントコンピュータ３０-1〜３０-Nは、図１中のクライアント処理部３１及びサーバ接続部３２に相当する、クライアント処理部３１-1〜３１-N及びサーバ接続部３２-1〜３２-Nを有する。クライアントコンピュータ３０-k（ｋ＝１〜Ｎ）のサーバ接続部３２-kは、クライアント処理部３１-kがサーバコンピュータ１０-iからサービスの提供を受けようとする場合、当該サーバコンピュータ１０-iに接続要求を送出することにより、当該サーバコンピュータ１０-iに接続する。このときサーバ接続部３２-kは、サーバコンピュータ１０-iのクライアント接続カウンタ１３１-iの値を１インクリメントする。またサーバ接続部３２-kは、クライアントコンピュータ３０-kの接続先をサーバコンピュータ１０-j（ｊは１または２、但しｊ≠ｉ）からサーバコンピュータ１０-iに切り替えたときには、元の接続先のサーバコンピュータ１０-jのクライアント接続カウンタ１３１-iの値を１デクリメントする。これにより、サーバコンピュータ１０-1，１０-2のクライアント接続カウンタ１３１-1，１３１-2は、それぞれ当該サーバコンピュータ１０-1，１０-2に接続されているクライアントコンピュータの数Ｃ１，Ｃ２を保持する
サーバコンピュータ１０-1，１０-2の多重化制御部１３-1，１３-2は、当該サーバコンピュータ１０-1，１０-2のハートビート機構１２-1，１２-2によって互いが正常であることが認識されている場合は、自身が稼動系であるならばサーバ処理部１１-1，１１-2による処理の実行を継続させ、待機系であるならばサーバ処理部１１-1，１１-2の停止状態を継続させる。また多重化制御部１３-1，１３-2は、ハートビート機構１２-1，１２-2が相手を認識しない場合、クライアント接続カウンタ１３１-1，１３１-2の値、即ちサーバコンピュータ１０-1，１０-2に接続されているクライアントコンピュータの数（接続数）Ｃ１，Ｃ２がＮ／２を超えているか否かを判定する。多重化制御部１３-1，１３-2は、接続数Ｃ１，Ｃ２がＮ／２を超えているならば、サーバ処理部１１-1，１１-2による処理を実行させ、Ｎ／２以下であるならば、サーバ処理部１１-1，１１-2による処理を停止させる。これにより、２重化されたサーバコンピュータ１０-1及び１０-2の間でネットワーク分割が発生しても、またＮ台のクライアントコンピュータ３０-1〜３０-Nの一部が故障しても、サーバコンピュータ１０-1及び１０-2の間でスプリットブレインが発生するのを防止しながら、クライアントコンピュータに対してサービスが提供されなくなる事態が発生するのを極力防止できる。
【００４６】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【図面の簡単な説明】
【００４７】
【図１】本発明の第１の実施形態に係る２重化システムの構成を示すブロック図。
【図２】同実施形態における通常時のシステム状態図。
【図３】同実施形態において稼動系のサーバコンピュータ１０-1が停止した場合のシステム状態図。
【図４】同実施形態において稼動系のサーバコンピュータ１０-1と待機系のサーバコンピュータ１０-2との間でネットワーク分割となったときのシステム状態図。
【図５】同実施形態において稼動系のサーバコンピュータ１０-1が高負荷となってハートビート送信が渋滞したときのシステム状態図。
【図６】本発明の第２の実施形態に係る２重化システムの構成を示すブロック図。
【符号の説明】
【００４８】
１０-1，１０-2…サーバコンピュータ、１１-1，１１-2…サーバ処理部、１２-1，１２-2…ハートビート機構、１３-1，１３-2…多重化制御部、２０…ネットワーク、３０，３０-1〜３０-N…クライアントコンピュータ、３１，３１-1〜３１-N…クライアント処理部、３２，３２-1〜３２-N…サーバ接続部、１３０-1，１３０-2…クライアント接続フラグ（クライアント接続状態管理手段）、１３１-1，１３１-2…クライアント接続カウンタ（クライアント接続状態管理手段）。
【図１】
2005258947.tif 000003
【図２】
2005258947.tif 000004
【図３】
2005258947.tif 000005
【図４】
2005258947.tif 000006
【図５】
2005258947.tif 000007
【図６】
2005258947.tif 000008