(57)【要約】【課題】クラスタシステム内の計算機ノードを隠蔽し仮想化することで、計算機ノード故障等の構成の変化に柔軟に対応できる計算機ノード、クラスタシステム、クラスタ管理方法、クラスタ管理プログラムを提供することを目的とする。【解決手段】クライアント５に対して複数の仮想的な計算機ノードを提供するクラスタシステム１であって、アプリケーションを実行する実ノード３ａ，３ｂ，３ｃと、仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスを実ノードのＩＰアドレスである実ＩＰアドレスに割り当てるコーディネータノード２とを備え、実ノード３ａ，３ｂ，３ｃとコーディネータノード２は、仮想ＩＰアドレスと実ＩＰアドレスとの対応表であるＩＰ管理テーブルを記憶し、ＩＰ管理テーブルに基づいて仮想ＩＰアドレスを用いた通信を行う。【選択図】        図１
2004264911.tif 000002
【特許請求の範囲】
【請求項１】
クライアントに対して少なくとも１つの仮想的な計算機ノードを提供するクラスタシステムにおける物理的な計算機ノードであって、
前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスと前記物理的な計算機ノードのＩＰアドレスである実ＩＰアドレスとの対応表であるＩＰ管理テーブルを記憶し、該ＩＰ管理テーブルに基づいて仮想ＩＰアドレスを用いた通信を行うＩＰ層と、
他の計算機ノードと前記クライアントにネットワークを介して接続するネットワークデバイスと、
を備えてなる計算機ノード。
【請求項２】
請求項１に記載の計算機ノードにおいて、
さらに、前記クライアントから指示されたアプリケーションを実行するアプリケーション実行部を備えたことを特徴とする計算機ノード。
【請求項３】
請求項２に記載の計算機ノードにおいて、
前記ＩＰ層は、
前記アプリケーション実行部から仮想ＩＰアドレスを宛先とする第１のＩＰヘッダを付けた第１のパケットが入力された場合、宛先の仮想ＩＰアドレスに対応する実ＩＰアドレスを前記ＩＰ管理テーブルを用いて検索し、検索した実ＩＰアドレスを宛先とする第２のＩＰヘッダを前記第１のパケットにさらに付けるカプセル化を施し、得られた第２のパケットを前記ネットワークデバイスへ出力するカプセル化部と、
前記ネットワークデバイスから実ＩＰアドレスを宛先とする第３のＩＰヘッダを付けた第３のパケットが入力された場合、前記第３のパケットから前記第３のＩＰヘッダを外して第４のパケットを生成し、さらに仮想ＩＰアドレスを宛先とする第４のＩＰヘッダの仮想ＩＰアドレスが自らの計算機ノードの仮想ＩＰアドレスであれば、得られた前記第４のパケットを前記アプリケーション実行部へ出力するカプセル解除部と、
を備えたことを特徴とする計算機ノード。
【請求項４】
請求項３に記載の計算機ノードにおいて、
さらに、
前記ネットワークデバイスと同様に扱われ、自らの計算機ノードの仮想ＩＰアドレスを宛先とするパケットを前記ＩＰ層へ出力するトンネルデバイスを備えたことを特徴とする計算機ノード。
【請求項５】
請求項１に記載の計算機ノードにおいて、
さらに、
他の計算機ノードの負荷状態を検出する負荷状態検出部と、
前記負荷状態に基づいて前記仮想ＩＰアドレスに前記実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するノード割り当て部と、
前記ＩＰ管理テーブルを他の計算機ノードへブロードキャストするブロードキャスト部とを備え、
前記ＩＰ層は、
前記クライアントに対して前記仮想ＩＰアドレスを提供する仮想ノード提供部と、
前記ネットワークデバイスから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを前記ネットワークデバイスへ出力するパケット割り振り部と、
を備えたことを特徴とする計算機ノード。
【請求項６】
請求項５に記載の計算機ノードにおいて、
前記パケット割り振り部は、前記ネットワークデバイスから前記仮想ＩＰアドレスを宛先とする第１のＩＰヘッダを付けた第１のパケットが入力された場合、検索した実ＩＰアドレスを宛先とする第２のＩＰヘッダを前記第１のパケットにさらに付けるカプセル化を施し、得られた第２のパケットを前記ネットワークデバイスへ出力する
ことを特徴とする計算機ノード。
【請求項７】
請求項５または請求項６に記載の計算機ノードにおいて、
前記仮想ノード提供部は、前記ネットワークデバイスに対して実ＩＰアドレスと異なる少なくとも１つのＩＰアドレスを割り当てることを特徴とする計算機ノード。
【請求項８】
クライアントに対して複数の仮想的な計算機ノードを提供するクラスタシステムであって、
請求項２乃至請求項４のいずれかに記載の計算機ノードであり、アプリケーションを実行する計算機ノードである少なくとも１つの実ノードと、
請求項５乃至請求項７のいずれかに記載の計算機ノードであり、前記仮想ＩＰアドレスを前記実ノードの実ＩＰアドレスに割り当てる計算機ノードである少なくとも１つのコーディネータノードと、
を備えたことを特徴とするクラスタシステム。
【請求項９】
クライアントに対して少なくとも１つの仮想的な計算機ノードを提供し、前記クライアントから指示されたアプリケーションを実際に実行する計算機ノードである少なくとも１つの実ノードの管理を行うクラスタ管理方法であって、
前記実ノードと前記クライアントにネットワークを介して接続するステップと、
前記クライアントに対して前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスを提供するステップと、
前記実ノードの負荷状態を検出するステップと、
前記負荷状態に基づいて前記仮想ＩＰアドレスに対して前記実ノードのＩＰアドレスである実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するステップと、
前記ＩＰ管理テーブルを前記実ノードへブロードキャストするステップと、
ネットワークを介して前記クライアントから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを、ネットワークを介して宛先の実ノードへ出力するステップと、
を備えてなるクラスタ管理方法。
【請求項１０】
クライアントに対して少なくとも１つの仮想的な計算機ノードを提供し、前記クライアントから指示されたアプリケーションを実際に実行する計算機ノードである少なくとも１つの実ノードの管理を行うために、コンピュータにより読取可能な媒体に記憶されたクラスタ管理プログラムであって、
前記実ノードと前記クライアントにネットワークを介して接続するステップと、
前記クライアントに対して前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスを提供するステップと、
前記実ノードの負荷状態を検出するステップと、
前記負荷状態に基づいて前記仮想ＩＰアドレスに対して前記実ノードのＩＰアドレスである実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するステップと、
前記ＩＰ管理テーブルを前記実ノードへブロードキャストするステップと、
ネットワークを介して前記クライアントから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを、ネットワークを介して宛先の実ノードへ出力するステップと、
をコンピュータに実行させることを特徴とするクラスタ管理プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネットワーク上の計算機をノードとし、複数のノードを１つのシステムとして動作させるクラスタシステムにおいて、ノード故障などの構成の変化に柔軟に対応できる計算機ノード、クラスタシステム、クラスタ管理方法、クラスタ管理プログラムに関するものである。
【０００２】
【従来の技術】
クラスタシステムは、複数のノードを動作させて同一作業目的の処理を実行させることにより、単体のノードでは限界であった処理能力や信頼性を向上させるシステムである。一般的にクラスタシステムには、フェイルオーバー型とロードバランシング型とＨＰＣ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）型の３通りが存在する。
【０００３】
まず、フェイルオーバー型について説明する。フェイルオーバー型では、２台またはそれ以上のノードを動作させ、何らかの原因で動作不能になった場合に、バックアップとして待機させていた他のノードがその処理を引き継ぐことによってＨＡ（Ｈｉｇｈ  Ａｖａｉｌａｂｉｌｉｔｙ）を向上させる。
【０００４】
次に、ロードバランシング型について説明する。ロードバランシング型では、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）やＦＴＰ（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）サーバなどのサーバを多重化して、スケーラビリティを実現する。具体的には、１つのロードバランサに対するＩＰレベルのセッションを、背後に控える複数のサービスノードに割り振ることにより、１つのノードの負荷分散を行う。割り振る方法にはいくつかあるが、順番に処理を割り振るラウンドロビン型やサービスノードやネットワークトラフィックの負荷を監視しながら負荷の少ないサービスノードに処理を割り振るダイナミックなロードバランサなどの構成を取ることが多い。
【０００５】
次に、ＨＰＣ型について説明する。ＨＰＣ型では、複数のノードが強調動作することによって並列処理アプリケーションを高速に実行する。ノード間のインターコネクトのデータ転送帯域が狭いとそこがボトルネックとなって全体の処理能力が低下するために、ギガビットＥｔｈｅｒｎｅｔやＭｙｒｉｎｅｔなどの高速なインターフェースで接続されることがある。並列処理アプリケーション作成にはＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）やＰＶＭ（Ｐａｒａｌｌｅｌ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）等のライブラリがあり、これらは数値演算ライブラリと合わせて学術研究分野で利用されている。
【０００６】
【発明が解決しようとする課題】
しかしながら、上述のクラスタシステムにおいて、ユーザアプリケーションはノード上で直接実行される。そのため、ノードの故障や構成の変化に柔軟に対応することができないという問題があり、例えば、ユーザアプリケーション毎にノード故障などの対応を行う必要があった。
【０００７】
本発明は上述した課題に鑑みてなされたものであり、ユーザアプリケーションにクラスタシステム内のノードを直接操作させないように、ノードを隠蔽し仮想化することで、ユーザアプリケーションを変更すること無く、ノード故障などの構成の変化に柔軟に対応できる計算機ノード、クラスタシステム、クラスタ管理方法、クラスタ管理プログラムを提供することを目的とする。
【０００８】
【課題を解決するための手段】
上述した課題を解決するために、本発明は、クライアントに対して少なくとも１つの仮想的な計算機ノードを提供するクラスタシステムにおける物理的な計算機ノードであって、前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスと前記物理的な計算機ノードのＩＰアドレスである実ＩＰアドレスとの対応表であるＩＰ管理テーブルを記憶し、該ＩＰ管理テーブルに基づいて仮想ＩＰアドレスを用いた通信を行うＩＰ層と、他の計算機ノードと前記クライアントにネットワークを介して接続するネットワークデバイスとを備えてなるものである。
【０００９】
このような構成によれば、クラスタシステムの計算機ノードが共通のＩＰ管理テーブルを備えることにより、クラスタシステムにおいて仮想ＩＰアドレスを用いた通信を行うことができる。
【００１０】
また、本発明に係る計算機ノードにおいて、さらに、前記クライアントから指示されたアプリケーションを実行するアプリケーション実行部を備えたことを特徴とするものである。
【００１１】
このような構成によれば、アプリケーションを実行する計算機ノードをクライアントから隠蔽し、仮想的な計算機ノードとして動的に割り当てることにより、高可用性のクラスタシステムを提供することができる。
【００１２】
また、本発明に係る計算機ノードにおいて、前記ＩＰ層は、前記アプリケーション実行部から仮想ＩＰアドレスを宛先とする第１のＩＰヘッダを付けた第１のパケットが入力された場合、宛先の仮想ＩＰアドレスに対応する実ＩＰアドレスを前記ＩＰ管理テーブルを用いて検索し、検索した実ＩＰアドレスを宛先とする第２のＩＰヘッダを前記第１のパケットにさらに付けるカプセル化を施し、得られた第２のパケットを前記ネットワークデバイスへ出力するカプセル化部と、前記ネットワークデバイスから実ＩＰアドレスを宛先とする第３のＩＰヘッダを付けた第３のパケットが入力された場合、前記第３のパケットから前記第３のＩＰヘッダを外して第４のパケットを生成し、さらに仮想ＩＰアドレスを宛先とする第４のＩＰヘッダの仮想ＩＰアドレスが自らの計算機ノードの仮想ＩＰアドレスであれば、得られた前記第４のパケットを前記アプリケーション実行部へ出力するカプセル解除部とを備えたことを特徴とするものである。
【００１３】
このような構成によれば、計算機ノードは、共通のＩＰ管理テーブルに従って仮想ＩＰアドレスと実ＩＰアドレスを変換することにより、仮想的な計算機ノード間の通信を実現することができる。
【００１４】
また、本発明に係る計算機ノードにおいて、さらに、前記ネットワークデバイスと同様に扱われ、自らの計算機ノードの仮想ＩＰアドレスを宛先とするパケットを前記ＩＰ層へ出力するトンネルデバイスを備えたことを特徴とするものである。
【００１５】
このような構成によれば、ＩＰ層は実ＩＰアドレスを宛先とするパケットと同様に、仮想ＩＰアドレスを宛先とするパケットの処理を行うことができる。
【００１６】
また、本発明に係る計算機ノードにおいて、さらに、他の計算機ノードの負荷状態を検出する負荷状態検出部と、前記負荷状態に基づいて前記仮想ＩＰアドレスに前記実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するノード割り当て部と、前記ＩＰ管理テーブルを他の計算機ノードへブロードキャストするブロードキャスト部とを備え、前記ＩＰ層は、前記クライアントに対して前記仮想ＩＰアドレスを提供する仮想ノード提供部と、前記ネットワークデバイスから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを前記ネットワークデバイスへ出力するパケット割り振り部とを備えたことを特徴とするものである。
【００１７】
このような構成によれば、クラスタシステムにおいて、他の計算機ノードの負荷状態や故障等に応じて仮想ＩＰアドレスを実ＩＰアドレスへ割り振ることにより、クライアントが計算機ノードのＩＰアドレスを変更することなく、計算機ノードの負荷の変化や計算機ノードの故障に柔軟に対応でき、高可用性を実現することができる。
【００１８】
また、本発明に係る計算機ノードにおいて、前記パケット割り振り部は、前記ネットワークデバイスから前記仮想ＩＰアドレスを宛先とする第１のＩＰヘッダを付けた第１のパケットが入力された場合、検索した実ＩＰアドレスを宛先とする第２のＩＰヘッダを前記第１のパケットにさらに付けるカプセル化を施し、得られた第２のパケットを前記ネットワークデバイスへ出力することを特徴とするものである。
【００１９】
このような構成によれば、計算機ノードは、共通のＩＰ管理テーブルに従って仮想ＩＰアドレスと実ＩＰアドレスを変換することにより、仮想的な計算機ノードに対する通信を実現することができる。
【００２０】
また、本発明に係る計算機ノードにおいて、前記仮想ノード提供部は、前記ネットワークデバイスに対して実ＩＰアドレスと異なる少なくとも１つのＩＰアドレスを割り当てることを特徴とするものである。
【００２１】
このような構成によれば、複数の仮想的なノードに対する要求を受け付け、物理的な計算機ノードに割り振ることができる。
【００２２】
また、本発明に係る計算機ノードにおいて、前記ノード割り当て部は、１つの仮想ＩＰアドレスに対して複数の実ＩＰアドレスを割り当てることを特徴とするものである。
【００２３】
このような構成によれば、仮想的な計算機ノードを用いてロードバランシング型のクラスタシステムを構成することが可能となる。
【００２４】
また、本発明に係る計算機ノードにおいて、前記ノード割り振り部は、クライアントから前記１つの仮想ＩＰアドレスに対して要求がある度に、要求を転送する実ＩＰアドレスを変化させることを特徴とするものである。
【００２５】
このような構成によれば、仮想的な計算機ノードに対してクライアントから大量のリクエストを受けた場合でも、物理的な計算機ノードの負荷を分散させることができる。
【００２６】
また、本発明に係る計算機ノードにおいて、前記ブロードキャスト部は、前記ＩＰ管理テーブルのうち更新されたエントリだけを他の計算機ノードへブロードキャストすることを特徴とするものである。
【００２７】
このような構成によれば、ＩＰ管理テーブルに関するデータの転送量を低減することができる。
【００２８】
また、本発明に係る計算機ノードにおいて、前記ブロードキャスト部は、前記ＩＰ管理テーブルのうち他の計算機ノードから要求されたエントリだけを要求した計算機ノードだけへ送信することを特徴とするものである。
【００２９】
このような構成によれば、ＩＰ管理テーブルに関するデータの転送量を低減することができる。
【００３０】
また、本発明は、クライアントに対して複数の仮想的な計算機ノードのサービスを提供するクラスタシステムであって、アプリケーションを実行する計算機ノードである少なくとも１つの実ノードと、前記仮想ＩＰアドレスを前記実ノードの実ＩＰアドレスに割り当てる計算機ノードである少なくとも１つのコーディネータノードとを備えたことを特徴とするものである。
【００３１】
このような構成によれば、コーディネータノードが実ノードの負荷状態や故障等に応じて仮想ＩＰアドレスを実ＩＰアドレスへ割り振ることにより、クライアントが実ノードのＩＰアドレスを変更することなく、ノードの負荷の変化やノードの故障に柔軟に対応でき、高可用性を実現することができる。
【００３２】
また、本発明に係るクラスタシステムにおいて、前記コーディネータノードは、前記ＩＰ管理テーブルを前記実ノードへ送信し、該実ノードは、前記ＩＰ管理テーブルを受信したことを前記コーディネータノードへ送信することを特徴とするものである。
【００３３】
このような構成によれば、コーディネータノードは、実ノードへ確実にＩＰ管理テーブルを配信することができる。
【００３４】
また、本発明は、クライアントに対して少なくとも１つの仮想的な計算機ノードを提供し、前記クライアントから指示されたアプリケーションを実際に実行する計算機ノードである少なくとも１つの実ノードの管理を行うクラスタ管理方法であって、前記実ノードと前記クライアントにネットワークを介して接続するステップと、前記クライアントに対して前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスを提供するステップと、前記実ノードの負荷状態を検出するステップと、前記負荷状態に基づいて前記仮想ＩＰアドレスに対して前記実ノードのＩＰアドレスである実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するステップと、前記ＩＰ管理テーブルを前記実ノードへブロードキャストするステップと、ネットワークを介して前記クライアントから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを、ネットワークを介して宛先の実ノードへ出力するステップとを備えてなるものである。
【００３５】
このような構成によれば、コーディネータノードが実ノードの負荷状態や故障等に応じて仮想ＩＰアドレスを実ＩＰアドレスへ割り振ることにより、クライアントが実ノードのＩＰアドレスを変更することなく、ノードの負荷の変化やノードの故障に柔軟に対応でき、高可用性を実現することができる。
【００３６】
また、本発明は、クライアントに対して少なくとも１つの仮想的な計算機ノードを提供し、前記クライアントから指示されたアプリケーションを実際に実行する計算機ノードである少なくとも１つの実ノードの管理を行うために、コンピュータにより読取可能な媒体に記憶されたクラスタ管理プログラムであって、前記実ノードと前記クライアントにネットワークを介して接続するステップと、前記クライアントに対して前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスを提供するステップと、前記実ノードの負荷状態を検出するステップと、前記負荷状態に基づいて前記仮想ＩＰアドレスに対して前記実ノードのＩＰアドレスである実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するステップと、前記ＩＰ管理テーブルを前記実ノードへブロードキャストするステップと、ネットワークを介して前記クライアントから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを、ネットワークを介して宛先の実ノードへ出力するステップとをコンピュータに実行させることを特徴とするものである。
【００３７】
このような構成によれば、コーディネータノードが実ノードの負荷状態や故障等に応じて仮想ＩＰアドレスを実ＩＰアドレスへ割り振ることにより、クライアントが実ノードのＩＰアドレスを変更することなく、ノードの負荷の変化やノードの故障に柔軟に対応でき、高可用性を実現することができる。
なお、本発明において、上記コンピュータにより読取り可能な媒体は、ＣＤ−ＲＯＭやフレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の可搬型記憶媒体や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。
【００３８】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて説明する。
実施の形態１．
本実施の形態では、本発明のクラスタシステムをｒｓｈ（ｒｅｍｏｔｅ  ｓｈｅｌｌ）モードで使う場合について説明する。ｒｓｈモードでは、１つのアプリケーションの実行を１つの実ノードで行う。
【００３９】
まず、本実施の形態に係るクラスタシステムの構成について、図１を用いて説明する。図１は、本実施の形態に係るクラスタシステムの構成の一例を示すブロック図である。図１に示すように、本実施の形態に係るクラスタシステム１は、コーディネータノード２と実ノード３ａ，３ｂ，３ｃから構成される。各ノードは、ネットワーク４を介して互いに接続されると共に、ネットワーク４を介してクライアント５と接続される。
【００４０】
本実施の形態に係るクラスタシステムでは、ユーザアプリケーションにクラスタ内のノードを直接操作することを禁止する。これは仮想的な計算機ノードである仮想ノードだけをクライアント５に提供し、実際にアプリケーションを実行する物理的な計算機ノードである実ノードを隠蔽することにより実現される。コーディネータノードとは、クライアントからの要求や実ノードの負荷状態等に応じて、実ノードに対して仮想ノードやアプリケーション実行の割り当てを行う計算機ノードである。実ノードは、コーディネータノードの割り当てに従って、実際にアプリケーションを実行する。アプリケーションが終了すると、実ノードは解放されて、仮想ノードとアプリケーション実行の割り当てが解除される。
【００４１】
次に、本実施の形態に係るコーディネータノードの機能について、図２を用いて説明する。図２は、本実施の形態に係るコーディネータノードの機能の一例を示すブロック図である。図２に示すように、本実施の形態に係るコーディネータノード２は、階層モデルにおけるＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）層に注目して見た場合に大きく分けて、下位層に属するＮＩＣ２１（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）と、ＩＰ層２２と、上位層に属するコーディネータ２３から構成される。ＮＩＣ２１は、ネットワークデバイス２１１から構成される。ＩＰ層２２は、ＩＰ処理部２２１と仮想ノード提供部２２２とパケット割り振り部２２３から構成される。コーディネータ２３は、負荷状態検出部２３１とノード割り当て部２３２とブロードキャスト部２３３から構成される。
【００４２】
次に、本実施の形態に係るコーディネータノードの動作について説明する。負荷状態検出部２３１は、各実ノード３ａ，３ｂ，３ｃの負荷状態を検出する。負荷状態とは、今現在、どんなプロセスがどれだけのＣＰＵの使用率で動いているかを示すものである。
【００４３】
ノード割り当て部２３２は、ＩＰ管理テーブルにおいて仮想的なＩＰアドレスである仮想ＩＰアドレス（ＶＩＰ：Ｖｉｒｔｕａｌ  ＩＰ  Ａｄｄｒｅｓｓ）を設定し、外部からノード割り当て要求を受けた場合に、各実ノード３ａ，３ｂ，３ｃの負荷状態に基づいて、ＶＩＰを実ノードの実際のＩＰアドレスである実ＩＰアドレス（ＲＩＰ：Ｒｅａｌ  ＩＰ  Ａｄｄｒｅｓｓ）に割り当て、ＩＰ管理テーブルを生成する。また、必要に応じてＩＰ管理テーブルを更新する。ＩＰ管理テーブルとは、ＶＩＰからＲＩＰを検索するための対応表のことである。
【００４４】
ブロードキャスト部２３３は、ＩＰ管理テーブルが更新された場合に、ＩＰ管理テーブルを全ての実ノード３ａ，３ｂ，３ｃへブロードキャストする。ここでは、一例としてＩＰ管理テーブルの更新時にのみＩＰ管理テーブルをブロードキャストするとしたが、ＩＰ管理テーブルにおいて変更されたエントリのみをブロードキャストするようにしても良い。また、ＩＰ管理テーブルのうち、実ノードから要求されたエントリを送信するようにしても良い。さらに、コーディネータノード２が、ＩＰ管理テーブルが確実に届いているかを確認するために、実ノードはＩＰ管理テーブルを受け取ったことを示す情報をコーディネータノード２へ返すようにしても良い。
【００４５】
仮想ノード提供部２２２は、ＩＰ管理テーブルに設定されたＶＩＰを仮想ノードとしてクライアント５へ提供する。クライアント５に対してＶＩＰを見せるために、１つのネットワークデバイス２１１に複数のＶＩＰを割り当てる。
【００４６】
ＩＰ処理部２２１は、従来のＩＰ層と同様、上位層または下位層から入力されたＩＰパケットのフィルタリングやルーティングを行う。ネットワークデバイス２１１からＩＰパケットが入力された場合、ＩＰパケットが自ノード宛ならば上位層に渡し、そうでなければ適切なネットワークへ転送するために再びネットワークデバイス２１１へ出力する。反対に、上位層からＩＰパケットが入力された場合、同じく適切なネットワークへ送信するためにネットワークデバイス２１１へ出力する。また、本発明のＩＰ処理部２２１は、さらにＶＩＰヘッダを持つＩＰパケットがネットワークデバイス２１１から入力された場合、パケット割り振り部２２３へ出力する。ここで、ＲＩＰを宛先とするＩＰヘッダをＲＩＰヘッダ、ＶＩＰを宛先とするＩＰヘッダをＶＩＰヘッダと呼ぶ。
【００４７】
パケット割り振り部２２３は、仮想ノード提供部２２２により提供されたＶＩＰ宛に到達したＩＰパケットの処理を行う。まず、パケット割り振り部２２３は、ＩＰ処理部２２１からＶＩＰヘッダを持つＩＰパケットが入力された場合、ＩＰ管理テーブルを用いてＶＩＰからＲＩＰを検索し、実際にパケットを送信する宛先の実ノードのＲＩＰを得る。次に、パケット割り振り部２２３は、図３（ａ）に示すように、ＶＩＰヘッダを持つＩＰパケットにさらにＲＩＰヘッダを付けることによりカプセル化する。カプセル化したＩＰパケットは、ＩＰ処理部２２１へ出力され、ネットワークデバイス２１１を介して外部のＲＩＰ宛に送信される。
【００４８】
ネットワークデバイス２１１は、外部のクライアント５と各ノードへネットワーク４を介して接続されている。外部から受信したパケットをＩＰ処理部２２１へ出力するとともに、ＩＰ処理部２２１から入力されたパケットを外部へ送信する。
【００４９】
次に、ＩＰ層であるＩＰ処理部２２１とパケット割り振り部２２３の実装例について説明する。まず、仮想ノード提供部２２２の実装例について説明する。ここではＩＰエイリアスと呼ばれる機構を使う。ＩＰエイリアスはＬｉｎｕｘカーネルで標準サポートされており、コマンド「＃  ｉｆｃｏｎｆｉｇ  ｅｔｈ０：０  １９２．１６８．１．１００」によって他のＩＰアドレスを割り当てることができる。“：”以降の数字を変更すれば複数のＩＰアドレスを割り当てることも可能である。この機能を用いてＶＩＰを割り当てる。
【００５０】
次に、ＩＰ処理部２２１とパケット割り振り部２２３の実装例について説明する。図４は、ＩＰ層の実装の一例を示すブロック図である。Ｌｉｎｕｘカーネル２．４にはパケットフィルタリングの機構が組み込まれている。これはｎｅｔｆｉｌｔｅｒと呼ばれ、カーネル内でのＩＰパケット処理を行うコードの拡張性を提供するためのフレームワークである。ここではＬｉｎｕｘのＩＰ層におけるｎｅｔｆｉｌｔｅｒの機能を用いてＩＰ処理部２２１を実現する。ｎｅｔｆｉｌｔｅｒ７は、下位層８と上位層９に接続されている。
【００５１】
ここで、従来のｎｅｔｆｉｌｔｅｒの具体的な動作について説明する。下位層８が受信したパケットは、ＮＦ＿ＩＰ＿ＰＲＥ＿ＲＯＵＴＩＮＧ７１を介してｒｏｕｔｉｎｇ７２に送られ、他のノードへ転送するパケットであれば、ＮＦ＿ＩＰ＿ＦＯＲＷＡＲＤ７４へ送られ、そうでなければ、ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＩＮ７３へ送られる。ＮＦ＿ＩＰ＿ＦＯＲＷＡＲＤ７４へ送られたＩＰパケットは、ＮＦ＿ＩＰ＿ＰＯＳＴ＿ＲＯＵＴＩＮＧ７７を介して下位層８へ送られ、他のノードへ送信される。一方、ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＩＮ７３へ送られたパケットは上位層９へ送られる。
【００５２】
上位層９からのＩＰパケットは、ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＯＵＴ７５を介してｒｏｕｔｉｎｇ７６に送られ、さらにＮＦ＿ＩＰ＿ＰＯＳＴ＿ＲＯＵＴＩＮＧ７７を介して下位層８へ送られ、他のノードへ送信される。以上のｎｅｔｆｉｌｔｅｒ７により、ＩＰ処理部２２１は実現される。
【００５３】
また、パケット割り振り部２２３は、図４で説明したｎｅｔｆｉｌｔｅｒの機能を拡張することにより実現することができる。ｎｅｔｆｉｌｔｅｒ７は、ＮＦ＿ＩＰ＿ＰＲＥ＿ＲＯＵＴＩＮＧ７１，ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＩＮ７３，ＮＦ＿ＩＰ＿ＦＯＲＷＡＲＤ７４，ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＯＵＴ７５，ＮＦ＿ＩＰ＿ＰＯＳＴ＿ＲＯＵＴＩＮＧ７７の部分でそれぞれフック関数を呼び出す仕組みを提供する。これらには関数を登録するためのリストが用意され、「ｉｎｔｎｆ＿ｒｅｇｉｓｔｅｒ＿ｈｏｏｋ（ｓｔｒｕｃｔ  ｎｆ＿ｈｏｏｋ＿ｏｐｓ＊ｒｅｇ）」のインターフェースによって登録することができ、「ｉｎｔ  ｎｆ＿ｕｎｒｅｇｉｓｔｅｒ＿ｈｏｏｋ（ｓｔｒｕｃｔ  ｎｆ＿ｈｏｏｋ＿ｏｐｓ＊ｒｅｇ）」のインターフェースによって削除することができる。ここで、ｓｔｒｕｃｔ  ｎｆ＿ｈｏｏｋ＿ｏｐｓ型の構造体はフック関数を登録するためのものである。本実施の形態では、ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＩＮ７３にパケット割り振り部２２３の動作をフック関数として登録することにより、パケット割り振り部２２３を実現することができる。
【００５４】
また、パケット割り振り部２２３におけるカプセル化はＩＰトンネリング機能を応用して実装することができる。ＲＩＰ宛のＩＰパケットのプロトコルはＩＰＰＲＯＴＯ  ＩＰＩＰに設定する。これはＩＰトンネリングプロトコルと呼ばれ、パケットがカプセル化されていることを示すためのものである。
【００５５】
次に、本実施の形態に係る実ノードの機能について、図５を用いて説明する。図５は、本実施の形態に係る実ノードの機能の一例を示すブロック図である。図３に示すように、本実施の形態に係る実ノード３ａ，３ｂ，３ｃは、階層モデルにおけるＩＰ層に注目して見た場合に大きく分けて、下位層に属するＮＩＣ３１と、ＩＰ層３２と、上位層に属するアプリケーション実行部３３から構成される。ＮＩＣ３１は、ネットワークデバイス３１１とトンネルデバイス３１２から構成される。ＩＰ層３２は、ＩＰ処理部３２１とカプセル解除部３２２とカプセル化部３２３から構成される。
【００５６】
次に、本実施の形態に係る実ノードの動作について説明する。アプリケーション実行部３１はアプリケーションの実行ファイルを備えており、コーディネータノード２を介してクライアント５から受信したパケットの内容に従ってアプリケーションの実行を行い、実行結果をパケットとしてＩＰ層へ渡す。この時、クライアント５に対して実行結果を送信する場合は通常通りパケットにクライアント宛のヘッダを付加し、他の実ノードと通信を行う場合はパケットにＶＩＰヘッダを付加する。
【００５７】
ＩＰ処理部３２１は、従来のＩＰ層やＩＰ処理部２２１と同様、上位層または下位層から入力されたＩＰパケットのフィルタリングやルーティングを行う。本発明のＩＰ処理部３２１は、さらに、下位層からＲＩＰヘッダを持つＩＰパケットが入力された場合、カプセル解除部３２２へ出力する。また、上位層からＶＩＰヘッダを持つＩＰパケットが入力された場合、カプセル化部３２３へ出力する。
【００５８】
カプセル解除部３２２は、ＩＰ処理部３２１からＲＩＰヘッダを持つＩＰパケットが入力されると、図３（ｂ）に示すように、ＩＰパケットからＲＩＰヘッダを外す。この時、カプセル化されたＩＰパケットがＩＰトンネリングプロトコルであるために、ＶＩＰヘッダを持つＩＰパケットを、ＩＰ処理部３２１を介してトンネルデバイス３１２へ出力する。
【００５９】
カプセル化部３２３は、ＩＰ処理部３２１からＶＩＰヘッダを持つＩＰパケットが入力されると、コーディネータノード２からブロードキャストされたＩＰ管理テーブルを用いてＶＩＰからＲＩＰを検索し、実際にパケットを送信する宛先の実ノードのＲＩＰを得る。次に、カプセル化部３２３は、図３（ａ）に示すように、ＶＩＰヘッダを持つＩＰパケットにさらにＲＩＰヘッダを付けることによりカプセル化する。カプセル化したＩＰパケットは、ＩＰ処理部３２１とネットワークデバイス３１１を介してＲＩＰ宛に送信される。
【００６０】
ネットワークデバイス３１１は、ネットワークデバイス２１１と同様であり、外部のクライアント５と各ノードへネットワーク４を介して接続されている。外部から受信したパケットをＩＰ処理部３２１へ出力するとともに、ＩＰ処理部３２１から入力されたパケットを外部へ送信する。
【００６１】
トンネルデバイス３１２は、ＩＰ処理部３２１からＶＩＰヘッダを持つＩＰパケットが入力されると、そのままＩＰ処理部３２１へ出力する。カプセル解除されたＩＰパケットの宛先はＶＩＰであるため、自ノードのトンネルデバイス３１２が受け取って、再びＩＰ処理部３２１へ入力される。ＩＰ処理部３２１は、トンネルデバイス３１２からのＶＩＰヘッダを持つＩＰパケットをアプリケーション実行部３３へ出力する。
【００６２】
ここで、ＩＰ層であるＩＰ処理部３２１とカプセル解除部３２２とカプセル化部３２３の実装例について説明する。ＩＰ処理部２２１と同様、ＬｉｎｕｘのＩＰ層におけるｎｅｔｆｉｌｔｅｒの機能を用いてＩＰ処理部３２１を実現し、さらに、ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＩＮ７３にカプセル解除部３２２の動作をフック関数として登録し、ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＯＵＴ７５にカプセル化部３２３の動作をフック関数として登録することにより、カプセル解除部３２２とカプセル化部３２３を実現することができる。
【００６３】
また、カプセル解除部３２２とカプセル化部３２３はＩＰトンネリング機能を応用して実装することができる。ＩＰトンネリングによってＩＰパケットをＩＰヘッダでカプセル化することによって、カプセル化されたパケットに関わらず正しい転送先に送出することができる。ここでＲＩＰ宛のＩＰパケットのプロトコルはＩＰＰＲＯＴＯ＿ＩＰＩＰに設定する。
【００６４】
ＩＰトンネリングではＮＡＴ（Ｎｅｔｗｏｒｋ  Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎ）等のアドレス変換と異なり、クライアント５からのリクエストに対して直接応答を返すことができる。以上のように、トンネルデバイス３１２を全ての実ノード３ａ，３ｂ，３ｃに実装し、コーディネータノード２と全ての実ノード３ａ，３ｂ，３ｃが同じＩＰ管理テーブルを備えることで、ＶＩＰレベルでの通信を実現することができ、実ノード間通信が可能となる。
【００６５】
次に、ｒｓｈモードの動作について、図６を用いて説明する。図６は、本実施の形態に係るクラスタシステムのｒｓｈモードにおける動作の一例を示すシーケンス図である。ｒｓｈモードでは一般的なＵＮＩＸコマンドであるｒｓｈと同様に、コマンド「％  ｒｓｈ  ｖｎｏｄｅ  ａｐｐｌｉｃａｔｉｏｎ  ［ａｒｇｓ．．．］」によってクラスタシステム１上でアプリケーションを実行することができる。ここでｖｎｏｄｅは仮想ノードを示している。ここでは、説明のため、実ノード３ａが持つＲＩＰをＲＩＰ＃ａ、実ノード３ｂが持つＲＩＰをＲＩＰ＃ｂ、実ノード３ｃが持つＲＩＰをＲＩＰ＃ｃとする。
【００６６】
まず、ユーザは、クライアント５を用いてｒｓｈコマンドを入力し、宛先を指定する。ここでは例えばＶＩＰ＃１を宛先として指定する。これにより、ノード割り当て要求が行われる（Ｓ１０１）。ノード割り当て要求を受けたコーディネータノード２は、各実ノード３ａ，３ｂ，３ｃの負荷状態に応じて、ＶＩＰ＃１に例えばＲＩＰ＃ａを割り当てる（Ｓ１０２）。実ノード３ａは、アプリケーションの実行が可能な状態であれば、そのことを示す情報をコーディネータノード２へ返す（Ｓ１０３）。次に、コーディネータノード２は、図７に示すＩＰ管理テーブルを生成し、各実ノード３ａ，３ｂ，３ｃへブロードキャストすると共に、ノード割り当てが成功したことを示すノード割り当て完了通知をクライアント５へ返す（Ｓ１０４）。
【００６７】
ノード割り当て完了通知を受信したクライアント５は、ジョブをＶＩＰ＃１宛に投入する（Ｓ１０５）。ジョブはコーディネータノード２を介して実ノード３ａへ渡される（Ｓ１０６）。実ノード３ａは、ジョブであるアプリケーションの実行を行い、その実行結果をクライアント５へ返す（Ｓ１０７）。また、実ノード３ａは、ジョブが終了したことを示す情報をコーディネータノード２へ返す（Ｓ１０８）。ジョブの終了を検出したコーディネータノード２は、ＩＰ管理テーブルのＶＩＰ＃１とＲＩＰ＃ａのエントリを削除し、その結果をブロードキャストすることによりノードの解放を行う（Ｓ１０９）。実ノード３ａは、ノードの解放を確認したことを示す情報をコーディネータノード２へ返す（Ｓ１１０）。
【００６８】
以上のように、コーディネータノード２が実ノードの負荷状態や故障等に応じてＶＩＰをＲＩＰへ割り振ることにより、ノードの負荷の変化やノードの故障に柔軟に対応でき、高可用性を実現することができる。例えば、ノード故障が発生した場合でも、ＶＩＰとＲＩＰの割り当てを自動的に変更するだけで復帰することができる。
【００６９】
実施の形態２．
本実施の形態では、図１で説明した本発明のクラスタシステムをＨＰＣモードで使う場合について説明する。ＨＰＣモードでは、複数のアプリケーションの実行を複数の実ノードで分担して行う。一般にＨＰＣ型のアプリケーションではノード間通信が行われる。本実施の形態では、コーディネータノード２がクライアント５に対して複数の仮想ノードを提供し、実ノード間で通信を行うことにより、ＨＰＣ型のアプリケーションが動作可能となる。
【００７０】
以下、ＨＰＣモードの動作について、図８を用いて説明する。図８は、本実施の形態に係るクラスタシステムのＨＰＣモードにおける動作の一例を示すシーケンス図である。ここでは、説明のため、実ノード３ａが持つＲＩＰをＲＩＰ＃ａ、実ノード３ｂが持つＲＩＰをＲＩＰ＃ｂ、実ノード３ｃが持つＲＩＰをＲＩＰ＃ｃとする。
【００７１】
まず、ユーザは、クライアント５を用いて宛先を指定する。ここでは例えばＶＩＰ＃１とＶＩＰ＃２を宛先として指定する。これにより、ノード割り当て要求が行われる（Ｓ２０１）。ノード割り当て要求を受けたコーディネータノード２は、各実ノード３ａ，３ｂ，３ｃの負荷状態に応じて、ＶＩＰ＃１に例えばＲＩＰ＃ａを割り当てる（Ｓ２０２）。実ノード３ａは、アプリケーションの実行が可能な状態であれば、そのことを示す情報をコーディネータノード２へ返す（Ｓ２０３）。同様に、コーディネータノード２は、ＶＩＰ＃２に例えばＲＩＰ＃ｃを割り当てる（Ｓ２０２）。実ノード３ｃは、アプリケーションの実行が可能な状態であれば、そのことを示す情報をコーディネータノード２へ返す（Ｓ２０３）。処理Ｓ２０２と処理Ｓ２０３は、要求されたノード数分繰り返される。次に、コーディネータノード２は、図９に示すＩＰ管理テーブルを生成し、各実ノード３ａ，３ｂ，３ｃへブロードキャストすると共に、ノード割り当てが成功したことを示すノード割り当て完了通知をクライアント５へ返す（Ｓ２０４）。
【００７２】
ノード割り当て完了通知を受信したクライアント５は、ジョブをＶＩＰ＃１宛とＶＩＰ＃２宛に投入する（Ｓ２０５）。ここで、例えばＶＩＰ＃１で得られた実行結果をＶＩＰ＃２で用いて実行するというジョブをＶＩＰ＃１宛とＶＩＰ＃２宛に与えたとする。ＶＩＰ＃１宛のジョブはコーディネータノード２を介して実ノード３ａへ渡され、ＶＩＰ＃２宛のジョブはコーディネータノード２を介して実ノード３ｃへ渡される（Ｓ２０６）。実ノード３ａは、ジョブであるアプリケーションの実行を行い、その実行結果を実ノード３ｃへ渡す。実ノード３ｃは、実ノード３ａの実行結果を用いてアプリケーションの実行を行い、その実行結果をクライアント５へ返す（Ｓ２０７）。また、実ノード３ａと実ノード３ｃは、ジョブが終了したことを示す情報をコーディネータノード２へ返す（Ｓ２０８）。ジョブの終了を検出したコーディネータノード２は、ＩＰ管理テーブルのＶＩＰ＃１とＲＩＰ＃ａのエントリ、ＶＩＰ＃２とＲＩＰ＃ｃのエントリを削除し、その結果をブロードキャストすることによりノードの解放を行う（Ｓ２０９）。実ノード３ａと実ノード３ｃは、ノードの解放を確認したことを示す情報をコーディネータノード２へ返す（Ｓ２１０）。
【００７３】
以上のように、ＨＰＣ型のアプリケーションを動作させる場合において、実ノードが故障した場合でも、故障した実ノードが行っていた処理をコーディネータノード２が自動的に適切な実ノードへ割り振ることにより、処理を継続させることができるため、ユーザ側で対応する必要がない。
【００７４】
実施の形態３．
本実施の形態では、本発明のクラスタシステムをＷＷＷモードで使う場合について説明する。例えばＷＷＷサーバのような複数のサーバに対してクライアントから大量のリクエストが来るような場合に、１つのＶＩＰに複数のＲＩＰを割り当てることでＩＰレベルの負荷分散を行うことができる。このような動作モードをＷＷＷモードと呼び、このＷＷＷモードでは１つのサービスの実行を複数の実ノードで分担して行う。本実施の形態では、コーディネータノード２が１つの仮想ノードを複数の実ノードに割り当て、クライアント５からの仮想ノードに対するリクエストを複数の実ノードへ分散することにより、ロードバランシング型のクラスタシステムを構成することが可能となる。
【００７５】
以下、ＷＷＷモードの動作について、図１０〜図１４を用いて説明する。まず、本実施の形態に係るクラスタシステムの構成について、図１０を用いて説明する。図１０は、本実施の形態に係るクラスタシステムの構成の他の一例を示すブロック図である。図１０において、図１と同一符号は図１に示された対象と同様のものであり、ここでの説明を省略する。ＷＷＷモードでは、オペレータがＷＷＷサーバの起動と停止を行う必要があるため、図１０では図１の構成にオペレータ６を加える。オペレータ６はコーディネータノード２を操作する。
【００７６】
次に、ＷＷＷモードにおけるサーバ起動の動作について、図１１を用いて説明する。図１１は、本実施の形態に係るクラスタシステムのＷＷＷモードにおけるサーバ起動の動作の一例を示すシーケンス図である。ここでは、説明のため、実ノード３ａが持つＲＩＰをＲＩＰ＃ａ、実ノード３ｂが持つＲＩＰをＲＩＰ＃ｂ、実ノード３ｃが持つＲＩＰをＲＩＰ＃ｃとする。
【００７７】
まず事前に、オペレータ６は、立ち上げるべきＷＷＷサーバの数を指定する。ここでは例えば３台と指定する。これにより、ノード割り当て要求が行われる（Ｓ３０１）。ノード割り当て要求を受けたコーディネータノード２は、各実ノード３ａ，３ｂ，３ｃの負荷状態に応じて、ＶＩＰ＃１に例えばＲＩＰ＃ａとＲＩＰ＃ｂとＲＩＰ＃ｃを割り当てる（Ｓ３０２）。実ノード３ａ，３ｂ，３ｃは、それぞれサービスの実行が可能な状態であれば、そのことを示す情報をコーディネータノード２へ返す（Ｓ３０３）。次に、コーディネータノード２は、図１２に示すＩＰ管理テーブルを生成し、各実ノード３ａ，３ｂ，３ｃへブロードキャストすると共に、ノード割り当てが成功したことを示すノード割り当て完了通知をオペレータ６へ返す（Ｓ３０４）。
【００７８】
ノード割り当て完了通知を受信したオペレータ６は、サーバ起動要求を行う（Ｓ３０５）。サーバ起動要求を受けたコーディネータノード２は、各実ノード３ａ，３ｂ，３ｃに対してサーバ起動を指示する（Ｓ３０６）。各実ノード３ａ，３ｂ，３ｃは、自ノードを起動させると共に、起動したことを示す情報をコーディネータノード２へ返す（Ｓ３０７）。コーディネータノード２は、サーバ起動が完了したことを示すサーバ起動完了通知をオペレータ６へ返す（Ｓ３０８）。以上のように、ＷＷＷモードにおけるサーバ起動の動作を行うことで、事前にＶＩＰ＃１にはＲＩＰ＃ａとＲＩＰ＃ｂとＲＩＰ＃ｃが割り当てられる。
【００７９】
次に、ＷＷＷモードにおけるサービス提供時の動作について、図１３を用いて説明する。図１３は、本実施の形態に係るクラスタシステムのＷＷＷモードにおけるサービス提供時の動作の一例を示すシーケンス図である。まず、クライアント５は、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）リクエストをＶＩＰ＃１宛に投入する（Ｓ４０１）。ＶＩＰ＃１宛のリクエストはコーディネータノード２を介して実ノード３ａへ割り振られる（Ｓ４０２）。実ノード３ａは、リクエストに対するＨＴＴＰレスポンスをクライアント５へ返す（Ｓ４０３）。以上がＷＷＷモードにおけるサービス提供時の動作である。ここではＶＩＰ＃１宛のリクエストを実ノード３ａへ割り振った例について説明したが、コーディネータノード２のパケット割り振り部２２３は、クライアント５からのリクエストを受ける度に、リクエストを転送する実ノードを変化させる。
【００８０】
次に、ＷＷＷモードにおけるサーバ停止の動作について、図１４を用いて説明する。図１４は、本実施の形態に係るクラスタシステムのＷＷＷモードにおけるサーバ停止の動作の一例を示すシーケンス図である。
【００８１】
まず、オペレータ６は、サーバ停止要求を行う（Ｓ５０１）。サーバ停止要求を受けたコーディネータノード２は、各実ノード３ａ，３ｂ，３ｃに対してサーバ停止を指示する（Ｓ５０２）。各実ノード３ａ，３ｂ，３ｃは、自ノードを停止させると共に、停止したことを示す情報をコーディネータノード２へ返す（Ｓ５０３）。コーディネータノード２は、サーバ停止が完了したことを示すサーバ停止完了通知をオペレータ６へ返す（Ｓ５０４）。
【００８２】
サーバ停止完了通知を受信したオペレータ６は、ノード解放要求を行う（Ｓ５０５）。ノード解放要求を受けたコーディネータノード２は、ＩＰ管理テーブルのＶＩＰ＃１とＲＩＰ＃ａのエントリ、ＶＩＰ＃１とＲＩＰ＃ｂのエントリ、ＶＩＰ＃１とＲＩＰ＃ｃのエントリを削除し、その結果をブロードキャストすることによりノードの解放を行う（Ｓ５０６）。各実ノード３ａ，３ｂ，３ｃは、ノードの解放を確認したことを示す情報をコーディネータノード２へ返す（Ｓ５０７）。コーディネータノード２は、ノード解放が終了したことを示すノード解放終了通知をオペレータ６へ返す（Ｓ５０８）。以上により、ＷＷＷモードにおけるサーバ停止の動作は終了する。
【００８３】
以上のように、ＷＷＷモードのサービス提供時において、クライアント５から大量のリクエストを受けた場合でも、コーディネータノード２が実ノードの負荷状態や故障等に応じて、リクエストを適切な実ノードへ割り振ることができる。
【００８４】
以上、実施の形態１から実施の形態３において本発明のクラスタシステムについて説明したが、図３で説明した本発明のクラスタシステムの構成において、コーディネータノード２が状況に応じたＩＰ管理テーブルを作成することにより、実施の形態１で説明したｒｓｈモード、実施の形態２で説明したＨＰＣモード、実施の形態３で説明したＷＷＷモードからなる３つのモードをいずれかに切り替えて動作させたり、３つのモードを組み合わせて動作させるようにすることも可能である。また、実ノードのいずれかに仮想ノード提供部２２２とパケット割り振り部２２３とコーディネータ２３の機能を備えることにより、コーディネータノード２として機能することが可能となるため、コーディネータノード２が故障した場合にも対応することができる。これによりさらに高信頼性を実現することができる。
【００８５】
（付記１）クライアントに対して少なくとも１つの仮想的な計算機ノードを提供するクラスタシステムにおける物理的な計算機ノードであって、
前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスと前記物理的な計算機ノードのＩＰアドレスである実ＩＰアドレスとの対応表であるＩＰ管理テーブルを記憶し、該ＩＰ管理テーブルに基づいて仮想ＩＰアドレスを用いた通信を行うＩＰ層と、
他の計算機ノードと前記クライアントにネットワークを介して接続するネットワークデバイスと、
を備えてなる計算機ノード。
（付記２）付記１に記載の計算機ノードにおいて、
さらに、
前記クライアントから指示されたアプリケーションを実行するアプリケーション実行部を備えたことを特徴とする計算機ノード。
（付記３）付記２に記載の計算機ノードにおいて、
前記ＩＰ層は、
前記アプリケーション実行部から仮想ＩＰアドレスを宛先とする第１のＩＰヘッダを付けた第１のパケットが入力された場合、宛先の仮想ＩＰアドレスに対応する実ＩＰアドレスを前記ＩＰ管理テーブルを用いて検索し、検索した実ＩＰアドレスを宛先とする第２のＩＰヘッダを前記第１のパケットにさらに付けるカプセル化を施し、得られた第２のパケットを前記ネットワークデバイスへ出力するカプセル化部と、
前記ネットワークデバイスから実ＩＰアドレスを宛先とする第３のＩＰヘッダを付けた第３のパケットが入力された場合、前記第３のパケットから前記第３のＩＰヘッダを外して第４のパケットを生成し、さらに仮想ＩＰアドレスを宛先とする第４のＩＰヘッダの仮想ＩＰアドレスが自らの計算機ノードの仮想ＩＰアドレスであれば、得られた前記第４のパケットを前記アプリケーション実行部へ出力するカプセル解除部と、
を備えたことを特徴とする計算機ノード。
（付記４）付記３に記載の計算機ノードにおいて、
さらに、
前記ネットワークデバイスと同様に扱われ、自らの計算機ノードの仮想ＩＰアドレスを宛先とするパケットを前記ＩＰ層へ出力するトンネルデバイスを備えたことを特徴とする計算機ノード。
（付記５）付記１に記載の計算機ノードにおいて、
さらに、
他の計算機ノードの負荷状態を検出する負荷状態検出部と、
前記負荷状態に基づいて前記仮想ＩＰアドレスに前記実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するノード割り当て部と、
前記ＩＰ管理テーブルを他の計算機ノードへブロードキャストするブロードキャスト部とを備え、
前記ＩＰ層は、
前記クライアントに対して前記仮想ＩＰアドレスを提供する仮想ノード提供部と、
前記ネットワークデバイスから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを前記ネットワークデバイスへ出力するパケット割り振り部と、
を備えたことを特徴とする計算機ノード。
（付記６）付記５に記載の計算機ノードにおいて、
前記パケット割り振り部は、前記ネットワークデバイスから前記仮想ＩＰアドレスを宛先とする第１のＩＰヘッダを付けた第１のパケットが入力された場合、検索した実ＩＰアドレスを宛先とする第２のＩＰヘッダを前記第１のパケットにさらに付けるカプセル化を施し、得られた第２のパケットを前記ネットワークデバイスへ出力することを特徴とする計算機ノード。
（付記７）付記５または付記６に記載の計算機ノードにおいて、
前記仮想ノード提供部は、前記ネットワークデバイスに対して実ＩＰアドレスと異なる少なくとも１つのＩＰアドレスを割り当てることを特徴とする計算機ノード。
（付記８）付記５乃至付記７のいずれかに記載の計算機ノードにおいて、
前記ノード割り当て部は、１つの仮想ＩＰアドレスに対して複数の実ＩＰアドレスを割り当てることを特徴とする計算機ノード。
（付記９）付記８に記載の計算機ノードにおいて、
前記ノード割り振り部は、クライアントから前記１つの仮想ＩＰアドレスに対して要求がある度に、要求を転送する実ＩＰアドレスを変化させることを特徴とする計算機ノード。
（付記１０）付記５乃至付記９のいずれかに記載の計算機ノードにおいて、
前記ブロードキャスト部は、前記ＩＰ管理テーブルのうち更新されたエントリだけを他の計算機ノードへブロードキャストすることを特徴とする計算機ノード。
（付記１１）付記５乃至付記１０のいずれかに記載の計算機ノードにおいて、
前記ブロードキャスト部は、前記ＩＰ管理テーブルのうち他の計算機ノードから要求されたエントリだけを要求した計算機ノードだけへ送信することを特徴とする計算機ノード。
（付記１２）クライアントに対して複数の仮想的な計算機ノードを提供するクラスタシステムであって、
付記２乃至付記４のいずれかに記載の計算機ノードであり、アプリケーションを実行する計算機ノードである少なくとも１つの実ノードと、
付記５乃至付記１１のいずれかに記載の計算機ノードであり、前記仮想ＩＰアドレスを前記実ノードの実ＩＰアドレスに割り当てる計算機ノードである少なくとも１つのコーディネータノードと、
を備えたことを特徴とするクラスタシステム。
（付記１３）付記１２に記載のクラスタシステムにおいて、
前記コーディネータノードは、前記ＩＰ管理テーブルを前記実ノードへ送信し、
該実ノードは、前記ＩＰ管理テーブルを受信したことを前記コーディネータノードへ送信することを特徴とするクラスタシステム。
（付記１４）クライアントに対して少なくとも１つの仮想的な計算機ノードを提供し、前記クライアントから指示されたアプリケーションを実際に実行する計算機ノードである少なくとも１つの実ノードの管理を行うクラスタ管理方法であって、
前記実ノードと前記クライアントにネットワークを介して接続するステップと、
前記クライアントに対して前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスを提供するステップと、
前記実ノードの負荷状態を検出するステップと、
前記負荷状態に基づいて前記仮想ＩＰアドレスに対して前記実ノードのＩＰアドレスである実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するステップと、
前記ＩＰ管理テーブルを前記実ノードへブロードキャストするステップと、
ネットワークを介して前記クライアントから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを、ネットワークを介して宛先の実ノードへ出力するステップと、
を備えてなるクラスタ管理方法。
（付記１５）クライアントに対して少なくとも１つの仮想的な計算機ノードを提供し、前記クライアントから指示されたアプリケーションを実際に実行する計算機ノードである少なくとも１つの実ノードの管理を行うために、コンピュータにより読取可能な媒体に記憶されたクラスタ管理プログラムであって、
前記実ノードと前記クライアントにネットワークを介して接続するステップと、
前記クライアントに対して前記仮想的な計算機ノードのＩＰアドレスである仮想ＩＰアドレスを提供するステップと、
前記実ノードの負荷状態を検出するステップと、
前記負荷状態に基づいて前記仮想ＩＰアドレスに対して前記実ノードのＩＰアドレスである実ＩＰアドレスを割り当て、前記ＩＰ管理テーブルを作成するステップと、
前記ＩＰ管理テーブルを前記実ノードへブロードキャストするステップと、
ネットワークを介して前記クライアントから前記仮想ＩＰアドレスを宛先とするパケットが入力された場合、前記ＩＰ管理テーブルを用いて前記仮想ＩＰアドレスから前記実ＩＰアドレスを検索し、検索した前記実ＩＰアドレスを宛先とするパケットを、ネットワークを介して宛先の実ノードへ出力するステップと、
をコンピュータに実行させることを特徴とするクラスタ管理プログラム。
【００８６】
【発明の効果】
以上に詳述したように本発明によれば、コーディネータノードが実ノードの負荷状態や故障等に応じてＶＩＰをＲＩＰへ割り振ることにより、クライアント側でノードの変更の処理を行うことなく、ノードの負荷の変化やノードの故障に柔軟に対応でき、高可用性を実現することができる。
【図面の簡単な説明】
【図１】本実施の形態に係るクラスタシステムの構成の一例を示すブロック図である。
【図２】本実施の形態に係るコーディネータノードの機能の一例を示すブロック図である。
【図３】カプセル化とカプセル化解除の動作の一例を示す図である。
【図４】ＩＰ層の実装の一例を示すブロック図である。
【図５】本実施の形態に係る実ノードの機能の一例を示すブロック図である。
【図６】本実施の形態に係るクラスタシステムのｒｓｈモードにおける動作の一例を示すシーケンス図である。
【図７】ｒｓｈモードにおけるＩＰ管理テーブルの一例を示す図である。
【図８】本実施の形態に係るクラスタシステムのＨＰＣモードにおける動作の一例を示すシーケンス図である。
【図９】ＨＰＣモードにおけるＩＰ管理テーブルの一例を示す図である。
【図１０】本実施の形態に係るクラスタシステムの構成の他の一例を示すブロック図である。
【図１１】本実施の形態に係るクラスタシステムのＷＷＷモードにおけるサーバ起動の動作の一例を示すシーケンス図である。
【図１２】ＷＷＷモードにおけるＩＰ管理テーブルの一例を示す図である。
【図１３】本実施の形態に係るクラスタシステムのＷＷＷモードにおけるサービス提供時の動作の一例を示すシーケンス図である。
【図１４】本実施の形態に係るクラスタシステムのＷＷＷモードにおけるサーバ停止の動作の一例を示すシーケンス図である。
【符号の説明】
１  クラスタシステム、２  コーディネータノード、２１  ＮＩＣ、２１１  ネットワークデバイス、２２  ＩＰ層、２２１  ＩＰ処理部、２２２  仮想ノード提供部、２２３  パケット割り振り部、２３  コーディネータ、２３１  負荷状態検出部、２３２  ノード割り当て部、２３３  ブロードキャスト部、３ａ，３ｂ，３ｃ  実ノード、３１  ＮＩＣ、３１１  ネットワークデバイス、３１２トンネルデバイス、３２  ＩＰ層、３２１  ＩＰ処理部、３２２  カプセル解除部、３２３  カプセル化部、３３  アプリケーション実行部、４  ネットワーク、５  クライアント、６  オペレータ、７  ｎｅｔｆｉｌｔｅｒ、７１  ＮＦ＿ＩＰ＿ＰＲＥ＿ＲＯＵＴＩＮＧ、７２  ｒｏｕｔｉｎｇ、７３  ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＩＮ、７４  ＮＦ＿ＩＰ＿ＦＯＲＷＡＲＤ、７５  ＮＦ＿ＩＰ＿ＬＯＣＡＬ＿ＯＵＴ、７６  ｒｏｕｔｉｎｇ、７７  ＮＦ＿ＩＰ＿ＰＯＳＴ＿ＲＯＵＴＩＮＧ、８  下位層、９  上位層。
【図１】
2004264911.tif 000003
【図２】
2004264911.tif 000004
【図３】
2004264911.tif 000005
【図４】
2004264911.tif 000006
【図５】
2004264911.tif 000007
【図６】
2004264911.tif 000008
【図７】
2004264911.tif 000009
【図８】
2004264911.tif 000010
【図９】
2004264911.tif 000011
【図１０】
2004264911.tif 000012
【図１１】
2004264911.tif 000013
【図１２】
2004264911.tif 000014
【図１３】
2004264911.tif 000015
【図１４】
2004264911.tif 000016