以下に図面を参照して、本発明にかかる制御方法、制御プログラムおよび情報処理システムの実施の形態を詳細に説明する。
(実施の形態1)
図1は、実施の形態1にかかる制御方法の一実施例を示す説明図である。図1において、クラスタシステム100は、現用系装置101と、待機系装置102と、を含む。現用系装置101は、端末装置103からの処理要求に応じた処理を実行する現用系のコンピュータである。待機系装置102は、現用系装置101に対応する待機系のコンピュータであり、現用系装置101の代わりに端末装置103からの処理要求に応じた処理を実行するために待機する。
端末装置103は、クラスタシステム100に対して処理要求を行うコンピュータである。なお、ここでは待機系のコンピュータが1台の場合を例に挙げて説明するが、クラスタシステム100は、複数台の待機系のコンピュータを含む構成であってもよい。また、ここでは端末装置103が3台の場合を例に挙げて説明するが、1台以上であれば何台の端末装置103がクラスタシステム100に接続されていてもよい。
ここで、高い信頼性・耐障害性・可用性が求められる情報処理システムでは、クラスタシステムを用いた構成が採用され、サーバ等の異常発生時にフェイルオーバーが行われる。フェイルオーバーとは、現用系のコンピュータ(例えば、サーバ)に異常が発生した場合に、待機系のコンピュータが、現用系のコンピュータに代わって処理やデータを引き継ぐ機能である。
以下の説明では、フェイルオーバーの実施前に現用系サーバとして動作していたサーバを「切替元サーバ」と表記し、フェイルオーバーの実施後に現用系サーバとして動作するサーバを「切替先サーバ」と表記する場合がある。
また、クラスタシステムにおいて、あるサーバに異常が発生した場合に、異常サーバが正常なサーバに影響を及ぼさないようにするための解決策として、異常サーバとの通信を遮断するパケットフィルタリング技術がある。パケットフィルタリング技術をクラスタシステムに適用すると、例えば、フェイルオーバーの実施時に、クライアントにおいて、切替元サーバ(異常サーバ)との通信を閉塞することにより、異常サーバが正常なサーバに影響を及ぼさないようにすることができる。
しかしながら、クライアントからサーバにアクセスする際に仮想IP(Internet Protocol)アドレスを使用する場合、クライアントは、送信先アドレスから切替元サーバと切替先サーバを判別できない。仮想IPアドレスとは、クライアントからサーバにアクセスする際に使用される、サーバ群に割り振られた仮想的なIPアドレスである。複数のサーバで構成されるクラスタシステムにおいては、フェイルオーバー実施時の影響範囲を局所化するために、クライアントから仮想的なIPアドレスを使ってサーバ群にアクセスし、サーバ群の中で現用系サーバだけが処理を受け付ける方式が採用される。仮想IPアドレスとしては、例えば、マルチキャストアドレスがある。
すなわち、クライアントは、全サーバが同一のIPアドレスと見えるため、要求電文送信時に、送信先IPアドレスによるパケットフィルタリングを行うことができない。このため、クライアント側では、サーバからの応答電文受信時にしか通信閉塞を行うことができず、異常サーバがクライアントからの要求電文を受信してしまう場合がある。
これでは、異常サーバが完全に動作を停止しておらず、半死状態や異常動作している場合に、異常サーバが正常なサーバに及ぼす影響を抑えることは難しい。また、異常サーバが無駄な応答電文を送信し続けると、ネットワークにかかる負荷の増大など、正常に動作しているサーバからの応答に影響を与えてしまう。
そこで、実施の形態1では、現用系装置101の異常発生時に、待機系装置102が、現用系装置101の隔離要求を端末装置103に送信して現用系装置101を隔離させ、端末装置103からの隔離応答に応じて、待機系へのサーバ切替を行う。これにより、現用系装置101が半死状態や異常動作している場合であっても2重アクティブを防いでフェイルオーバーを実現する。以下、実施の形態1にかかるクラスタシステム100の制御処理例について説明する。
(1)待機系装置102は、現用系装置101の異常を検知する。具体的には、例えば、待機系装置102は、現用系装置101からの通信が途絶した場合に、現用系装置101の異常を検知することにしてもよい。
(2)待機系装置102は、現用系装置101の異常を検知した場合、現用系装置101を特定する装置情報110を端末装置103に送信する。ここで、装置情報110は、例えば、異常を検知した現用系装置101との通信の閉塞を指示するものである。装置情報110には、例えば、現用系装置101を一意に特定する識別情報、例えば、現用系装置101に割り振られたIPアドレスが含まれている。
(3)端末装置103は、装置情報110を受信したことに応じて、現用系装置101からのデータを破棄する状態に変更するとともに応答通知120を待機系装置102に送信する。ここで、応答通知120は、装置情報110を受信した旨の通知であり、例えば、現用系装置101からのデータを破棄する状態に変更したことを示す通知である。
具体的には、例えば、端末装置103は、装置情報110に含まれる現用系装置101のIPアドレスを、破棄対象データの送信元アドレスに設定する。これ以降、端末装置103は、例えば、破棄対象データの送信元アドレスに設定したIPアドレスを送信元アドレスとするデータを受信した場合、受信したデータを破棄する。
(4)待機系装置102は、端末装置103からの応答通知120を受信したことに応じて、現用系装置101の代わりに端末装置103からの処理要求に応じた処理を実行する状態に変更する。すなわち、待機系装置102が、異常を検知した現用系装置101の代わりに、新たな現用系のコンピュータとなり、端末装置103からの処理要求に応じた処理を実行する。
このように、クラスタシステム100によれば、異常が発生した現用系装置101が半死状態で正常に動作しない状況においても、現用系装置101を切り離すことができ、フェイルオーバーを実現することができる。また、現用系装置101の電源OFFを前提としないため、例えば、現用系装置101の電源制御装置が正常に動作しない状況においても、現用系装置101を切り離すことができる。
また、端末装置103から現用系装置101にアクセスする際に仮想IPアドレスを使用する場合でも、端末装置103側で現用系装置101との通信を閉塞することができる。また、現用系装置101に電源制御装置が存在しない環境においても、現用系装置101を切り離すことができる。
(情報処理システム200のシステム構成例)
つぎに、実施の形態1にかかる情報処理システム200のシステム構成例について説明する。
図2は、情報処理システム200のシステム構成例を示す説明図である。図2において、情報処理システム200は、サーバ#1〜#3と、クライアント装置$1〜$4と、を含む構成である。情報処理システム200において、サーバ#1〜#3は、ネットワーク220を介して接続される。また、サーバ#1〜#3およびクライアント装置$1〜$4は、ネットワーク230を介して接続される。
ネットワーク220,230は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。より具体的には、ネットワーク220は、例えば、フェイルオーバーやサーバの死活監視などを行うためにサーバ間を接続するクラスタ制御用の管理LANである。
また、ネットワーク230は、例えば、処理要求や処理結果を通信するためにサーバ/クライアント装置間およびサーバ間を接続する外部通信用の業務LANである。ネットワーク230を介して接続されるサーバには、異なるクラスタシステムのサーバを含む。すなわち、図2では、情報処理システム200に含まれるクラスタシステムとして、クラスタシステム210のみ表示したが、クラスタシステム210とは異なるクラスタシステムが含まれていてもよい。
ここで、サーバ#1〜#3は、クラスタシステム210を構成するサーバ群である。サーバ#1は、クライアント装置$1〜$4からの処理要求に応じた処理を実行する現用系サーバであり、図1に示した現用系装置101に相当する。また、サーバ#2,#3は、現用系サーバの代わりにクライアント装置$1〜$4からの処理要求に応じた処理を実行するために待機する待機系サーバであり、図1に示した待機系装置102に相当する。
サーバ#1〜#3は、電源制御装置#1〜#3と、クラスタ制御部#1〜#3と、通信制御部#1〜#3と、アプリケーションプログラムAと、を有する。電源制御装置#1〜#3は、サーバ#1〜#3の起動・停止を制御するコンピュータである。例えば、電源制御装置#1〜#3は、フェイルオーバーにより現用系/待機系の切り替えを行う際に現用系サーバの停止を行う。
クラスタ制御部#1〜#3は、クラスタシステム210を制御する機能を有する。例えば、クラスタ制御部#1〜#3は、管理LANを使用して、フェイルオーバーの指示やサーバの死活監視などを行う。通信制御部#1〜#3は、サーバ/クライアント装置間およびサーバ間の通信を制御する機能を有する。例えば、通信制御部#1〜#3は、業務LANを使用して、アプリケーションプログラムAからの業務処理で発生する通信を制御する。アプリケーションプログラムAは、業務サービスを実現するために使用されるプログラムである。アプリケーションプログラムAは、例えば、サーバ#1〜#3およびクライアント装置$1〜$4に配置することができる。
クライアント装置$1〜$4は、通信制御部$1〜$4と、アプリケーションプログラムAと、を有する。通信制御部$1〜$4は、サーバ/クライアント装置間の通信を制御する機能を有する。例えば、通信制御部$1〜$4は、業務LANを使用して、アプリケーションプログラムAからの業務処理で発生する通信を制御する。
また、情報処理システム200において、クライアント装置$1〜$4は、サーバ#1〜#3に割り振られた仮想IPアドレスを用いて処理要求を送信する。このため、クライアント装置$1〜$4からの処理要求は、サーバ#1〜#3に送信される。そして、各サーバ#1〜#3は、自身が現用系サーバであるか否かを判断し、自身が現用系サーバである場合に、クライアント装置$1〜$4からの処理要求に応じた処理を実行する。
なお、各サーバ#1〜#3は、例えば、仮想マシンであってもよい。仮想マシンとは、物理マシンのハードウェア資源を分割して構築される実行環境で動作する仮想的なコンピュータである。仮想マシンの実体は、例えば、プログラムやOS(Operating System)などのソフトウェア、ソフトウェアに与えられる変数、およびソフトウェアを実行させるためのハードウェア資源を指定する情報を含むものである。
なお、以下の説明では、サーバ#1〜#3のうちの任意のサーバを「サーバ#i」と表記する場合がある(i=1,2,3)。また、クライアント装置$1〜$4のうちの任意のクライアント装置を「クライアント装置$j」と表記する場合がある(j=1,2,3,4)。
(コンピュータのハードウェア構成)
つぎに、図2に示したサーバ#iおよびクライアント装置$j(ここでは、単に「コンピュータ」と称する)のハードウェア構成例について説明する。
図3は、コンピュータのハードウェア構成例を示すブロック図である。図3において、コンピュータは、CPU(Central Processing Unit)301と、メモリ302と、I/F(Interface)303と、磁気ディスクドライブ304と、磁気ディスク305と、を有する。また、各構成部は、バス300によってそれぞれ接続される。
ここで、CPU301は、コンピュータの全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
I/F303は、通信回線を通じてネットワーク220,230に接続され、ネットワーク220,230を介して他のコンピュータに接続される。そして、I/F303は、ネットワーク220,230と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。I/F303には、例えば、NIC(Network Interface Card)を採用することができる。
磁気ディスクドライブ304は、CPU301の制御にしたがって磁気ディスク305に対するデータのリード/ライトを制御する。磁気ディスク305は、磁気ディスクドライブ304の制御で書き込まれたデータを記憶する。
なお、コンピュータは、上述した構成部のほか、例えば、SSD(Solid State Drive)、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、図2に示した電源制御装置#1〜#3についても、上述したコンピュータと同様のハードウェア構成例により実現することができる。
(ハートビートHBの電文形式)
つぎに、実施の形態1にかかるハートビートHBの電文形式について説明する。ハートビートHBとは、ネットワーク上でコンピュータやネットワーク機器が、自身が正常に稼働していることを外部に知らせるために送る信号である。ハートビートHBは、例えば、業務LANを用いて、サーバ/クライアント装置間や異なるクラスタシステムのサーバ間で送受信される。また、ハートビートHBの送信間隔は、例えば、1〜5秒程度である。
以下の説明では、異常が発生した異常サーバとの通信を閉塞し、異常サーバが他の正常なサーバに影響を与えないようにすることを「隔離」と表記する場合がある。また、隔離の対象となるサーバを「隔離対象サーバ」と表記し、隔離解除の対象となるサーバを「隔離解除対象サーバ」と表記する場合がある。
図4は、ハートビートHBの電文形式の一例を示す説明図(その1)である。図4において、ハートビートHBは、ハートビート情報401と、隔離指示種別情報402と、を含む。ハートビート情報401は、自身が正常に稼働していることを示す情報であり、例えば、送信元のコンピュータ(サーバ#i、クライアント装置$j)を識別するノード番号やIPアドレスを含む。
隔離指示種別情報402は、ハートビートHBに隔離情報Dが付加されているか否かを示す情報である。隔離情報Dは、隔離対象サーバまたは隔離解除対象サーバを識別する情報である。隔離情報Dの具体例については、図5〜図8を用いて後述する。隔離指示種別情報402には、隔離指示種別「0」〜「4」のいずれかの隔離指示種別が設定される。
ここで、隔離指示種別「0」は、ハートビートHBに隔離情報Dが付加されていないことを示す。隔離指示種別「1」は、ハートビートHBに隔離情報Dが付加されていることを示し、隔離対象サーバの隔離要求を示す。隔離指示種別「2」は、ハートビートHBに隔離情報Dが付加されていることを示し、隔離要求に対する隔離応答を示す。
隔離指示種別「3」は、ハートビートHBに隔離情報Dが付加されていることを示し、隔離解除対象サーバの隔離解除要求を示す。隔離指示種別「4」は、ハートビートHBに隔離情報Dが付加されていることを示し、隔離解除要求に対する隔離解除応答を示す。
(ハートビートHBの具体例)
ここで、図5〜図8を用いて、ハートビートHBの具体例について説明する。
図5は、ハートビートHBの具体例を示す説明図(その1)である。図5において、ハートビートHB1は、サーバ#iが正常に稼働していることを報知する信号であり、ハートビート情報401と、隔離指示種別情報402と、隔離情報D1と、を含む。隔離指示種別情報402には、隔離対象サーバの隔離要求を示す隔離指示種別「1」が設定されている。隔離情報D1は、隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスを含む。
具体的には、図5中(5−1)に示すハートビートHB1は、隔離対象サーバのサーバ数が「1」の場合の例である。この場合、隔離情報D1には、隔離対象サーバのサーバ数「1」と隔離対象サーバ1のIPアドレスが設定される。また、図5中(5−2)に示すハートビートHB1は、隔離対象サーバのサーバ数が「2」の場合の例である。この場合、隔離情報D1には、隔離対象サーバのサーバ数「2」と隔離対象サーバ1,2のIPアドレスが設定される。
図6は、ハートビートHBの具体例を示す説明図(その2)である。図6において、ハートビートHB2は、クライアント装置$jが正常に稼働していることを報知する信号であり、ハートビート情報401と、隔離指示種別情報402と、隔離情報D2と、を含む。隔離指示種別情報402には、隔離要求に対する隔離応答を示す隔離指示種別「2」が設定されている。隔離情報D2は、クライアント装置$jにおいて隔離済みの隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスを含む。
ここで、図6中(6−1)に示すハートビートHB2は、隔離対象サーバのサーバ数が「1」の場合の例である。この場合、隔離情報D2には、隔離対象サーバのサーバ数「1」と隔離対象サーバ1のIPアドレスが設定される。また、図6中(6−2)に示すハートビートHB2は、隔離対象サーバのサーバ数が「2」の場合の例である。この場合、隔離情報D2には、隔離対象サーバのサーバ数「2」と隔離対象サーバ1,2のIPアドレスが設定される。
図7は、ハートビートHBの具体例を示す説明図(その3)である。図7において、ハートビートHB3は、サーバ#iが正常に稼働していることを報知する信号であり、ハートビート情報401と、隔離指示種別情報402と、隔離情報D3と、を含む。隔離指示種別情報402には、隔離解除対象サーバの隔離解除要求を示す隔離指示種別「3」が設定されている。隔離情報D3は、隔離解除対象サーバのサーバ数と隔離解除対象サーバのIPアドレスを含む。
具体的には、ハートビートHB3は、隔離解除対象サーバのサーバ数が「1」の場合の例である。この場合、隔離情報D3には、隔離解除対象サーバのサーバ数「1」と隔離解除対象サーバ1のIPアドレスが設定される。
図8は、ハートビートHBの具体例を示す説明図(その4)である。図8において、ハートビートHB4は、クライアント装置$jが正常に稼働していることを報知する信号であり、ハートビート情報401と、隔離指示種別情報402と、隔離情報D4と、を含む。隔離指示種別情報402には、隔離解除要求に対する隔離解除応答を示す隔離指示種別「4」が設定されている。隔離情報D4は、クライアント装置$jにおいて隔離解除済みサーバのサーバ数と隔離解除済みサーバのIPアドレスを含む。
具体的には、ハートビートHB4は、隔離解除済みサーバのサーバ数が「1」の場合の例である。この場合、隔離情報D4には、隔離解除済みサーバのサーバ数「1」と隔離解除済みサーバ1のIPアドレスが設定される。
(隔離状態管理テーブル900の記憶内容)
つぎに、サーバ#iが用いる隔離状態管理テーブル900の記憶内容について説明する。隔離状態管理テーブル900は、例えば、図3に示したサーバ#iのメモリ302により実現される。
図9は、隔離状態管理テーブル900の記憶内容の一例を示す説明図である。図9において、隔離状態管理テーブル900は、クライアントアドレスおよび完了状態のフィールドを有し、各フィールドに情報を設定することで、隔離状態管理情報900−1〜900−4をレコードとして記憶する。
ここで、クライアントアドレスは、サーバ#iに接続中のクライアント装置$jのIPアドレスである。完了状態は、クライアント装置$jにおける、隔離対象サーバに対する隔離処理または隔離解除対象サーバに対する隔離解除処理の完了状態を示す。完了状態「0」は、隔離処理/隔離解除処理が完了していない状態を示す。完了状態「1」は、隔離処理/隔離解除処理が完了または不要である状態を示す。
例えば、隔離状態管理情報900−1は、IPアドレス「IP_ADDRESS−1」のクライアント装置$jの完了状態が「0」であることを示しており、クライアント装置$jにおける隔離処理/隔離解除処理が完了していないことを示す。
なお、以下の説明では、クライアント装置$1のIPアドレスを「IP_ADDRESS−1」とし、クライアント装置$2のIPアドレスを「IP_ADDRESS−2」とする。また、クライアント装置$3のIPアドレスを「IP_ADDRESS−3」とし、クライアント装置$4のIPアドレスを「IP_ADDRESS−4」とする。
(隔離対象サーバリスト1000の記憶内容)
つぎに、サーバ#iおよびクライアント装置$jが用いる隔離対象サーバリスト1000の記憶内容について説明する。隔離対象サーバリスト1000は、例えば、図3に示したサーバ#iおよびクライアント装置$jのメモリ302により実現される。
図10は、隔離対象サーバリスト1000の記憶内容の一例を示す説明図である。図10において、隔離対象サーバリスト1000は、隔離対象サーバのIPアドレスを有する。ここでは、隔離対象サーバのIPアドレス「IP_ADDRESS−10」が設定されている。
なお、クライアント装置$jの隔離対象サーバリスト1000は、例えば、クライアント装置$jの起動時に作成され、クライアント装置$jの停止時に削除される。
(サーバ#iの機能的構成例)
図11は、サーバ#iの機能的構成例を示すブロック図である。図11において、サーバ#iは、検知部1101と、生成部1102と、送信部1103と、受信部1104と、判断部1105と、切替部1106と、受付部1107と、組込部1108と、を含む構成である。各機能部は、具体的には、例えば、図3に示したサーバ#iのメモリ302、磁気ディスク305などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F303により、その機能を実現する。各機能部の処理結果は、例えば、メモリ302、磁気ディスク305などの記憶装置に記憶される。
検知部1101は、現用系サーバ#kの異常を検知する機能を有する(k≠i、k=1,2,…)。図2の例では、現用系サーバ#kは、サーバ#1である(k=1)。具体的には、例えば、検知部1101は、管理LANを用いた現用系サーバ#kとの通信途絶を検知することにより、現用系サーバ#kの異常を検知することにしてもよい。
また、現用系サーバ#kの保守点検等を行うために、情報処理システム200の管理者等が現用系サーバ#kの動作を意図的に停止させる場合がある。このような場合、検知部1101は、例えば、管理者が使用する外部のコンピュータ(不図示)からの操作入力により、現用系サーバ#kの異常を検知することにしてもよい。
なお、検知結果は、例えば、図10に示した隔離対象サーバリスト1000に記憶される。具体的には、例えば、異常が検知された現用系サーバ#kのIPアドレスが、隔離対象サーバのIPアドレスとして隔離対象サーバリスト1000に登録される。ただし、異常が検知された現用系サーバ#kの隔離処理が完了した場合に、現用系サーバ#kのIPアドレスが隔離対象サーバリスト1000に登録されることにしてもよい。
また、サーバ#iは、現用系サーバ#kの異常を検知した場合、クラスタシステム210を構成するサーバ#1〜#3のうちの異常を検知した現用系サーバ#kを除くサーバ間で意識合わせを行って、サーバ間で現用系サーバ#kの異常を共有することにしてもよい。
生成部1102は、隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスとを含む隔離情報D1を生成する機能を有する。具体的には、例えば、生成部1102は、検知部1101によって現用系サーバ#kの異常が検知された場合、隔離対象サーバのIPアドレスとして、現用系サーバ#kのIPアドレスを設定した隔離情報D1を生成する。
この際、隔離対象サーバリスト1000に現用系サーバ#k以外の隔離対象サーバのIPアドレスが登録されている場合がある。この場合、生成部1102は、隔離対象サーバのIPアドレスとして、さらに、隔離対象サーバリスト1000に登録されているIPアドレスを設定した隔離情報D1を生成する。
送信部1103は、生成部1102によって生成された隔離情報D1をクライアント装置$jに送信する機能を有する。具体的には、例えば、送信部1103は、業務LANを用いて、隔離指示種別「1」を設定するとともに隔離情報D1を付加したハートビートHB1(例えば、図5参照)を接続中の全てのクライアント装置$1〜$4に送信する。
また、送信部1103は、検知部1101によって現用系サーバ#kの異常が検知されたことに応じて、現用系サーバ#kの電源を制御する電源制御装置#kに電源停止指示を送信する機能を有する。ここで、電源停止指示は、現用系サーバ#kの電源を停止するよう指示するものである。具体的には、例えば、送信部1103は、管理LANを用いて、現用系サーバ#kの電源制御装置#kに電源停止指示を送信する。
受信部1104は、クライアント装置$jにおいて隔離済みの隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスとを含む隔離情報D2をクライアント装置$jから受信する機能を有する。具体的には、例えば、受信部1104は、業務LANを用いて、隔離指示種別「2」が設定され、かつ、隔離情報D2が付加されたハートビートHB2(例えば、図6参照)をクライアント装置$jから受信する。
なお、サーバ#iは、クライアント装置$jから受信した隔離情報D2(ハートビートHB2)に自サーバのIPアドレスが含まれている場合、接続中の全てのクライアント装置$1〜$4との通信を切断することにしてもよい。これにより、サーバ#iは、異常が発生している自分自身を隔離することができる。
また、受信部1104は、現用系サーバ#kの電源制御装置#kから電源停止応答を受信する機能を有する。ここで、電源停止応答は、サーバ#iからの電源停止指示に応じて現用系サーバ#kの電源を停止したことを示すものである。具体的には、例えば、受信部1104は、管理LANを用いて、現用系サーバ#kの電源制御装置#kから電源停止応答を受信する。
判断部1105は、クライアント装置$jにおいて隔離対象サーバの隔離処理が完了したか否かを判断する機能を有する。具体的には、例えば、判断部1105は、クライアント装置$jからハートビートHB2が受信された場合に、クライアント装置$jにおいて隔離対象サーバの隔離処理が完了したと判断する。
判断結果は、例えば、図9に示した隔離状態管理テーブル900に記憶される。ここで、クライアント装置$1からハートビートHB2が受信された場合を想定する。この場合、判断部1105は、隔離状態管理テーブル900から、クライアントアドレスフィールドにクライアント装置$1のIPアドレス「IP_ADDRESS−1」が設定された隔離状態管理情報900−1を特定する。そして、判断部1105は、特定した隔離状態管理情報900−1の完了状態フィールドに「1」を設定する。これにより、隔離対象サーバの隔離処理が完了したクライアント装置$jを把握することができる。
また、判断部1105は、クライアント装置$jに隔離情報D1が送信されてから一定時間T経過しても、クライアント装置$jから隔離情報D2が受信されなかった場合、クライアント装置$jにおいて隔離対象サーバの隔離処理が不要であると判断する機能を有する。一定時間Tとしては、例えば、業務LANを用いたハートビート通信のタイムアウト時間T_outが設定される。具体的には、例えば、タイムアウト時間T_outは、5〜10秒程度の時間である。
ここで、タイムアウト時間T_outを経過してもクライアント装置$jからハートビートHBが受信されないということは、クライアント装置$jにおいて何らかの異常が発生している可能性がある。そこで、判断部1105は、例えば、クライアント装置$jにハートビートHB1が送信されてからタイムアウト時間T_outが経過しても、クライアント装置$jからハートビートHB2が受信されなかった場合、クライアント装置$jでの隔離処理が不要であると判断する。
切替部1106は、現用系サーバ#kの代わりにクライアント装置$jからの処理要求に応じた処理を実行する状態に変更する機能を有する。ここで、クライアント装置$jからの処理要求に応じた処理を実行する状態に変更するとは、自サーバが現用系サーバとなることである。
具体的には、例えば、切替部1106は、電源制御装置#kから電源停止応答を受信した場合、または、隔離対象サーバの隔離処理が完了した場合に、現用系サーバを、サーバ#kから自サーバに変更することにしてもよい。ここで、隔離対象サーバの隔離処理が完了した場合とは、サーバ#iと接続中の全てのクライアント装置$1〜$4において隔離対象サーバの隔離処理が「完了」または「不要」と判断された場合である。
一例として、異常が検知された現用系サーバ#kを「サーバ#1」とし、サーバ#iを「サーバ#2」とする。この場合、サーバ#2は、サーバ#1〜#3のうちの異常が検知されたサーバ#1を除くサーバ#3と通信することにより、新しく現用系サーバとなるサーバを決定する。そして、サーバ#2は、決定した現用系サーバが自サーバであれば、現用系サーバを自サーバに切り替える。
なお、サーバ#iは、現用系サーバが自サーバに切り替わったことをクライアント装置$1〜$4に通知することにしてもよい。これにより、クライアント装置$1〜$4が現用系サーバにアクセスする際に仮想IPを使わない場合であっても、クライアント装置$1〜$4が切替後の現用系サーバを認識することができる。
また、受信部1104は、クライアント装置$jから通信路の確立要求を受信する機能を有する。ここで、通信路の確立要求とは、例えば、業務LANを用いてサーバ/クライアント装置間でハートビートHBを送受信するセッションの確立要求である。具体的には、例えば、受信部1104は、ハートビートHB2を受信しなかったクライアント装置、または、クラスタシステム210に新規接続されたクライアント装置のいずれかのクライアント装置$jからセッションの確立要求を受信する。なお、ハートビートHB2を受信しなかったクライアント装置とは、例えば、ハングアップ等の半死状態から再び正常に稼働し始めたクライアント装置$jである。
また、送信部1103は、クライアント装置$jから通信路の確立要求を受信したことに応じて、クライアント装置$jに隔離情報D1を送信する機能を有する。具体的には、例えば、送信部1103は、セッションの確立要求に応じて確立される業務LANのセッションを用いて、要求元のクライアント装置$jにハートビートHB1を送信する。これにより、ハングアップ等の半死状態から再び正常に稼働し始めたクライアント装置$jや新規接続されたクライアント装置に対して、隔離対象サーバの隔離指示を通知することができる。
受付部1107は、組込対象サーバの指定を受け付ける機能を有する。ここで、組込対象サーバとは、クラスタシステム210に組み込むサーバである。例えば、組込対象サーバは、ハングアップ等の半死状態から再び正常に稼働し始めたサーバや、クラスタシステム210に新規に組み込まれるサーバである。
具体的には、例えば、受付部1107は、不図示のキーボートやマウスを用いたユーザの操作入力により、または、不図示の外部のコンピュータからの操作入力により、組込対象サーバの組込指示を受け付ける。また、受付部1107は、組込対象サーバから、組込対象サーバの組込指示を受け付けることにしてもよい。
また、生成部1102は、組込対象サーバが隔離対象サーバの場合、隔離解除対象サーバのサーバ数と隔離解除対象サーバのIPアドレスとを含む隔離情報D3を生成する機能を有する。具体的には、例えば、生成部1102は、隔離解除対象サーバのIPアドレスとして、組込対象サーバのIPアドレスを設定した隔離情報D3を生成する。
また、送信部1103は、生成部1102によって生成された隔離情報D3をクライアント装置$jに送信する機能を有する。具体的には、例えば、送信部1103は、業務LANを用いて、隔離指示種別「3」を設定するとともに隔離情報D3を付加したハートビートHB3(例えば、図7参照)を接続中の全てのクライアント装置$1〜$4に送信する。
また、受信部1104は、クライアント装置$jにおいて隔離解除済みの隔離解除対象サーバのサーバ数と隔離解除対象サーバのIPアドレスとを含む隔離情報D4をクライアント装置$jから受信する機能を有する。具体的には、例えば、受信部1104は、業務LANを用いて、隔離指示種別「4」が設定され、かつ、隔離情報D4が付加されたハートビートHB4(例えば、図8参照)をクライアント装置$jから受信する。
また、判断部1105は、クライアント装置$jにおいて隔離解除対象サーバの隔離解除処理が完了したか否かを判断する機能を有する。具体的には、例えば、判断部1105は、クライアント装置$jからハートビートHB4が受信された場合に、クライアント装置$jにおいて隔離解除対象サーバの隔離解除処理が完了したと判断する。
判断結果は、例えば、図9に示した隔離状態管理テーブル900に記憶される。ここで、クライアント装置$1からハートビートHB4が受信された場合を想定する。この場合、判断部1105は、隔離状態管理テーブル900から、クライアントアドレスフィールドにクライアント装置$1のIPアドレス「IP_ADDRESS−1」が設定された隔離状態管理情報900−1を特定する。そして、判断部1105は、特定した隔離状態管理情報900−1の完了状態フィールドに「1」を設定する。これにより、隔離解除対象サーバの隔離解除処理が完了したクライアント装置$jを把握することができる。
また、判断部1105は、クライアント装置$jに隔離情報D3が送信されてから一定時間T経過しても、クライアント装置$jから隔離情報D4が受信されなかった場合、クライアント装置$jにおいて隔離解除対象サーバの隔離解除処理が不要であると判断する。一定時間Tは、例えば、業務LANを用いたハートビート通信のタイムアウト時間T_outである。
具体的には、例えば、判断部1105は、クライアント装置$jにハートビートHB3が送信されてからタイムアウト時間T_outが経過しても、クライアント装置$jからハートビートHB4が受信されなかった場合、クライアント装置$jでの隔離解除処理が不要であると判断する。
組込部1108は、クラスタシステム210に組込対象サーバを組み込む機能を有する。具体的には、例えば、組込部1108は、クラスタシステム210を構成するサーバ#1〜#3のうちの隔離対象サーバを除くサーバ間で意識合わせを行って、クラスタシステム210に組込対象サーバを組み込む。
また、組込部1108は、組込対象サーバが隔離対象サーバのときは、隔離解除対象サーバの隔離解除処理が完了した場合に、クラスタシステム210に組込対象サーバを組み込む。ここで、隔離解除対象サーバの隔離解除処理が完了した場合とは、サーバ#iと接続中の全てのクライアント装置$1〜$4において隔離解除対象サーバの隔離解除処理が「完了」または「不要」と判断された場合である。
なお、サーバ#iのクラスタ制御部#i(図2参照)は、例えば、検知部1101、生成部1102、送信部1103、受信部1104、切替部1106、受付部1107、組込部1108により実現される。また、サーバ#iの通信制御部#iは、例えば、送信部1103、受信部1104、判断部1105により実現される。
(クライアント装置$jの機能的構成例)
図12は、クライアント装置$jの機能的構成例を示すブロック図である。図12において、クライアント装置$jは、受信部1201と、隔離部1202と、生成部1203と、送信部1204と、を含む構成である。各機能部は、具体的には、例えば、図3に示したクライアント装置$jのメモリ302、磁気ディスク305などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、I/F303により、その機能を実現する。各機能部の処理結果は、例えば、メモリ302、磁気ディスク305などの記憶装置に記憶される。
受信部1201は、サーバ#iから隔離情報D1を受信する機能を有する。具体的には、例えば、受信部1201は、業務LANを用いて、隔離指示種別「1」が設定され、かつ、隔離情報D1が付加されたハートビートHB1(例えば、図5参照)をサーバ#iから受信する。
隔離部1202は、隔離情報D1を受信したことに応じて、隔離情報D1から特定される現用系サーバ#kの隔離処理を実行する機能を有する。ここで、隔離処理とは、隔離情報D1から特定される現用系サーバ#kからのデータを破棄する状態に変更する処理である。
具体的には、例えば、隔離部1202は、ハートビートHB1に付加された隔離情報D1から特定される隔離対象サーバのIPアドレスを隔離対象サーバリスト1000(図10参照)に登録する。これにより、クライアント装置$jは、隔離対象サーバリスト1000から隔離対象サーバのIPアドレスを特定して、隔離対象サーバのIPアドレスを送信元のIPアドレスとするデータを破棄することができる。
すなわち、処理要求の送信時に仮想IPアドレスを使用する場合であっても、サーバからの応答は各サーバから受信できるため、クライアント装置$jでサーバからの応答を受信する際に、異常サーバからの応答を破棄することができる。なお、隔離部1202は、隔離対象サーバリスト1000に登録した隔離対象サーバとのコネクションを切断することにしてもよい。
生成部1203は、隔離済みの隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスとを含む隔離情報D2を生成する機能を有する。具体的には、例えば、生成部1203は、隔離対象サーバリスト1000に登録されている隔離対象サーバのサーバ数とIPアドレスを設定した隔離情報D2を生成する。
送信部1204は、生成部1203によって生成された隔離情報D2をサーバ#iに送信する機能を有する。具体的には、例えば、送信部1204は、隔離対象サーバの隔離処理が完了した場合、業務LANを用いて、隔離指示種別「2」を設定するとともに隔離情報D2を付加したハートビートHB2(例えば、図6参照)をサーバ#iに送信する。
この際、送信部1204は、サーバ#1〜#3に割り振られた仮想IPアドレスを用いて、異常が検知された現用系サーバ#kを含む全てのサーバ#1〜#3にハートビートHB2を送信することにしてもよい。これにより、例えば、異常が検知された現用系サーバ#kは、ハートビートHB2を受信することができる状態であれば、自身が異常であることを認識することができる。
また、受信部1201は、サーバ#iから隔離情報D3を受信する機能を有する。具体的には、例えば、受信部1201は、業務LANを用いて、隔離指示種別「3」が設定され、かつ、隔離情報D3が付加されたハートビートHB3(例えば、図7参照)をサーバ#iから受信する。
また、隔離部1202は、隔離情報D3を受信したことに応じて、隔離情報D3から特定される隔離解除対象サーバの隔離解除処理を実行する機能を有する。ここで、隔離解除処理とは、隔離情報D3から特定される隔離解除対象サーバからのデータを破棄する状態を解除する処理である。
具体的には、例えば、隔離部1202は、ハートビートHB3に付加された隔離情報D3から特定される隔離解除対象サーバのIPアドレスを隔離対象サーバリスト1000から削除する。これにより、以降において、クライアント装置$jは、隔離解除対象サーバからのデータを受け付けることができる。この際、隔離解除対象サーバとのコネクションが切断されている場合は、隔離部1202は、隔離解除対象サーバとのコネクションを確立することにしてもよい。
生成部1203は、隔離解除済みの隔離解除対象サーバのサーバ数と隔離解除対象サーバのIPアドレスとを含む隔離情報D4を生成する機能を有する。具体的には、例えば、生成部1203は、隔離対象サーバリスト1000から削除された隔離解除対象サーバのサーバ数とIPアドレスを設定した隔離情報D4を生成する。
送信部1204は、生成部1203によって生成された隔離情報D4をサーバ#iに送信する機能を有する。具体的には、例えば、送信部1204は、隔離解除対象サーバの隔離解除処理が完了した場合、業務LANを用いて、隔離指示種別「4」を設定するとともに隔離情報D4を付加したハートビートHB4(例えば、図8参照)をサーバ#iに送信する。
なお、クライアント装置$jの通信制御部$jは、例えば、受信部1201、隔離部1202、生成部1203、送信部1204により実現される。
(フェイルオーバー実施時の動作例)
つぎに、図13〜図15を用いて、フェイルオーバー実施時の情報処理システム200の動作例について説明する。ここでは、切替元サーバ(現用系サーバ#k)を「サーバ#1」とし、切替先サーバ(待機系サーバ#i)を「サーバ#2」とする。
図13は、フェイルオーバー実施時の動作例を示す説明図(その1)である。図13において、(13−1)サーバ#2のクラスタ制御部#2は、現用系サーバ#1の異常を検知する。(13−2)クラスタ制御部#2は、現用系サーバ#1の電源制御装置#1に電源停止指示を送信するとともに、サーバ#2の通信制御部#2に全クライアント装置$1〜$4に対する現用系サーバ#1の隔離指示を依頼する。
ここでは、現用系サーバ#1の電源制御装置#1が正常に動作可能であり、電源制御装置#1に至るネットワークに異常がない場合を想定する。
(13−3)現用系サーバ#1の電源制御装置#1は、サーバ#2から電源停止指示を受信した場合、現用系サーバ#1の電源を停止する。(13−4)電源制御装置#1は、現用系サーバ#1の電源を停止した場合、サーバ#2に電源停止応答を送信する。
(13−5)クラスタ制御部#2は、電源制御装置#1から電源停止応答を受信した場合、現用系サーバを、サーバ#1から自サーバ#2に変更する。(13−6)通信制御部#2は、クラスタ制御部#2からの隔離指示に応じて、業務LANを用いて、接続中の全てのクライアント装置$1〜$4にハートビートHB1を送信する。
ここでは、各クライアント装置$1〜$4が正常に動作可能であり、各クライアント装置$1〜$4に至るネットワークに異常がない場合を想定する。
(13−7)各クライアント装置$1〜$4は、サーバ#2からハートビートHB1を受信したことに応じて、現用系サーバ#1の隔離処理を実行する。(13−8)各クライアント装置$1〜$4は、現用系サーバ#1の隔離処理が完了した場合、業務LANを用いて、サーバ#2にハートビートHB2を送信する。
(13−9)通信制御部#2は、接続中の全てのクライアント装置$1〜$4からハートビートHB2を受信した場合、現用系サーバ#1の隔離処理完了通知をクラスタ制御部#2に送信する。(13−10)クラスタ制御部#2は、現用系サーバの切替処理が完了している場合、通信制御部#2からの隔離処理完了通知を破棄する。
このように、電源制御装置#1による現用系サーバ#1の電源停止処理が全クライアント装置$1〜$4における現用系サーバ#1の隔離処理よりも早く完了する場合(応答時間S1<応答時間S2)、電源制御装置#1から電源停止応答を受信したタイミングでサーバ切替が行われる。
図14は、フェイルオーバー実施時の動作例を示す説明図(その2)である。図14において、(14−1)サーバ#2のクラスタ制御部#2は、現用系サーバ#1の異常を検知する。(14−2)クラスタ制御部#2は、現用系サーバ#1の電源制御装置#1に電源停止指示を送信するとともに、サーバ#2の通信制御部#2に全クライアント装置$1〜$4に対する現用系サーバ#1の隔離指示を依頼する。
ここでは、現用系サーバ#1の電源制御装置#1が正常に動作可能であり、電源制御装置#1に至るネットワークに異常がない場合を想定する。また、各クライアント装置$1〜$4が正常に動作可能であり、各クライアント装置$1〜$4に至るネットワークに異常がない場合を想定する。
(14−3)通信制御部#2は、クラスタ制御部#2からの隔離指示に応じて、業務LANを用いて、接続中の全てのクライアント装置$1〜$4にハートビートHB1を送信する。(14−4)各クライアント装置$1〜$4は、サーバ#2からハートビートHB1を受信したことに応じて、現用系サーバ#1の隔離処理を実行する。
(14−5)各クライアント装置$1〜$4は、現用系サーバ#1の隔離処理が完了した場合、業務LANを用いて、サーバ#2にハートビートHB2を送信する。(14−6)通信制御部#2は、接続中の全てのクライアント装置$1〜$4からハートビートHB2を受信した場合、現用系サーバ#1の隔離処理完了通知をクラスタ制御部#2に送信する。
(14−7)クラスタ制御部#2は、通信制御部#2から隔離処理完了通知を受信した場合、現用系サーバを、サーバ#1から自サーバ#2に変更する。
(14−8)現用系サーバ#1の電源制御装置#1は、サーバ#2から電源停止指示を受信した場合、現用系サーバ#1の電源を停止する。(14−9)電源制御装置#1は、現用系サーバ#1の電源を停止した場合、サーバ#2に電源停止応答を送信する。(14−10)クラスタ制御部#2は、現用系サーバの切替処理を完了している場合、電源制御装置#1からの電源停止応答を破棄する。
このように、全クライアント装置$1〜$4における現用系サーバ#1の隔離処理が電源制御装置#1による現用系サーバ#1の電源停止処理よりも早く完了する場合(応答時間S2<応答時間S1)、通信制御部#2から隔離処理完了通知を受信したタイミングでサーバ切替が行われる。
なお、現用系サーバ#1の電源制御装置#1または電源制御装置#1に至るネットワークに異常が発生した場合も上記同様のシーケンスとなる。この場合、応答時間S1は、電源制御装置#1のタイムアウト時間T1となる(S1<T1)。すなわち、電源制御装置#1による電源停止処理の処理遅延や異常が発生したとしても、応答時間S2(S2<T1)内に確実にサーバ切替を完了することができる。
図15は、フェイルオーバー実施時の動作例を示す説明図(その3)である。図15において、(15−1)サーバ#2のクラスタ制御部#2は、現用系サーバ#1の異常を検知する。(15−2)クラスタ制御部#2は、現用系サーバ#1の電源制御装置#1に電源停止指示を送信するとともに、サーバ#2の通信制御部#2に全クライアント装置$1〜$4に対する現用系サーバ#1の隔離指示を依頼する。
ここでは、現用系サーバ#1の電源制御装置#1が正常に動作可能であり、電源制御装置#1に至るネットワークに異常がない場合を想定する。また、クライアント装置$1〜$4またはクライアント装置$1〜$4に至るネットワークに異常が発生した場合を想定する。
(15−3)通信制御部#2は、クラスタ制御部#2からの隔離指示に応じて、業務LANを用いて、接続中の全てのクライアント装置$1〜$4にハートビートHB1を送信する。(15−4)通信制御部#2は、クライアント装置$1〜$4にハートビートHBを送信してからタイムアウト時間T2を経過しても全クライアント装置$1〜$4から応答(ハートビートHB2)がない場合、現用系サーバ#1の隔離処理完了通知をクラスタ制御部#2に送信する。なお、タイムアウト時間T2は、上述したタイムアウト時間T_outである。
(15−5)クラスタ制御部#2は、通信制御部#2から隔離処理完了通知を受信した場合、現用系サーバを、サーバ#1から自サーバ#2に変更する。
(15−6)現用系サーバ#1の電源制御装置#1は、サーバ#2から電源停止指示を受信した場合、現用系サーバ#1の電源を停止する。(15−7)電源制御装置#1は、現用系サーバ#1の電源を停止した場合、サーバ#2に電源停止応答を送信する。(15−8)クラスタ制御部#2は、現用系サーバの切替処理を完了している場合、電源制御装置#1からの電源停止応答を破棄する。
このように、全クライアント装置$1〜$4における現用系サーバ#1の隔離処理が電源制御装置#1による現用系サーバ#1の電源停止処理よりも早く完了する場合(応答時間T2<応答時間S1)、通信制御部#2から隔離処理完了通知を受信したタイミングでサーバ切替が行われる。
なお、現用系サーバ#1の電源制御装置#1または電源制御装置#1に至るネットワークに異常が発生した場合も上記同様のシーケンスとなる。この場合、応答時間S1は、電源制御装置#1のタイムアウト時間T1となる(S1<T1)。すなわち、電源制御装置#1による電源停止処理の処理遅延や異常が発生したとしても、応答時間T2(T2<T1)内に確実にサーバ切替を完了することができる。
(情報処理システム200の各種処理手順)
つぎに、実施の形態1にかかる情報処理システム200の各種処理手順について説明する。まず、待機系サーバの第1切替処理手順について説明する。第1切替処理は、待機系サーバが新しく現用系サーバ(切替先サーバ)となる場合の処理である。
<待機系サーバの第1切替処理手順>
図16は、待機系サーバの第1切替処理手順の一例を示すフローチャートである。図16のフローチャートにおいて、まず、サーバ#iのクラスタ制御部#iは、現用系サーバ#kの異常を検知したか否かを判断する(ステップS1601)。
ここで、クラスタ制御部#iは、現用系サーバ#kの異常を検知するのを待つ(ステップS1601:No)。そして、クラスタ制御部#iは、現用系サーバ#kの異常を検知した場合(ステップS1601:Yes)、待機系サーバ間で通信することにより、待機系サーバ間で現用系サーバ#kの異常を共有する(ステップS1602)。
つぎに、クラスタ制御部#iは、隔離対象サーバリスト1000を参照して、隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスとを含む隔離情報D1を生成する(ステップS1603)。そして、クラスタ制御部#iは、現用系サーバ#kの電源制御装置#kに電源停止指示を送信するとともに、通信制御部#iに隔離対象サーバの隔離指示を送信する(ステップS1604)。
つぎに、通信制御部#iは、隔離対象サーバの隔離処理を実行する(ステップS1605)。そして、クラスタ制御部#iは、電源制御装置#kからの電源停止応答または通信制御部#iからの隔離処理完了通知を受信したか否かを判断する(ステップS1606)。
ここで、クラスタ制御部#iは、電源停止応答または隔離処理完了通知を受信するのを待つ(ステップS1606:No)。そして、クラスタ制御部#iは、電源停止応答または隔離処理完了通知を受信した場合(ステップS1606:Yes)、待機系サーバ間で通信することにより、サーバ状態(現用系サーバ、待機系サーバ、隔離対象サーバ)を共有する(ステップS1607)。
つぎに、クラスタ制御部#iは、現用系サーバをサーバ#kから自サーバ#iに切り替える(ステップS1608)。そして、クラスタ制御部#iは、隔離対象サーバリスト1000に隔離対象サーバのIPアドレスを登録して(ステップS1609)、本フローチャートによる一連の処理を終了する。
これにより、電源制御装置#kからの電源停止応答を受信したこと、または、クライアント装置$1〜$4での隔離対象サーバの隔離処理が「完了」あるいは「不要」となったことに応じて、隔離対象サーバの隔離処理を完了することができる。また、現用系サーバをサーバ#kから自サーバ#iに切り替えることができる。
なお、ステップS1604において、クラスタ制御部#iは、電源停止指示の送信処理および隔離指示の送信処理を並列に実行することにしたが、これに限らない。例えば、クラスタ制御部#iは、現用系サーバ#kの電源制御装置#kに電源停止指示を送信した後に、通信制御部#iに隔離対象サーバの隔離指示を送信することにしてもよい。また、クラスタ制御部#iは、通信制御部#iに隔離対象サーバの隔離指示を送信した後に、現用系サーバ#kの電源制御装置#kに電源停止指示を送信することにしてもよい。
つぎに、図17および図18を用いて、図16に示したステップS1605の隔離処理の具体的な処理手順について説明する。
図17および図18は、待機系サーバの隔離処理手順の一例を示すフローチャートである。図17のフローチャートにおいて、まず、サーバ#iの通信制御部#iは、隔離状態管理テーブル900を作成して初期化する(ステップS1701)。つぎに、通信制御部#iは、接続中のクライアント装置$1〜$4からいずれかのクライアント装置$jを選択する(ステップS1702)。
そして、通信制御部#iは、クライアント装置$jに対するハートビートHBを作成する(ステップS1703)。つぎに、通信制御部#iは、作成したハートビートHBに隔離指示種別「1」を設定するとともに隔離情報D1を付加する(ステップS1704)。そして、通信制御部#iは、業務LANを用いて、ハートビートHBをクライアント装置$jに送信する(ステップS1705)。
つぎに、通信制御部#iは、接続中のクライアント装置$1〜$4から選択されていない未選択のクライアント装置があるか否かを判断する(ステップS1706)。ここで、未選択のクライアント装置がある場合(ステップS1706:Yes)、通信制御部#iは、ステップS1702に戻る。
一方、未選択のクライアント装置がない場合(ステップS1706:No)、通信制御部#iは、図18に示すステップS1801に移行する。
図18のフローチャートにおいて、まず、通信制御部#iは、受信処理開始時刻t1を取得する(ステップS1801)。受信処理開始時刻t1は、例えば、この時点の現在時刻である。つぎに、通信制御部#iは、クライアント装置$jからハートビートHBを受信したか否かを判断する(ステップS1802)。
ここで、通信制御部#iは、クライアント装置$jからハートビートHBを受信するのを待つ(ステップS1802:No)。そして、通信制御部#iは、クライアント装置$jからハートビートHBを受信した場合(ステップS1802:Yes)、受信したハートビートHBに隔離指示種別「2」が設定されているか否かを判断する(ステップS1803)。
ここで、隔離指示種別「2」が設定されていない場合(ステップS1803:No)、通信制御部#iは、ステップS1802に戻る。一方、隔離指示種別「2」が設定されている場合(ステップS1803:Yes)、通信制御部#iは、隔離状態管理テーブル900のクライアント装置$jの完了状態に「1」を設定する(ステップS1804)。
つぎに、通信制御部#iは、隔離状態管理テーブル900を参照して、全てのクライアント装置$1〜$4の完了状態が「1」となっているか否かを判断する(ステップS1805)。ここで、全てのクライアント装置$1〜$4の完了状態が「1」となっている場合(ステップS1805:Yes)、通信制御部#iは、隔離対象サーバの隔離は「成功」と判断して(ステップS1806)、ステップS1810に移行する。
一方、全てのクライアント装置$1〜$4の完了状態が「1」となっていない場合(ステップS1805:No)、通信制御部#iは、現在時刻t2を取得する(ステップS1807)。そして、通信制御部#iは、受信処理開始時刻t1から現在時刻t2までの経過時間がタイムアウト時間T_out未満か否かを判断する(ステップS1808)。
ここで、タイムアウト時間T_out未満の場合(ステップS1808:Yes)、通信制御部#iは、ステップS1802に戻る。一方、タイムアウト時間T_out以上の場合(ステップS1808:No)、通信制御部#iは、隔離対象サーバの隔離は「不要」と判断する(ステップS1809)。
つぎに、通信制御部#iは、クラスタ制御部#iに隔離処理完了通知を送信する(ステップS1810)。そして、通信制御部#iは、隔離状態管理テーブル900を削除して(ステップS1811)、隔離処理を呼び出したステップに戻る。
これにより、接続中の全てのクライアント装置$1〜$4において隔離対象サーバの隔離処理が「完了」または「不要」と判断したことに応じて、隔離対象サーバの隔離処理を完了することができる。
<待機系サーバの第2切替処理手順>
つぎに、待機系サーバの第2切替処理手順について説明する。第2切替処理は、待機系サーバが新しく現用系サーバ(切替先サーバ)とならない場合の処理である。
図19は、待機系サーバの第2切替処理手順の一例を示すフローチャートである。図19のフローチャートにおいて、まず、サーバ#iのクラスタ制御部#iは、現用系サーバ#kの異常を検知したか否かを判断する(ステップS1901)。
ここで、クラスタ制御部#iは、現用系サーバ#kの異常を検知するのを待つ(ステップS1901:No)。そして、クラスタ制御部#iは、現用系サーバ#kの異常を検知した場合(ステップS1901:Yes)、待機系サーバ間で通信することにより、待機系サーバ間で現用系サーバ#kの異常を共有する(ステップS1902)。
つぎに、クラスタ制御部#iは、隔離対象サーバリスト1000を参照して、隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスとを含む隔離情報D1を生成する(ステップS1903)。そして、クラスタ制御部#iは、通信制御部#iに隔離対象サーバの隔離指示を送信する(ステップS1904)。
つぎに、通信制御部#iは、隔離対象サーバの隔離処理を実行する(ステップS1905)。そして、クラスタ制御部#iは、通信制御部#iからの隔離処理完了通知を受信したか否かを判断する(ステップS1906)。
ここで、クラスタ制御部#iは、隔離処理完了通知を受信するのを待つ(ステップS1906:No)。そして、クラスタ制御部#iは、隔離処理完了通知を受信した場合(ステップS1906:Yes)、待機系サーバ間で通信することにより、サーバ状態(現用系サーバ、待機系サーバ、隔離対象サーバ)を共有する(ステップS1907)。
つぎに、クラスタ制御部#iは、隔離対象サーバリスト1000に隔離対象サーバのIPアドレスを登録して(ステップS1908)、本フローチャートによる一連の処理を終了する。
これにより、クライアント装置$1〜$4での隔離対象サーバの隔離処理が「完了」あるいは「不要」となったことに応じて、隔離対象サーバの隔離処理を完了することができる。
<クライアント装置$jのハートビート受信処理手順>
つぎに、図20を用いて、クライアント装置$jのハートビート受信処理手順について説明する。
図20は、クライアント装置$jのハートビート受信処理手順の一例を示すフローチャート(その1)である。図20のフローチャートにおいて、まず、クライアント装置$jは、サーバ#iからハートビートHBを受信したか否かを判断する(ステップS2001)。
ここで、クライアント装置$jは、サーバ#iからハートビートHBを受信するのを待つ(ステップS2001:No)。そして、クライアント装置$jは、サーバ#iからハートビートHBを受信した場合(ステップS2001:Yes)、ハートビート監視処理を実行する(ステップS2002)。ハートビート監視処理は、コネクション監視や異常判断などを行う処理である。
つぎに、クライアント装置$jは、隔離対象サーバリスト1000を参照して、受信したハートビートHBが、既知の隔離対象サーバからのハートビートHBか否かを判断する(ステップS2003)。ここで、既知の隔離対象サーバからのハートビートHBの場合(ステップS2003:Yes)、クライアント装置$jは、本フローチャートによる一連の処理を終了する。
一方、既知の隔離対象サーバからのハートビートHBではない場合(ステップS2003:No)、クライアント装置$jは、ハートビートHBに隔離指示種別「1」が設定されているか否かを判断する(ステップS2004)。ここで、隔離指示種別「1」が設定されていない場合(ステップS2004:No)、クライアント装置$jは、本フローチャートによる一連の処理を終了する。
一方、隔離指示種別「1」が設定されている場合(ステップS2004:Yes)、クライアント装置$jは、隔離情報D1に含まれる隔離対象サーバのIPアドレスを隔離対象サーバリスト1000に上書きする(ステップS2005)。そして、クライアント装置$jは、隔離指示フラグを「0」から「1」に変更して(ステップS2006)、本フローチャートによる一連の処理を終了する。
これにより、サーバ#iからのハートビートHBに付加されている隔離情報D1から特定される隔離対象サーバを隔離することができる。
<クライアント装置$jのハートビート送信処理手順>
つぎに、図21を用いて、クライアント装置$jのハートビート送信処理手順について説明する。
図21は、クライアント装置$jのハートビート送信処理手順の一例を示すフローチャート(その1)である。図21のフローチャートにおいて、まず、クライアント装置$jは、サーバ#iに対するハートビートHBを作成する(ステップS2101)。つぎに、クライアント装置$jは、隔離指示フラグが「1」か否かを判断する(ステップS2102)。
ここで、隔離指示フラグが「0」の場合(ステップS2102:No)、クライアント装置$jは、業務LANを用いて、作成したハートビートHBをサーバ#iに送信して(ステップS2103)、本フローチャートによる一連の処理を終了する。
一方、隔離指示フラグが「1」の場合(ステップS2102:Yes)、クライアント装置$jは、隔離対象サーバリスト1000に登録されている隔離対象サーバのサーバ数とIPアドレスを設定した隔離情報D2を生成する(ステップS2104)。
そして、クライアント装置$jは、作成したハートビートHBに隔離指示種別「2」を設定するとともに隔離情報D2を付加する(ステップS2105)。つぎに、クライアント装置$jは、業務LANを用いて、ハートビートHBをサーバ#iに送信する(ステップS2106)。
そして、クライアント装置$jは、隔離指示フラグを「1」から「0」に変更して(ステップS2107)、本フローチャートによる一連の処理を終了する。これにより、隔離対象サーバの隔離処理が完了したことを示す隔離指示応答をサーバ#iに通知することができる。
<クライアント装置$jのデータ処理手順>
つぎに、図22を用いて、クライアント装置$jのデータ処理手順について説明する。
図22は、クライアント装置$jのデータ処理手順の一例を示すフローチャートである。図22のフローチャートにおいて、まず、クライアント装置$jは、サーバ#iからデータを受信したか否かを判断する(ステップS2201)。
ここで、クライアント装置$jは、サーバ#iからデータを受信するのを待つ(ステップS2201:No)。そして、クライアント装置$jは、サーバ#iからデータを受信した場合(ステップS2201:Yes)、受信したデータの送信元アドレスを特定する(ステップS2202)。
つぎに、クライアント装置$jは、特定した送信元アドレスが隔離対象サーバリスト1000に登録されているか否かを判断する(ステップS2203)。ここで、隔離対象サーバリスト1000に登録されている場合(ステップS2203:Yes)、クライアント装置$jは、受信したデータを破棄する(ステップS2204)。
そして、クライアント装置$jは、サーバ#iとのコネクションを切断して(ステップS2205)、本フローチャートによる一連の処理を終了する。これにより、隔離対象サーバからのデータを破棄することができる。
また、ステップS2203において、隔離対象サーバリスト1000に登録されていない場合(ステップS2203:No)、クライアント装置$jは、データの受信処理を完了して(ステップS2206)、本フローチャートによる一連の処理を終了する。
<サーバ#iのハートビート受信処理手順>
つぎに、図23を用いて、サーバ#iのハートビート受信処理手順について説明する。
図23は、サーバ#iのハートビート受信処理手順の一例を示すフローチャートである。図23のフローチャートにおいて、まず、サーバ#iは、クライアント装置$jからハートビートHBを受信したか否かを判断する(ステップS2301)。
ここで、サーバ#iは、クライアント装置$jからハートビートHBを受信するのを待つ(ステップS2301:No)。そして、サーバ#iは、クライアント装置$jからハートビートHBを受信した場合(ステップS2301:Yes)、受信したハートビートHBに隔離指示種別「2」が設定されているか否かを判断する(ステップS2302)。
ここで、隔離指示種別「2」が設定されていない場合(ステップS2302:No)、サーバ#iは、ハートビート監視処理を実行して(ステップS2303)、本フローチャートによる一連の処理を終了する。
一方、隔離指示種別「2」が設定されている場合(ステップS2302:Yes)、サーバ#iは、ハートビートHBに付加された隔離情報D2を参照して、自サーバが隔離対象サーバか否かを判断する(ステップS2304)。ここで、自サーバが隔離対象サーバではない場合(ステップS2304:No)、サーバ#iは、ステップS2303に移行する。
一方、自サーバが隔離対象サーバの場合(ステップS2304:Yes)、サーバ#iは、接続中の全てのクライアント装置$1〜$4との通信を切断する(ステップS2305)。そして、サーバ#iは、業務LANを用いたハートビート監視を終了して(ステップS2306)、本フローチャートによる一連の処理を終了する。
これにより、クライアント装置$jからのハートビートHBに付加されている隔離情報D2から自サーバが隔離対象サーバか否かを判断でき、自サーバが隔離対象サーバの場合は、接続中の全てのクライアント装置$1〜$4との通信を切断することができる。
<現用系サーバの組込処理手順>
つぎに、図24を用いて、現用系サーバの組込処理手順について説明する。この組込処理は、現用系サーバが組込対象サーバの組込指示を受け付けた場合の処理である。なお、組込対象サーバは、情報処理システム200の管理者等により起動済みである場合を想定する。
図24は、現用系サーバの組込処理手順の一例を示すフローチャートである。図24のフローチャートにおいて、まず、サーバ#iは、組込対象サーバの組込指示を受け付けたか否かを判断する(ステップS2401)。
ここで、サーバ#iは、組込対象サーバの組込指示を受け付けるのを待つ(ステップS2401:No)。そして、サーバ#iは、組込対象サーバの組込指示を受け付けた場合(ステップS2401:Yes)、待機系サーバと通信することにより、サーバ間で組込対象サーバを共有する(ステップS2402)。
つぎに、サーバ#iは、組込対象サーバが隔離対象サーバリスト1000に登録されているか否かを判断する(ステップS2403)。ここで、組込対象サーバが隔離対象サーバリスト1000に登録されていない場合(ステップS2403:No)、サーバ#iは、ステップS2405に移行する。
一方、組込対象サーバが隔離対象サーバリスト1000に登録されている場合(ステップS2403:Yes)、サーバ#iは、組込対象サーバの隔離解除処理を実行する(ステップS2404)。そして、サーバ#iは、組込対象サーバの組込処理を実行する(ステップS2405)。組込処理は、組込対象サーバをクラスタシステム210に組み込む処理である。
つぎに、サーバ#iは、隔離対象サーバリスト1000を更新する(ステップS2406)。具体的には、例えば、サーバ#iは、組込対象サーバが隔離対象サーバリスト1000に登録されている場合に、隔離対象サーバリスト1000から組込対象サーバを削除する。
そして、サーバ#iは、待機系サーバと通信することにより、組込対象サーバの組込処理を完了して(ステップS2407)、本フローチャートによる一連の処理を終了する。これにより、組込対象サーバをクラスタシステム210に組み込むことができる。
なお、待機系サーバの組込処理手順については、上述した現用系サーバの組込処理手順と同様のため図示および説明を省略する。具体的には、例えば、待機系サーバは、ステップS2402において、現用系サーバと通信した後は、ステップS2403〜S2407と同様の処理を行う。
つぎに、図25および図26を用いて、図24に示したステップS2404の隔離解除処理の具体的な処理手順について説明する。
図25および図26は、現用系サーバの隔離解除処理手順の一例を示すフローチャートである。図25のフローチャートにおいて、まず、サーバ#iは、隔離解除対象サーバのサーバ数と隔離解除対象サーバのIPアドレスとを含む隔離情報D3を生成する(ステップS2501)。なお、隔離解除対象サーバは、隔離対象サーバリスト1000に登録されている組込対象サーバである。
そして、サーバ#iは、隔離状態管理テーブル900を作成して初期化する(ステップS2502)。つぎに、サーバ#iは、接続中のクライアント装置$1〜$4からいずれかのクライアント装置$jを選択する(ステップS2503)。
そして、サーバ#iは、クライアント装置$jに対するハートビートHBを作成する(ステップS2504)。つぎに、サーバ#iは、作成したハートビートHBに隔離指示種別「3」を設定するとともに隔離情報D3を付加する(ステップS2505)。そして、サーバ#iは、業務LANを用いて、ハートビートHBをクライアント装置$jに送信する(ステップS2506)。
つぎに、サーバ#iは、接続中のクライアント装置$1〜$4から選択されていない未選択のクライアント装置があるか否かを判断する(ステップS2507)。ここで、未選択のクライアント装置がある場合(ステップS2507:Yes)、サーバ#iは、ステップS2503に戻る。
一方、未選択のクライアント装置がない場合(ステップS2507:No)、サーバ#iは、図26に示すステップS2601に移行する。
図26のフローチャートにおいて、まず、サーバ#iは、受信処理開始時刻t1を取得する(ステップS2601)。つぎに、サーバ#iは、クライアント装置$jからハートビートHBを受信したか否かを判断する(ステップS2602)。
ここで、サーバ#iは、クライアント装置$jからハートビートHBを受信するのを待つ(ステップS2602:No)。そして、サーバ#iは、クライアント装置$jからハートビートHBを受信した場合(ステップS2602:Yes)、受信したハートビートHBに隔離指示種別「4」が設定されているか否かを判断する(ステップS2603)。
ここで、隔離指示種別「4」が設定されていない場合(ステップS2603:No)、サーバ#iは、ステップS2602に戻る。一方、隔離指示種別「4」が設定されている場合(ステップS2603:Yes)、サーバ#iは、隔離状態管理テーブル900のクライアント装置$jの完了状態に「1」を設定する(ステップS2604)。
つぎに、サーバ#iは、隔離状態管理テーブル900を参照して、全てのクライアント装置$1〜$4の完了状態が「1」となっているか否かを判断する(ステップS2605)。ここで、全てのクライアント装置$1〜$4の完了状態が「1」となっている場合(ステップS2605:Yes)、サーバ#iは、隔離対象サーバの隔離解除は「成功」と判断して(ステップS2606)、ステップS2610に移行する。
一方、全てのクライアント装置$1〜$4の完了状態が「1」となっていない場合(ステップS2605:No)、サーバ#iは、現在時刻t2を取得する(ステップS2607)。そして、サーバ#iは、受信処理開始時刻t1から現在時刻t2までの経過時間がタイムアウト時間T_out未満か否かを判断する(ステップS2608)。
ここで、タイムアウト時間T_out未満の場合(ステップS2608:Yes)、サーバ#iは、ステップS2602に戻る。一方、タイムアウト時間T_out以上の場合(ステップS2608:No)、サーバ#iは、隔離対象サーバの隔離解除は「不要」と判断する(ステップS2609)。
そして、サーバ#iは、隔離状態管理テーブル900を削除して(ステップS2610)、隔離解除処理を呼び出したステップに戻る。
これにより、接続中の全てのクライアント装置$1〜$4において隔離解除対象サーバの隔離解除処理が「完了」または「不要」と判断したことに応じて、隔離解除対象サーバの隔離解除処理を完了することができる。
<組込対象サーバの組込処理手順>
つぎに、図27を用いて、組込対象サーバの組込処理手順について説明する。この組込処理は、組込対象サーバが、組込対象サーバの組込指示を受け付けた場合の処理である。ここでは、組込対象サーバを「サーバ#i」と表記する。
図27は、組込対象サーバの組込処理手順の一例を示すフローチャートである。図27のフローチャートにおいて、まず、サーバ#iは、組込対象サーバの組込指示を受け付けたか否かを判断する(ステップS2701)。
ここで、サーバ#iは、組込対象サーバの組込指示を受け付けるのを待つ(ステップS2701:No)。そして、サーバ#iは、組込対象サーバの組込指示を受け付けた場合(ステップS2701:Yes)、現用系/待機系サーバに組込対象サーバの組込指示を送信する(ステップS2702)。
つぎに、サーバ#iは、自サーバの組込処理を実行する(ステップS2703)。そして、サーバ#iは、隔離対象サーバリスト1000を更新する(ステップS2704)。つぎに、サーバ#iは、現用系/待機系サーバと通信することにより、組込対象サーバの組込処理を完了して(ステップS2705)、本フローチャートによる一連の処理を終了する。これにより、自サーバをクラスタシステム210に組み込むことができる。
<クライアント装置$jのハートビート受信処理手順>
つぎに、図28を用いて、クライアント装置$jのハートビート受信処理手順について説明する。
図28は、クライアント装置$jのハートビート受信処理手順の一例を示すフローチャート(その2)である。図28のフローチャートにおいて、まず、クライアント装置$jは、サーバ#iからハートビートHBを受信したか否かを判断する(ステップS2801)。
ここで、クライアント装置$jは、サーバ#iからハートビートHBを受信するのを待つ(ステップS2801:No)。そして、クライアント装置$jは、サーバ#iからハートビートHBを受信した場合(ステップS2801:Yes)、ハートビート監視処理を実行する(ステップS2802)。
つぎに、クライアント装置$jは、隔離対象サーバリスト1000を参照して、受信したハートビートHBが、既知の隔離対象サーバからのハートビートHBか否かを判断する(ステップS2803)。ここで、既知の隔離対象サーバからのハートビートHBの場合(ステップS2803:Yes)、クライアント装置$jは、本フローチャートによる一連の処理を終了する。
一方、既知の隔離対象サーバからのハートビートHBではない場合(ステップS2803:No)、クライアント装置$jは、ハートビートHBに隔離指示種別「3」が設定されているか否かを判断する(ステップS2804)。ここで、隔離指示種別「3」が設定されていない場合(ステップS2804:No)、クライアント装置$jは、本フローチャートによる一連の処理を終了する。
一方、隔離指示種別「3」が設定されている場合(ステップS2804:Yes)、クライアント装置$jは、隔離対象サーバリスト1000から、ハートビートHBに付加された隔離情報D3に含まれる隔離解除対象サーバのIPアドレスを削除する(ステップS2805)。そして、クライアント装置$jは、隔離指示フラグを「0」から「3」に変更して(ステップS2806)、本フローチャートによる一連の処理を終了する。
これにより、サーバ#iからのハートビートHBに付加されている隔離情報D3から特定される隔離解除対象サーバの隔離状態を解除することができる。
<クライアント装置$jのハートビート送信処理手順>
つぎに、図29を用いて、クライアント装置$jのハートビート送信処理手順について説明する。
図29は、クライアント装置$jのハートビート送信処理手順の一例を示すフローチャート(その2)である。図29のフローチャートにおいて、まず、クライアント装置$jは、サーバ#iに対するハートビートHBを作成する(ステップS2901)。つぎに、クライアント装置$jは、隔離指示フラグが「3」か否かを判断する(ステップS2902)。
ここで、隔離指示フラグが「0」の場合(ステップS2902:No)、クライアント装置$jは、業務LANを用いて、作成したハートビートHBをサーバ#iに送信して(ステップS2903)、本フローチャートによる一連の処理を終了する。
一方、隔離指示フラグが「3」の場合(ステップS2902:Yes)、クライアント装置$jは、図28に示したステップS2805において隔離対象サーバリスト1000から削除した隔離解除対象サーバのサーバ数とIPアドレスを設定した隔離情報D4を生成する(ステップS2904)。
そして、クライアント装置$jは、作成したハートビートHBに隔離指示種別「4」を設定するとともに隔離情報D4を付加する(ステップS2905)。つぎに、クライアント装置$jは、業務LANを用いて、ハートビートHBをサーバ#iに送信する(ステップS2906)。
そして、クライアント装置$jは、隔離指示フラグを「3」から「0」に変更して(ステップS2907)、本フローチャートによる一連の処理を終了する。これにより、隔離解除対象サーバの隔離解除処理が完了したことを示す隔離解除指示応答をサーバ#iに通知することができる。
(サーバ間で隔離情報が異なる場合の対処例)
つぎに、業務LANを用いたハートビート通信によりサーバ#iからクライアント装置$jに送信される隔離情報(例えば、隔離情報D1,D3)がサーバ間で異なる場合の対処例について説明する。
ここで、サーバ#iとクライアント装置$jとのセッションをマルチキャストで確立する場合、クライアント装置$jからのセッション確立要求に対して、隔離対象サーバも含む全てのサーバ#1〜#3からそれぞれ応答が返ってくる可能性がある。この際、クライアント装置$jは、各サーバ#1〜#3から送信される隔離情報(例えば、隔離情報D1)が同一でない場合、どのサーバが本当の隔離対象サーバか判断できなくなり、クライアント装置側で異常発生サーバとの通信閉塞を実施できなくなることがある。
本実施の形態では、隔離対象サーバ数が一致し、かつ、隔離対象サーバが異なるという状態を排除することにより、セッション確立時の隔離情報の整合性を保証する。具体的には、本実施の形態では、各サーバ#1〜#3が認識している隔離対象サーバ数と隔離対象サーバの組み合わせは、例えば、図30に示す対応表3000のようになる。
図30は、隔離対象サーバ数と隔離対象サーバの組み合わせを示す説明図である。図30において、対応表3000は、隔離対象サーバ数と隔離対象サーバの組み合わせを示す。ただし、対応表3000に示す組み合わせは、サーバ#1,#2,#3の順番で隔離したという仮定であり得る状態である。
組み合わせ1〜9は、クラスタシステム210が3ノード構成、すなわち、3台のサーバから構成される場合の隔離対象サーバ数と隔離対象サーバの組み合わせである。また、組み合わせ10〜12は、クラスタシステム210が2ノード構成、すなわち、2台のサーバから構成される場合の隔離対象サーバ数と隔離対象サーバの組み合わせである。
なお、異常発生サーバにもクライアント装置$jから業務LANを用いたハートビート通信により最新の隔離情報が配付されるため、各サーバ間で隔離情報が異なる状況は一時的である。ただし、ハートビートHBとセッション確立のすれ違いがあるため、対応表3000に示す全ての組み合わせに対応する必要がある。図30中、「★」は、該当する状態において、正常なサーバから、異常発生サーバと見なされているサーバを示す。
ここで、組み合わせ1,10は、隔離対象サーバが存在しないため、通常通りのセッション確立となる。また、組み合わせ3,9,12のように、各サーバ間で隔離情報が一致する場合は、セッション確立時に不整合は発生しないため、クライアント装置$jにおける異常発生サーバの特定に問題は生じない。
一方、各サーバで隔離情報が一致しない場合は、本実施の形態では、必ず対応表3000のいずれかの状態になることを保証できる。このことから、クライアント装置$jは、各サーバから受信した隔離情報の中で、最も隔離対象サーバ数が多い隔離情報を採用することができる。これにより、各サーバ間で隔離情報が一致していない状態でセッションを確立した場合でも隔離情報に不整合が発生することを防ぐことができる。
具体的には、例えば、下記(処理1)、(処理2)および(処理3)の仕組みにより、各サーバが認識している隔離対象サーバ数と隔離対象サーバが対応表3000のいずれかの状態となるようにする。
(処理1)正常なサーバ(現用系/待機系サーバ)間で隔離対象サーバを意識合わせした後に、正常なサーバそれぞれで異常発生サーバを隔離する。これにより、正常なサーバ間で隔離情報を統一することができる。
(処理2)正常なサーバ(現用系/待機系サーバ)のいずれかで、異常発生サーバの隔離に成功したら、正常な各サーバの隔離情報(隔離対象サーバリスト1000)を更新する。
(処理3)業務LANを用いて通信できる状態の異常発生サーバに対しては、クライアント装置$jが業務LANを用いたハートビート通信により最新の隔離情報を配付する。
以上説明したように、実施の形態1にかかるサーバ#iによれば、現用系サーバ#kの異常を検知した場合、隔離対象サーバのIPアドレスとして、現用系サーバ#kのIPアドレスを設定した隔離情報D1を生成することができる。また、サーバ#iによれば、業務LANを用いて、隔離指示種別「1」を設定するとともに隔離情報D1を付加したハートビートHB1を接続中の全てのクライアント装置$1〜$4に送信することができる。これにより、業務LANを用いたハートビート通信により、接続中の全てのクライアント装置$1〜$4に対して、異常が発生した現用系サーバ#kの隔離要求を通知することができる。
また、実施の形態1にかかるクライアント装置$jによれば、業務LANを用いて、隔離指示種別「1」が設定され、かつ、隔離情報D1が付加されたハートビートHB1をサーバ#iから受信することができる。また、クライアント装置$jによれば、ハートビートHB1に付加された隔離情報D1から特定される隔離対象サーバのIPアドレスを隔離対象サーバリスト1000に登録することができる。
また、クライアント装置$jによれば、隔離対象サーバリスト1000から隔離対象サーバのIPアドレスを特定して、隔離対象サーバのIPアドレスを送信元のIPアドレスとするデータを破棄することができる。これにより、サーバ#iからハートビートHB1を受信したことに応じて、異常が発生した現用系サーバ#kとの通信を閉塞、すなわち、現用系サーバ#kを隔離することができる。
また、クライアント装置$jによれば、隔離済みの隔離対象サーバのIPアドレスとして、隔離対象サーバリスト1000に登録したIPアドレスを設定した隔離情報D2を生成することができる。また、クライアント装置$jによれば、業務LANを用いて、隔離指示種別「2」を設定するとともに隔離情報D2を付加したハートビートHB2をサーバ#iに送信することができる。これにより、業務LANを用いたハートビート通信により、サーバ#iに対して、異常が発生した現用系サーバ#kの隔離応答を通知することができる。
また、クライアント装置$jによれば、サーバ#1〜#3に割り振られた仮想IPアドレスを用いて、異常が検知された現用系サーバ#kを含む全てのサーバ#1〜#3にハートビートHB2を送信することができる。これにより、異常が検知された現用系サーバ#kは、ハートビートHB2を受信することができる状態であれば、自身が異常であることを認識することができる。例えば、切替元サーバ(異常サーバ)と切替先サーバとの間の管理LANが途絶した場合でも、切替先サーバ→クライアント装置→切替元サーバという流れで、切替元サーバに隔離情報を配付することができる。
また、サーバ#iによれば、クライアント装置$jからハートビートHB2を受信したことに応じて、クライアント装置$jにおいて隔離対象サーバの隔離処理が完了したと判断することができる。また、サーバ#iによれば、ハートビートHB1を送信してからタイムアウト時間T_out経過しても、クライアント装置$jからハートビートHB2を受信しなかった場合、クライアント装置$jにおいて隔離対象サーバの隔離処理が不要であると判断することができる。
これにより、全てのクライアント装置$1〜$4からハートビートHB2を受信したことに応じて、または、クライアント装置$1〜$4にハートビートHB1を送信してからタイムアウト時間T_out経過後に、隔離対象サーバの隔離処理が完了したと判断することができる。このため、例えば、ハートビートHB1がネットワーク230上でロストした場合やクライアント装置$jが隔離要求に対する隔離応答を返せない状況であっても、隔離対象サーバの隔離処理の完了を確定することができる。
また、サーバ#iによれば、現用系サーバ#kの異常を検知した場合、現用系サーバ#kの電源を制御する電源制御装置#kに電源停止指示を送信することができる。これにより、電源制御装置#kにより現用系サーバ#kの電源を停止することができる。
また、サーバ#iによれば、電源制御装置#kから電源停止応答を受信した場合、または、クライアント装置$1〜$4における隔離対象サーバの隔離処理が完了した場合に、現用系サーバを、異常が発生したサーバ#kから自サーバに変更することができる。
これらのことから、実施の形態1にかかる情報処理システム200によれば、異常が発生した現用系サーバ#kが半死状態等で正常に動作しない状況であっても、異常が発生した現用系サーバ#kをクラスタシステム210から切り離すことができる。
また、現用系サーバ#kの電源制御装置#kまたは電源制御装置#kに至るネットワークに異常が発生した状況であっても、異常が発生した現用系サーバ#kをクラスタシステム210から切り離すことができる。具体的には、例えば、電源制御装置#kに異常が発生した状況であっても、クライアント装置$1〜$4における隔離対象サーバの隔離処理が完了した時点でサーバ切替を行うことができる。
これにより、電源制御装置#kの異常時に、電源制御装置#kのタイムアウト時間(例えば、60秒)から電源制御装置#kの異常を検知してサーバ切替を行う場合に比べて、サーバ切替にかかる時間を短縮することができる。例えば、ハートビート通信のタイムアウト時間T_outを「5秒」とすると、サーバ切替にかかる時間を5秒以下に短縮することができる。また、全てのクライアント装置$1〜$4において隔離対象サーバの隔離処理が正常に完了した場合は、例えば、サーバ切替にかかる時間を1秒以下に短縮することができる。
また、クライアント装置$jから現用系サーバ#kにアクセスする際に仮想IPアドレスを使用する場合でも、クライアント装置$j側で、異常が発生した現用系サーバ#kとの通信を閉塞することができる。また、仮想環境や現用系サーバ#kに電源制御装置#kが存在しない環境においても、異常が発生した現用系サーバ#kをクラスタシステム210から切り離すことができる。
また、サーバ#iによれば、クライアント装置$jからのセッションの確立要求を受信したことに応じて、要求元のクライアント装置$jにハートビートHB1を送信することができる。これにより、ハングアップ等の半死状態から再び正常に稼働し始めたクライアント装置$jや新規接続されたクライアント装置に対して、隔離対象サーバの隔離要求を通知することができる。
すなわち、情報処理システム200によれば、クラスタシステム210を構成するサーバ、クライアント装置、各種装置(例えば、電源制御装置、ネットワーク機器等)、ネットワークのいずれの箇所で異常が発生した場合であってもフェイルオーバーを実現することができる。
(実施の形態2)
つぎに、実施の形態2にかかる情報処理システム200について説明する。実施の形態2では、ハートビートHBに隔離指示種別情報402(図4参照)を含まない場合について説明する。なお、実施の形態1で説明した箇所と同様の箇所については図示および説明を省略する。
(ハートビートHBの電文形式)
まず、実施の形態2にかかるハートビートHBの電文形式について説明する。
図31は、ハートビートHBの電文形式の一例を示す説明図(その2)である。図31において、ハートビートHBは、ハートビート情報3101を含む。ハートビート情報3101は、自身が正常に稼働していることを示す情報であり、例えば、送信元のコンピュータ(サーバ#i、クライアント装置$j)を識別する情報、例えば、ノード番号やIPアドレスを含む。
(ハートビートHBの具体例)
つぎに、ハートビートHBの具体例について説明する。
図32は、ハートビートHBの具体例を示す説明図(その5)である。図32において、ハートビートHBは、ハートビート情報3101と、隔離情報Dと、を含む。隔離情報Dは、隔離対象サーバのサーバ数と隔離対象サーバのIPアドレスを含む。
具体的には、図32中(32−1)に示すハートビートHBは、隔離対象サーバのサーバ数が「1」の場合の例である。この場合、隔離情報Dには、隔離対象サーバのサーバ数「1」と隔離対象サーバ1のIPアドレスが設定される。また、図32中(32−2)に示すハートビートHBは、隔離対象サーバのサーバ数が「2」の場合の例である。この場合、隔離情報Dには、隔離対象サーバのサーバ数「2」と隔離対象サーバ1,2のIPアドレスが設定される。
(情報処理システム200の各種処理手順)
つぎに、実施の形態2にかかる情報処理システム200の各種処理手順について説明する。まず、サーバ#i(現用系/待機系サーバ)の切替処理手順について説明する。ただし、隔離対象サーバの隔離処理以外の処理手順は、図16に示した待機系サーバの第1切替処理手順および図19に示した待機系サーバの第2切替処理手順と同様のため、ここでは、サーバ#iにおける隔離対象サーバの隔離処理手順についてのみ説明する。
図33および図34は、実施の形態2にかかるサーバ#iの隔離処理手順の一例を示すフローチャートである。図33のフローチャートにおいて、まず、サーバ#iの通信制御部#iは、隔離状態管理テーブル900を作成して初期化する(ステップS3301)。つぎに、通信制御部#iは、接続中のクライアント装置$1〜$4からいずれかのクライアント装置$jを選択する(ステップS3302)。
そして、通信制御部#iは、クライアント装置$jに対するハートビートHBを作成する(ステップS3303)。つぎに、通信制御部#iは、作成したハートビートHBに隔離情報Dを付加する(ステップS3304)。そして、通信制御部#iは、業務LANを用いて、ハートビートHBをクライアント装置$jに送信する(ステップS3305)。
つぎに、通信制御部#iは、接続中のクライアント装置$1〜$4から選択されていない未選択のクライアント装置があるか否かを判断する(ステップS3306)。ここで、未選択のクライアント装置がある場合(ステップS3306:Yes)、通信制御部#iは、ステップS3302に戻る。
一方、未選択のクライアント装置がない場合(ステップS3306:No)、通信制御部#iは、図34に示すステップS3401に移行する。
図34のフローチャートにおいて、まず、通信制御部#iは、受信処理開始時刻t1を取得する(ステップS3401)。つぎに、通信制御部#iは、クライアント装置$jからハートビートHBを受信したか否かを判断する(ステップS3402)。
ここで、通信制御部#iは、クライアント装置$jからハートビートHBを受信するのを待つ(ステップS3402:No)。そして、通信制御部#iは、クライアント装置$jからハートビートHBを受信した場合(ステップS3402:Yes)、受信したハートビートHBから隔離情報Dを取得する(ステップS3403)。
つぎに、通信制御部#iは、隔離対象サーバリスト1000を参照して、自サーバで認識している隔離対象サーバ数と、取得した隔離情報Dから特定される隔離対象サーバ数とが一致するか否かを判断する(ステップS3404)。ここで、隔離対象サーバ数が一致しない場合(ステップS3404:No)、通信制御部#iは、ステップS3402に戻る。
一方、隔離対象サーバ数が一致する場合(ステップS3404:Yes)、通信制御部#iは、隔離状態管理テーブル900のクライアント装置$jの完了状態に「1」を設定する(ステップS3405)。そして、通信制御部#iは、隔離状態管理テーブル900を参照して、全てのクライアント装置$1〜$4の完了状態が「1」となっているか否かを判断する(ステップS3406)。
ここで、全てのクライアント装置$1〜$4の完了状態が「1」となっている場合(ステップS3406:Yes)、通信制御部#iは、隔離対象サーバの隔離は「成功」と判断して(ステップS3407)、ステップS3411に移行する。
一方、全てのクライアント装置$1〜$4の完了状態が「1」となっていない場合(ステップS3406:No)、通信制御部#iは、現在時刻t2を取得する(ステップS3408)。そして、通信制御部#iは、受信処理開始時刻t1から現在時刻t2までの経過時間がタイムアウト時間T_out未満か否かを判断する(ステップS3409)。
ここで、タイムアウト時間T_out未満の場合(ステップS3409:Yes)、通信制御部#iは、ステップS3402に戻る。一方、タイムアウト時間T_out以上の場合(ステップS3409:No)、通信制御部#iは、隔離対象サーバの隔離は「不要」と判断する(ステップS3410)。
つぎに、通信制御部#iは、クラスタ制御部#iに隔離処理完了通知を送信する(ステップS3411)。そして、通信制御部#iは、隔離状態管理テーブル900を削除して(ステップS3412)、隔離処理を呼び出したステップに戻る。
これにより、接続中の全てのクライアント装置$1〜$4において隔離対象サーバの隔離処理が「完了」または「不要」と判断したことに応じて、隔離対象サーバの隔離処理を完了することができる。
<クライアント装置$jのハートビート受信処理手順>
つぎに、図35を用いて、実施の形態2にかかるクライアント装置$jのハートビート受信処理手順について説明する。
図35は、実施の形態2にかかるクライアント装置$jのハートビート受信処理手順の一例を示すフローチャートである。図35のフローチャートにおいて、まず、クライアント装置$jは、サーバ#iからハートビートHBを受信したか否かを判断する(ステップS3501)。
ここで、クライアント装置$jは、サーバ#iからハートビートHBを受信するのを待つ(ステップS3501:No)。そして、クライアント装置$jは、サーバ#iからハートビートHBを受信した場合(ステップS3501:Yes)、ハートビート監視処理を実行する(ステップS3502)。
つぎに、クライアント装置$jは、隔離対象サーバリスト1000を参照して、受信したハートビートHBが、既知の隔離対象サーバからのハートビートHBか否かを判断する(ステップS3503)。ここで、既知の隔離対象サーバからのハートビートHBの場合(ステップS3503:Yes)、クライアント装置$jは、本フローチャートによる一連の処理を終了する。
一方、既知の隔離対象サーバからのハートビートHBではない場合(ステップS3503:No)、クライアント装置$jは、受信したハートビートHBから隔離情報Dを取得する(ステップS3504)。
つぎに、クライアント装置$jの通信制御部$jは、隔離対象サーバリスト1000を参照して、自装置で認識している隔離対象サーバ数と、取得した隔離情報Dから特定される隔離対象サーバ数とが一致するか否かを判断する(ステップS3505)。ここで、隔離対象サーバ数が一致する場合(ステップS3505:Yes)、クライアント装置$jは、本フローチャートによる一連の処理を終了する。
一方、隔離対象サーバ数が一致しない場合(ステップS3505:No)、クライアント装置$jは、隔離情報Dに含まれる隔離対象サーバのIPアドレスを隔離対象サーバリスト1000に上書きして(ステップS3506)、本フローチャートによる一連の処理を終了する。
これにより、サーバ#iからのハートビートHBに付加されている隔離情報Dから特定される隔離対象サーバを隔離することができる。
<クライアント装置$jのハートビート送信処理手順>
つぎに、図36を用いて、実施の形態2にかかるクライアント装置$jのハートビート送信処理手順について説明する。
図36は、実施の形態2にかかるクライアント装置$jのハートビート送信処理手順の一例を示すフローチャートである。図36のフローチャートにおいて、まず、クライアント装置$jは、サーバ#iに対するハートビートHBを作成する(ステップS3601)。
そして、クライアント装置$jは、隔離対象サーバリスト1000に登録されている隔離対象サーバのサーバ数とIPアドレスを設定した隔離情報Dを生成する(ステップS3602)。つぎに、クライアント装置$jは、作成したハートビートHBに隔離情報Dを付加する(ステップS3603)。
そして、クライアント装置$jは、業務LANを用いて、ハートビートHBをサーバ#iに送信して(ステップS3604)、本フローチャートによる一連の処理を終了する。これにより、隔離対象サーバの隔離処理が完了したことをサーバ#iに通知することができる。なお、上述した説明では、隔離対象サーバの隔離処理について説明したが、隔離解除対象サーバの隔離解除処理も同様である。
以上説明したように、実施の形態2にかかるサーバ#iによれば、自サーバで認識している隔離対象サーバ数と、クライアント装置$jから受信したハートビートHBに付加されている隔離情報Dから特定される隔離対象サーバ数とが一致するか否かを判断できる。これにより、ハートビートHBに隔離指示種別を含まなくても、隔離対象サーバ数が一致するか否かに応じて、クライアント装置$jにおける隔離対象サーバの隔離処理が完了したか否かを判断することができる。
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)端末装置と、前記端末装置からの処理要求に応じた処理を実行する現用系装置と、前記現用系装置に対応する待機系装置と、を含む情報処理システムの制御方法であって、
前記待機系装置が、前記現用系装置の異常を検知した場合、前記現用系装置を特定する装置情報を前記端末装置に送信し、
前記端末装置が、前記装置情報を受信したことに応じて、前記現用系装置からのデータを破棄する状態に変更するとともに、前記装置情報を受信した旨の応答通知を前記待機系装置に送信し、
前記待機系装置が、前記応答通知を受信したことに応じて、前記端末装置からの処理要求に応じた処理を実行する状態に変更する、
処理を実行することを特徴とする制御方法。
(付記2)前記現用系装置の異常は、前記現用系装置と前記待機系装置との通信が途絶したことを含むことを特徴とする付記1に記載の制御方法。
(付記3)前記待機系装置が、前記端末装置に対して前記待機系装置が正常に稼働していることを報知するハートビートに前記装置情報を付加して、前記端末装置に前記ハートビートを送信し、
前記端末装置が、前記待機系装置に対して前記端末装置が正常に稼働していることを報知するハートビートに前記応答通知を付加して、前記待機系装置に前記ハートビートを送信することを特徴とする付記1または2に記載の制御方法。
(付記4)前記端末装置が複数存在する場合、前記待機系装置が、全ての端末装置から前記応答通知を受信したことに応じて、または、前記装置情報を送信してから一定時間経過後に、前記端末装置からの処理要求に応じた処理を実行する状態に変更することを特徴とする付記1〜3のいずれか一つに記載の制御方法。
(付記5)前記待機系装置が、前記応答通知を受信しなかった端末装置、または、前記待機系装置に新規接続された端末装置のいずれかの端末装置から通信路の確立要求を受信したことに応じて、前記いずれかの端末装置に前記装置情報を送信することを特徴とする付記4に記載の制御方法。
(付記6)前記待機系装置が、前記現用系装置の異常を検知した場合、さらに、前記現用系装置の電源を制御する電源制御装置に電源停止指示を送信し、前記端末装置から前記応答通知を受信したことに応じて、または、前記電源制御装置から前記現用系装置の電源を停止したことを示す電源停止応答を受信したことに応じて、前記端末装置からの処理要求に応じた処理を実行する状態に変更することを特徴とする付記1〜5のいずれか一つに記載の制御方法。
(付記7)前記端末装置が、さらに、前記現用系装置に対して前記端末装置が正常に稼働していることを報知するハートビートに前記応答通知を付加して、前記現用系装置に前記ハートビートを送信し、
前記現用系装置が、前記応答通知が付加された前記ハートビートを受信したことに応じて、前記端末装置との通信を切断することを特徴とする付記3に記載の制御方法。
(付記8)端末装置からの処理要求に応じた処理を実行する現用系装置に対応する待機系装置に、
前記現用系装置の異常を検知した場合、前記現用系装置を特定する装置情報を前記端末装置に送信し、
送信した前記装置情報を受信した旨の応答通知を前記端末装置から受信したことに応じて、前記端末装置からの処理要求に応じた処理を実行する状態に変更する、
処理を実行させることを特徴とする制御プログラム。
(付記9)端末装置からの処理要求に応じた処理を実行する現用系装置に対応する待機系装置から前記現用系装置を特定する装置情報を受信し、
前記装置情報を受信したことに応じて、前記現用系装置からのデータを破棄する状態に変更し、
前記現用系装置からのデータを破棄する状態に変更した場合、前記装置情報を受信した旨の応答通知を前記待機系装置に送信する、
処理を前記端末装置に実行させることを特徴とする制御プログラム。
(付記10)端末装置と、前記端末装置からの処理要求に応じた処理を実行する現用系装置と、前記現用系装置に対応する待機系装置と、を含む情報処理システムであって、
前記待機系装置は、前記現用系装置の異常を検知した場合、前記現用系装置を特定する装置情報を前記端末装置に送信する第1送信部と、前記第1送信部によって送信された前記装置情報を受信した旨の応答通知を前記端末装置から受信したことに応じて、前記端末装置からの処理要求に応じた処理を実行する状態に変更する第1変更部と、を有し、
前記端末装置は、前記装置情報を受信したことに応じて、前記現用系装置からのデータを破棄する状態に変更する第2変更部と、前記第2変更部によって前記現用系装置からのデータを破棄する状態に変更された場合、前記装置情報を受信した旨の応答通知を前記待機系装置に送信する第2送信部と、を有することを特徴とする情報処理システム。