(57)【要約】【課題】サービスの再起動が行われる際に、通信切断を発生させないこと。【解決手段】複数の仮想マシンを起動するノード装置は、仮想マシンに対して資源を割り当てる手段と、割り当てる手段により、資源が割り当てられた仮想マシンを用いてサービスを提供する手段と、各仮想マシンに対して、通信フローを割り振る手段とを有する。サービスを提供する手段は、仮想マシンの再起動が行われる場合に、該仮想マシンと、再起動が行われた仮想マシンとを用いてサービスを提供し、割り振る手段は、仮想マシンと、再起動が行われた仮想マシンとの間で、通信フローを割り振る。【選択図】図１
2009265894.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想マシンを起動するノード装置であって、
仮想マシンに対して資源を割り当てる手段と、
前記割り当てる手段により、資源が割り当てられた仮想マシンを用いてサービスを提供する手段と、
各仮想マシンに対して、通信フローを割り振る手段と
を有し、
前記サービスを提供する手段は、仮想マシンの再起動が行われる場合に、該仮想マシンと、前記再起動が行われた仮想マシンとを用いてサービスを提供し、
前記割り振る手段は、前記仮想マシンと、前記再起動が行われた仮想マシンとの間で、通信フローを割り振ることを特徴とするノード装置。
【請求項２】
請求項１に記載のノード装置において、
前記割り当てる手段は、前記再起動が行われた仮想マシンに対して、前記仮想マシンに割り当てられていた資源の一部の資源を割り当てることを特徴とするノード装置。
【請求項３】
請求項１又は２に記載のノード装置において、
前記ネットワークブリッジは、前記仮想マシンにおける通信フローを示す情報に基づいて、前記仮想マシンと、前記再起動が行われた仮想マシンとの間で、通信フローを割り振ることを特徴とするノード装置。
【請求項４】
請求項３に記載のノード装置において、
前記通信フローを示す情報には、仮想マシンIDと、フロー識別子と、ポート識別子とが含まれることを特徴とするノード装置、
【請求項５】
請求項４に記載のノード装置において、
前記フロー識別子には、送信元のIPアドレスと、送信元のポート番号と、受信先のポート番号と、ポート識別子とが含まれることを特徴とするノード装置。
【請求項６】
請求項３に記載のノード装置において、
前記通信フローを示す情報には、仮想マシンIDと、経路を識別するためのラベルと、ポート識別子とが含まれることを特徴とするノード装置。
【請求項７】
請求項１に記載のノード装置において、
前記サービスを提供する手段は、前記仮想ノードが提供するサービスが終了したかを判断し、
前記割り当てる手段は、前記サービスを提供する手段において前記仮想ノードが提供するサービスが終了したと判断した場合、前記仮想マシンに割り当てられていた資源を開放し、該開放した資源を前記再起動が行われた仮想マシンに割り当てることを特徴とするノード装置。
【請求項８】
請求項１に記載のノード装置において、
仮想マシンの再起動が行われたことを通知する手段
を有し、
前記割り当てる手段は、他のノード装置により仮想マシンが再起動されたことが通知された場合に、該再起動される前の仮想マシンにより提供されるサービスを利用している仮想マシンに対して割り当てている資源量を変化させることを特徴とするノード装置。
【請求項９】
仮想マシンに対して資源を割り当てるステップと、
仮想マシンを起動するステップと、
前記割り当てるステップにより、資源が割り当てられた仮想マシンを用いてサービスを提供するステップと、
各仮想マシンに対して、通信フローを割り振るステップと
を有し、
前記サービスを提供するステップでは、仮想マシンの再起動が行われる場合に、該仮想マシンと、前記再起動が行われた仮想マシンとを用いてサービスを提供し、
前記割り振るステップでは、前記仮想マシンと、前記再起動が行われた仮想マシンとの間で、通信フローを割り振ることをコンピュータに実行させるためのプログラム。
【請求項１０】
仮想マシンに対して資源を割り当てるステップと、
仮想マシンを起動するステップと、
前記割り当てるステップにより、資源が割り当てられた仮想マシンを用いてサービスを提供するステップと、
各仮想マシンに対して、通信フローを割り振るステップと
を有し、
前記サービスを提供するステップでは、仮想マシンの再起動が行われる場合に、該仮想マシンと、前記再起動が行われた仮想マシンとを用いてサービスを提供し、
前記割り振るステップでは、前記仮想マシンと、前記再起動が行われた仮想マシンとの間で、通信フローを割り振ることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンによりサービスを提供するノード装置及びプログラム並び方法に関する。
【背景技術】
【０００２】
既存の通信フローを切断することなく、サービスの再起動を１台のノード装置で実現することは困難である。例えば、サービスの再起動を行う原因には、障害の発生やバージョンアップがある。このため、サービスの再起動は、２台以上のノード装置と、スイッチとして機能するノード装置とを連携させることにより実現していた。２台以上のノード装置によりサービスが提供され、スイッチとして機能するノード装置によりフローの割り振りが行われる。発生頻度の低いサービスの再起動に備えて、複数のノード装置を用意するのは効率的でない。
【非特許文献１】Paul  Barham,  Boris  Dragovic,  Keir  Fraser,  Steven  Hand,  Tim  Harris,  Alex  Ho,  Rolf  Neugebauer,  Ian  Pratt,  Andrew  Warfield.  "Xen  and  the  art  of  virtualization".  Proceedings  of  the  nineteenth  ACM  symposium  on  Operating  systems  principles:  164  -  177,  2003
【非特許文献２】Ian  Foster  "What  is  the  Grid?  A  Three  Point  Checklist",  July  2002
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上述したサービスの再起動は、仮想マシンを用いた場合においても、同一のネットワーク識別子を使用する必要があるため、再起動前の仮想マシンと再起動後の仮想マシンとを共存させることは困難である。ここで、ネットワーク識別子には、IPアドレス、MACアドレスなどが含まれる。この場合、サービスを利用する対向するノード装置や直前のルータなどから再起動前の仮想マシンと再起動後の仮想マシンとが同じに見えなければならない。しかし、通信が行われる場合、再起動前の仮想マシンへの通信フローなのか、再起動後の仮想マシンへの通信フローなのかを判断できない。
【０００４】
そこで、本発明は、上述した課題に鑑み、サービスの再起動が行われる際に、通信切断を発生させないことができるノード装置及びプログラム並びに方法を提供することを目的とする。
【０００５】
また、サービスの再起動が行われる際に、再起動前の仮想マシンと再起動後の仮想マシンとを一時的に共存させ、実行することができるノード装置及びプログラム並びに方法を提供することを他の目的とする。
【０００６】
また、サービスの再起動が行われる際に、一時的に共存し、実行する再起動前仮想マシン及び再起動後の仮想マシンへの資源割り当てを動的に変化させることができるノード装置及びプログラム並びに方法を提供することを他の目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本ノード装置は、
複数の仮想マシンを起動するノード装置であって、
仮想マシンに対して資源を割り当てる手段と、
前記割り当てる手段により、資源が割り当てられた仮想マシンを用いてサービスを提供する手段と、
各仮想マシンに対して、通信フローを割り振る手段と
を有し、
前記サービスを提供する手段は、仮想マシンの再起動が行われる場合に、該仮想マシンと、前記再起動が行われた仮想マシンとを用いてサービスを提供し、
前記割り振る手段は、前記仮想マシンと、前記再起動が行われた仮想マシンとの間で、通信フローを割り振る。
【０００８】
この例によれば、仮想マシンの再起動が行われた場合に、再起動前の仮想マシンと再起動後の仮想マシンとの間で、通信フローが割り振られるため、通信切断が生じないようにすることができる。
【０００９】
本プログラムは、
仮想マシンに対して資源を割り当てるステップと、
仮想マシンを起動するステップと、
前記割り当てるステップにより、資源が割り当てられた仮想マシンを用いてサービスを提供するステップと、
各仮想マシンに対して、通信フローを割り振るステップと
を有し、
前記サービスを提供するステップでは、仮想マシンの再起動が行われる場合に、該仮想マシンと、前記再起動が行われた仮想マシンとを用いてサービスを提供し、
前記割り振るステップでは、前記仮想マシンと、前記再起動が行われた仮想マシンとの間で、通信フローを割り振ることをコンピュータに実行させる。
【００１０】
本方法は、
仮想マシンに対して資源を割り当てるステップと、
仮想マシンを起動するステップと、
前記割り当てるステップにより、資源が割り当てられた仮想マシンを用いてサービスを提供するステップと、
各仮想マシンに対して、通信フローを割り振るステップと
を有し、
前記サービスを提供するステップでは、仮想マシンの再起動が行われる場合に、該仮想マシンと、前記再起動が行われた仮想マシンとを用いてサービスを提供し、
前記割り振るステップでは、前記仮想マシンと、前記再起動が行われた仮想マシンとの間で、通信フローを割り振る。
【発明の効果】
【００１１】
本発明の実施例によれば、サービスの再起動が行われる際に、通信切断を発生させないようにすることができる。
【００１２】
また、サービスの再起動が行われる際に、再起動前の仮想マシンと再起動後の仮想マシンとを一時的に共存させ、実行することができる。
【００１３】
また、サービスの再起動が行われる際に、一時的に共存し、実行する再起動前の仮想マシン及び再起動後の仮想マシンへの資源割り当てを動的に変化させることができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施例を、図面を参照しつつ説明する。実施例を説明するための全図において、同一機能を有するものは同一符号を用い、繰り返しの説明は省略する。
（第１の実施例）
本実施例に係るノード装置について説明する。
【００１５】
本実施例では、資源について以下のように定義する。
【００１６】
（１）処理資源：  仮想マシンに割り当てられる資源のうち、サービスの処理に使われる資源  処理資源には、CPU、メモリ、HDDなどが含まれる。
【００１７】
（２）リンク資源：  サービスのデータ送受信に使われる資源  リンク資源には、ネットワークの帯域などが含まれる。
【００１８】
処理資源において、処理資源量は、CPUの場合には全CPU時間に対するパーセンテージ、メモリの場合にはメモリサイズ、HDDの場合にはディスクサイズにより表現されてもよい。例えば、メモリサイズやディスクサイズはバイトで示されてもよい。また、リンク資源において、リンク資源量は通信速度で示されるようにしてもよいし、帯域や周波数、波長数で表現されてもよい。
【００１９】
本実施例にかかるノード装置について、図１を参照して説明する。本実施例に係るノード装置１００は、複数のサービスを実行する。例えば、本実施例に係るノード装置１００は、サービスノード装置と呼ばれてもよい。例えば、ノード装置１００は、複数の仮想マシンを起動する。各仮想マシンは、サービスを提供する。各仮想マシンでは、オペレーティングシステムを並列実行するようにしてもよい。各仮想マシンにより実行されるオペレーティングシステムのうち、少なくとも１つは、他のオペレーティングシステムとは異なるオペレーティングシステムであってもよい。例えば、複数のオペレーティングシステムは、仮想マシンモニタというソフトウエアが提供する仮想的ハードウェア上で実行される。このソフトウエアには、VMwareのようなホストOSやXen、XenとDomain0のOSが含まれるようにしてもよい。
【００２０】
本実施例に係るノード装置１００は、ネットワークインタフェース１０２と、仮想マシン１０４と、仮想ネットワークブリッジ１０６と、仮想マシンモニタ１０８と、フロー情報記憶部１１０とを有する。
【００２１】
ネットワークインタフェース１０２には、ネットワークと接続するためのネットワークケーブルが接続される。
【００２２】
仮想マシン１０４は、複数の仮想マシンを有する。図１には、旧仮想マシン（VM:  virtual  machine)１０４１と新仮想マシン１０４２が示される。旧仮想マシンは、サービスを提供していた再起動前の仮想マシンを示す。新仮想マシンは、再起動後の仮想マシンを示す。本実施例に係るノード装置１００では、仮想マシンの再起動が行われる場合に、該仮想マシンと、再起動が行われた仮想マシンとが共存する。各仮想マシンでは、論理的に処理資源及びリンク資源が分離された状態でサービスが動作する。
【００２３】
仮想ネットワークブリッジ１０６は、仮想マシン１０４に含まれる各仮想マシンとネットワークインタフェース１０２とを仮想的に接続する。
【００２４】
仮想マシンモニタ１０８は、仮想マシンを制御する。また、起動している仮想マシンの監視(モニタ)を行う。
【００２５】
フロー情報記憶部１１０には、旧仮想マシンにおける通信フローを示すフロー情報が格納される。例えば、旧仮想マシンにおける通信フローは、現在の通信フローであってもよい。仮想ネットワークブリッジ１０６は、フロー情報記憶部１１０に、該旧仮想マシンにおける通信フロー情報を格納する。仮想ネットワークブリッジ１０６は、フロー情報記憶部１１０に格納されるフロー情報を管理する。例えば、旧仮想マシンにおける現在の通信フローは、図２に示すようなフロー情報として管理される。図２には、仮想マシンIDと、フロー識別子と、ポート識別子とが対応付けられる。例えば、フロー識別子には、送信元及び受信先のIPアドレスと、ポート番号が含まれるようにしてもよい。このようなフロー識別子は、TCP/IPを用いたフローである場合に好適である。
【００２６】
例えば、フロー識別子は、図３に示すようなフロー情報として管理されるようにしてもよい。図３には、送信元のIPアドレス（src  IPアドレス）と、送信元のポート番号（src  ポート番号）と、受信先のポート番号（dst  ポート番号）と、ポート識別子とが対応付けられる。
【００２７】
また、例えば、旧仮想マシンにおける現在の通信フローは、図４に示すようなフロー情報として管理されるようにしてもよい。図４には、仮想マシンIDと、ラベルと、ポート識別子とが対応付けられる。ここで、ラベルとは、経路を識別するための情報である。
【００２８】
本実施例にかかるノード装置１００のハードウエア構成例について説明する。
【００２９】
ノード装置１００は、ＣＰＵと、ＲＯＭと、ＲＡＭと、ハードディスク装置等の大容量の記憶装置とを有する。さらにフレキシブルディスク装置等の補助記憶装置を備えるようにしてもよい。
【００３０】
コンピュータをノード装置１００として機能させるためのプログラムは、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、メモリカード等の記録媒体に記録された状態で提供される。この記録媒体をコンピュータの補助記憶装置に挿入すると、媒体に記録されたプログラムが読み取られる。そして、ＣＰＵは、読み込んだプログラムをＲＡＭあるいは記憶装置に書き込み、このプログラムに従って本実施例で説明するような処理を実行する。また、プログラムを、通信網を介してダウンロードし、また記憶媒体からハードディスク装置にコピー・インストールし実行するようにしてもよい。
【００３１】
本実施例に係るノード装置１００の動作について、図５を参照して説明する。
【００３２】
本実施例に係るノード装置１００は、再起動された新仮想マシン１０４２が起動した後に、再起動前の旧仮想マシン１０４１が扱っている通信フローを適切な資源量を用いて、旧仮想マシン１０４１において処理する。該通信フローが終わった段階で旧仮想マシン１０４１を終了する。
【００３３】
本実施例では、ノード装置１００上では、旧仮想マシン１０４１が既に起動し、当該仮想マシン１０４１は、該仮想マシン１０４１に割り当てられた資源を用いてサービスを提供している。旧仮想マシン１０４１は、仮想ネットワークブリッジ１０６に接続される。そして、旧仮想マシン１０４１は、仮想ネットワークブリッジ１０６を通じてネットワークインタフェース１０２を使用し、データのやり取りを行う。
【００３４】
ノード装置１００は、利用者からの仮想マシンを再起動する命令を認識する（ステップＳ５０２）。例えば、利用者は、仮想マシンモニタ１０８に対して仮想マシン１０４１を再起動する命令を行う。ノード装置１００は、入力された仮想マシン１０４１に関する設定ファイルのパスに基づいて、該設定ファイルにアクセスし、仮想マシン１０４１の再起動に必要とされる処理資源・リンク資源に関する情報を読み込む。例えば、仮想マシンモニタ１０８には、再起動する仮想マシン１０４１に関する設定ファイルのパスが渡される。例えば、利用者により渡されるようにしてもよい。例えば、設定ファイルのパスは、GUI(Graphical  User  Interface)やコマンド・スクリプトファイルなどを通じて渡されるようにしてもよい。
【００３５】
仮想マシンモニタ１０８は、渡された設定ファイルのパスに基づいて、該設定ファイルにアクセスし、仮想マシン１０４１の再起動に必要とされる処理資源・リンク資源に関する情報を読み込む。例えば、設定ファイルには、仮想マシン１０４１の識別子や使用するディスクイメージのファイル名が含まれるようにしてもよい。仮想マシン１０４１の識別子は、仮想マシン１０４１の名称であってもよい。また、設定ファイルには、CPU割り当て量、メモリ割り当て量、ネットワーク帯域割り当て量などが含まれるようにしてもよい。例えば、CPU割当量は、パーセンテージで表されてもよい。また、メモリ割り当て量は、バイト数で表されてもよい。また、ネットワーク帯域割り当て量は、通信速度で表されてもよい。CPU割り当て量、メモリ割り当て量、ネットワーク帯域割り当て量などが仮想マシン１０４１において必要とされる処理資源・リンク資源に関する情報とされてもよい。
【００３６】
ノード装置１００は、現在起動している旧仮想マシン１０４１への資源割当量をある程度減少させる。そして、ノード装置１００は、該減少させた資源割当量をこれから再起動する仮想マシン１０４１に対して割り当てる（ステップＳ５０４）。以降、再起動された仮想マシン１０４１を新仮想マシン１０４２と呼ぶ。仮想マシンモニタ１０８は、旧仮想マシン１０４１への資源割当量のうち、該旧仮想マシン１０４１が提供しているサービスに必要とされる資源量に基づいて、該サービスに与える影響がないと想定される資源量減少させる。例えば、減少させる資源量は、所定の値、例えば３０％としてもよい。そして、仮想マシンモニタ１０８は、これから起動する新仮想マシン１０４２に対して、該減少させた資源量を割り当てる。
【００３７】
ノード装置１００は、新仮想マシン１０４２に対して割り当てた資源を用いて、該新仮想マシン１０４２を起動する（ステップＳ５０６）。ノード装置１００は、新仮想マシン１０４２と仮想ネットワークブリッジ１０６とを接続する。このようにすることにより、新仮想マシン１０４２は、仮想ネットワークブリッジ１０６を通じて、ネットワークインタフェース１０２を使用して、データのやり取りを行うことができる。例えば、仮想マシンモニタ１０８は、新仮想マシン１０４２に対して割り当てた資源を用いて、該新仮想マシン１０４２を起動する。仮想マシンモニタ１０８は、新仮想マシン１０４２と仮想ネットワークブリッジ１０６とを接続する。
【００３８】
ノード装置１００は、旧仮想マシン１０４１に対して、現在の通信フロー情報の要求を行う。旧仮想マシン１０４１は、通信フロー情報の要求に従って、カーネル内の通信フローに関する情報を取得する（ステップＳ５０８）。例えば、仮想マシンモニタ１０８は、旧仮想マシン１０４１に対して、現在の通信フロー情報の要求を行う。旧仮想マシン１０４１は、通信フロー情報の要求に従って、カーネル内の通信フローの関する情報を取得する。例えば、旧仮想マシン１０４１は、procファイル等を利用して、カーネル内の通信フローの関する情報を取得するようにしてもよい。また、カーネル内の通信フローに関する情報には、プロトコルコントロールブロックなどに含まれる通信フローに関する情報が含まれるようにしてもよい。また、カーネル内の通信フローに関する情報には、フロー識別子を含むようにしてもよい。旧仮想マシン１０４１は、取得したカーネル内の通信フローの関する情報を仮想マシンモニタ１０８に渡す。
【００３９】
ノード装置１００は、取得した旧仮想マシン１０４１が処理する通信フローの情報を格納する。例えば、仮想マシンモニタ１０８は、旧仮想マシン１０４１から、当該旧仮想マシン１０４１が現在処理する通信フローの情報を取得する。仮想マシンモニタ１０８は、取得した旧仮想マシン１０４１が現在処理する通信フローの情報と旧仮想マシン１０４１の仮想マシンIDを仮想ネットワークブリッジ１０６に入力する。仮想ネットワークブリッジ１０６は、取得した旧仮想マシン１０４１が現在処理する通信フローの情報と旧仮想マシン１０４１の仮想マシンID、及び該旧仮想マシン１０４１の仮想マシンIDから求められるポート識別子をフロー情報記憶部１１０に格納する。
【００４０】
ノード装置１００は、取得した旧仮想マシン１０４１が現在処理する通信フローの情報に基づいて、該旧仮想マシン１０４１がサービスを提供しているかを判断する（ステップＳ５１０）。例えば、仮想マシンモニタ１０８は、フロー情報記憶部１１０に格納された旧仮想マシン１０４１の通信フローの情報に基づいて、該旧仮想マシン１０４１がサービスを提供しているかを判断する。
【００４１】
旧仮想マシン１０４１がサービスを提供していないと判断した場合（ステップＳ５１０：ＮＯ）、ノード装置１００は、該旧仮想マシン１０４１を終了させる（ステップＳ５１４）。ノード装置１００は、旧仮想マシン１０４１に割り当てていた資源を開放する。そして、ノード装置１００は、開放した資源を新仮想マシン１０４２に割り当てる。例えば、仮想マシンモニタ１０８は、旧仮想マシン１０４１がサービスを提供していないと判断した場合、該旧仮想マシン１０４１を終了させる。仮想マシンモニタ１０８は、旧仮想マシン１０４１に割り当てていた資源を開放する。仮想マシンモニタ１０８は、開放した資源を新仮想マシン１０４２に割り当てる。
【００４２】
一方、旧仮想マシン１０４１がサービスを提供していると判断した場合（ステップＳ５１０：ＹＥＳ）、ノード装置１００は、ネットワークインタフェース１０２から受信パケットを受け取った場合、該受信パケットと旧仮想マシン１０４１の通信フロー情報に基づいて、該受信パケットを旧仮想マシン１０４１と新仮想マシン１０４２との間で振り分ける。また、ノード装置１００は、旧仮想マシン１０４１が使用する資源量を再配分する（ステップＳ５１２）。例えば、旧仮想マシン１０４１がサービスを提供していると判断した場合、仮想マシンモニタ１０８は、ネットワークインタフェース１０２から受信パケットを受け取った場合、該受信パケットと旧仮想マシン１０４１の通信フロー情報に基づいて、該受信パケットを旧仮想マシン１０４１と新仮想マシン１０４２との間で振り分ける。このようにすることにより、適切な仮想マシンに、パケットを転送できる。また、仮想マシンモニタ１０８は、旧仮想マシン１０４１が使用する資源量を再配分する。
【００４３】
その後、ステップＳ５０８に戻る。そして、ノード装置１００は、旧仮想マシン１０４１に対して、現在の通信フロー情報の要求を行う。旧仮想マシン１０４１は、通信フロー情報の要求に従って、カーネル内の通信フローの関する情報を取得する。
【００４４】
次に、上述したステップＳ５１２において、ノード装置１００が旧仮想マシン１０４１の通信フロー情報に基づいて行うパケットの振り分け処理について、図６を参照して説明する。例えば、仮想ネットワークブリッジ１０６は、フロー情報記憶部１１０に格納された旧仮想マシン１０４１の通信フロー情報に基づいて、ネットワークから送信されたパケットを、旧仮想マシン１０４１又は新仮想マシン１０４２に転送する。
【００４５】
仮想ネットワークブリッジ１０６は、ネットワークインタフェース１０２により入力された受信パケットを解析する（ステップＳ６０２）。例えば、受信パケットのヘッダ部分には、通信フローに関する情報が含まれる。仮想ネットワークブリッジ１０６は、受信パケットのヘッダ部分の解析を行う。例えば、仮想ネットワークブリッジ１０６は、受信パケットのヘッダ部分に含まれるフロー識別子を抽出する。
【００４６】
仮想ネットワークブリッジ１０６は、受信パケットが、旧仮想マシン１０４１へのフローに含まれるパケットであるかを判断する（ステップＳ６０４）。例えば、仮想ネットワークブリッジ１０６は、該抽出したフロー識別子がフロー情報記憶部１１０に格納された旧仮想マシン１０４１の通信フローに含まれるかを判断する。そして、仮想ネットワークブリッジ１０６は、該抽出したフロー識別子がフロー情報記憶部１１０に格納された旧仮想マシン１０４１の通信フローに含まれる場合には、旧仮想マシン１０４１へのパケットであると判断する。
【００４７】
受信パケットが、旧仮想マシン１０４１へのフローに含まれるパケットであると判断した場合（ステップＳ６０４：ＹＥＳ）、仮想ネットワークブリッジ１０６は、旧仮想マシン１０４１に、受信パケットを転送する（ステップＳ６０６）。旧仮想マシン１０４１は、仮想ネットワークブリッジ１０６により転送された受信パケットを受け取ると、当該旧仮想マシン１０４１におけるサービスのための処理を行う。
【００４８】
一方、受信パケットが、旧仮想マシン１０４１へのフローに含まれるパケットでないと判断した場合（ステップＳ６０４：ＮＯ）、仮想ネットワークブリッジ１０６は、新仮想マシン１０４２に、受信パケットを転送する（ステップＳ６０８）。新仮想マシン１０４２は、仮想ネットワークブリッジ１０６により転送された受信パケットを受け取ると、当該新仮想マシン１０４２におけるサービスのための処理を行う。
【００４９】
上述した処理は、仮想マシンモニタ１０８が、旧仮想マシン１０４１を終了させる（ステップＳ５１４）まで継続される。
【００５０】
次に、上述したステップＳ５１２において、ノード装置１００が資源の再配分を行う処理について、図７を参照して説明する。例えば、仮想マシンモニタ１０８は、旧仮想マシン１０４１と新仮想マシン１０４２との間で資源再分配を周期的に行う。旧仮想マシン１０４１における処理が終了した後、仮想マシンモニタ１０８は、旧仮想マシン１０４１を終了させる。
【００５１】
仮想マシンモニタ１０８は、旧仮想マシン１０４１がサービスを提供しているかを判断する（ステップＳ７０２）。上述したステップＳ５１０と同様の処理が行われることにより判断される。
【００５２】
旧仮想マシン１０４１がサービスを提供していないと判断した場合（ステップＳ７０２：ＮＯ）、仮想マシンモニタ１０８は、旧仮想マシン１０４１を終了させる（ステップＳ７１０）。仮想マシンモニタ１０８は、旧仮想マシン１０４１に割り当てていた資源を開放する。仮想マシンモニタ１０８は、開放した資源を新仮想マシン１０４２に割り当てる。
【００５３】
一方、旧仮想マシン１０４１がサービスを提供していると判断した場合（ステップＳ７０２：ＹＥＳ）、仮想マシンモニタ１０８は、一定期間休止する（ステップＳ７０４）。この一定時間は、例えば５秒程度であってもよい。
【００５４】
仮想マシンモニタ１０８は、ステップＳ７０４による一定期間の休止後、旧仮想マシン１０４１及び新仮想マシン１０４２に対して、現在の通信フロー情報の要求を行う。旧仮想マシン１０４１及び新仮想マシン１０４２は、通信フロー情報の要求に従って、カーネル内の通信フローの関する情報を取得する。例えば、旧仮想マシン１０４１及び新仮想マシン１０４２は、procファイル等を利用して、カーネル内の通信フローの関する情報を取得するようにしてもよい。また、カーネル内の通信フローに関する情報には、プロトコルコントロールブロックなどに含まれる通信フローに関する情報が含まれるようにしてもよい。また、カーネル内の通信フローに関する情報には、フロー識別子を含むようにしてもよい。旧仮想マシン１０４１は、取得したカーネル内の通信フローに関する情報を仮想マシンモニタ１０８に渡す。
【００５５】
仮想マシンモニタ１０８は、旧仮想マシン１０４１から、当該旧仮想マシン１０４１が現在処理する通信フローの情報を取得する。仮想マシンモニタ１０８は、取得した旧仮想マシン１０４１が現在処理する通信フローの情報を仮想ネットワークブリッジ１０６に入力する。仮想ネットワークブリッジ１０６は、取得した旧仮想マシン１０４１が現在処理する通信フローの情報と旧仮想マシン１０４１の仮想マシンID、及び該旧仮想マシン１０４１の仮想マシンIDから求められるポート識別子をフロー情報記憶部１１０に格納する。その結果、フロー情報が更新される（ステップＳ７０６）。
【００５６】
仮想マシンモニタ１０８は、旧仮想マシン１０４１及び新仮想マシン１０４２から取得した通信フローの情報に基づいて、資源の再分配を行う（ステップＳ７０８）。例えば、仮想マシンモニタ１０８は、旧仮想マシン１０４１及び新仮想マシン１０４２が、それぞれ現在扱っているフローの数に比例する資源量を、旧仮想マシン１０４１及び新仮想マシン１０４２に割り当てるようにしてもよい。
【００５７】
その後、ステップＳ７０２に戻る。仮想マシンモニタ１０８は、ステップＳ７０６において更新された旧仮想マシン１０４１の通信フローの情報に基づいて、旧仮想マシン１０４１が現在サービスを実際に提供しているかを判断する。
（第２の実施例）
本実施例に係るノード装置について説明する。
【００５８】
本実施例において、資源についての定義は上述した実施例と同様である。
【００５９】
本実施例に係るノード装置１００は、上述した実施例に係るノード装置の構成と同様である。
【００６０】
本実施例に係るネットワークシステムは、複数のノード装置１００を有する。このネットワークシステムは、サービスノードネットワークシステムと呼ばれてもよい。本実施例では、一例として、図８に示すように、ネットワークシステムが２のノード装置を有する場合について説明する。ネットワークシステムが３以上のノード装置を有してもよい。各ノード装置は、通信網２００を介して接続される。通信網には、インターネットなどのネットワークが含まれる。
【００６１】
本実施例に係るネットワークシステムの動作について、図９を参照して説明する。
【００６２】
本実施例において、利用者によりノード装置１００１に対して、仮想マシン１０４を再起動する命令が行われる。この場合、仮想マシンモニタ１０８は、上述した実施例と同様の処理を行うことにより、旧仮想マシン１０４１における現在のサービス提供状況を把握する。例えば、上述したステップＳ５０２−ステップＳ５０８と同様の処理が行われる。
【００６３】
本実施例では、ノード装置１００１では、仮想マシンモニタ１０８が、当該ノード装置１００１上で動作する旧仮想マシン１０４１における現在のサービス提供状況を把握する。一方、ノード装置１００２では、当該ノード装置１００２上で動作する仮想マシン１０４は、旧仮想マシン１０４１により提供されるサービスを利用する。ノード装置１００２の仮想マシンモニタ１０８は、旧仮想マシン１０４１における現在のサービス提供状況に基づいて、旧仮想マシン１０４１がサービスの提供を早く終了できるように、ノード装置１００２上の仮想マシン１０４の資源量を変化させる。
【００６４】
ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４１がサービスを提供しているかを判断する（ステップＳ９０２）。上述したステップＳ５１０と同様の処理が行われることにより判断される。
【００６５】
旧仮想マシン１０４１がサービスを提供していないと判断した場合（ステップＳ９０２：ＮＯ）、仮想マシンモニタ１０８は、旧仮想マシン１０４１を終了させる（ステップＳ９１４）。仮想マシンモニタ１０８は、旧仮想マシン１０４１に割り当てていた資源を開放する。仮想マシンモニタ１０８は、開放した資源を新仮想マシン１０４２に割り当てる。
【００６６】
一方、旧仮想マシン１０４１がサービスを提供していると判断した場合（ステップＳ９０２：ＹＥＳ）、仮想マシンモニタ１０８は、旧仮想マシン１０４１に対応する通信フロー情報に基づいて、現在旧仮想マシン１０４１により提供されるサービスを利用しているノード装置１００２が存在するかを判断する。そして、存在すると判断した場合、仮想マシンモニタ１０８は、再起動通知メッセージを生成し、ノード装置１００２に対して、該再起動通知メッセージを送信する（ステップＳ９０４）。この再起動通知メッセージには、ノード装置１００２が利用しているサービスを提供している仮想マシンが再起動されたことを示す情報と、該サービスを利用している仮想マシンのネットワーク識別子とが含まれるようにしてもよい。例えば、仮想マシンのネットワーク識別子には、該仮想マシンのIPアドレスが含まれるようにしてもよい。ノード装置１００１の仮想マシンモニタ１０８は、生成した再起動通知メッセージを仮想ネットワークブリッジ１０６に入力する。
【００６７】
ノード装置１００１では、仮想ネットワークブリッジ１０６は、仮想マシンモニタ１０８により入力された再起動通知メッセージをネットワークインタフェース１０２に入力する。そして、ノード装置１００１のネットワークインタフェース１０２は、仮想ネットワークブリッジ１０６により入力された再起動通知メッセージを、ネットワークを介して接続されたノード装置１００２へ送信する。
【００６８】
ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４１がサービスを提供しているかを判断する（ステップＳ９０６）。上述したステップＳ５１０と同様の処理が行われることにより判断される。
【００６９】
旧仮想マシン１０４１がサービスを提供していないと判断した場合（ステップＳ９０６：ＮＯ）、ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４１を終了させる（ステップＳ９１４）。ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４１に割り当てていた資源を開放する。ノード装置１００１の仮想マシンモニタ１０８は、開放した資源を新仮想マシン１０４２に割り当てる。
【００７０】
一方、旧仮想マシン１０４１がサービスを提供していると判断した場合（ステップＳ９０６：ＹＥＳ）、ノード装置１００１の仮想マシンモニタ１０８は、一定期間休止する（ステップＳ９０８）。この一定時間は、例えば５秒程度であってもよい。
【００７１】
ノード装置１００１の仮想マシンモニタ１０８は、ステップＳ９０８による一定期間の休止後、旧仮想マシン１０４１及び新仮想マシン１０４２に対して、現在の通信フロー情報の要求を行う。ノード装置１００１の旧仮想マシン１０４１及び新仮想マシン１０４２は、通信フロー情報の要求に従って、カーネル内の通信フローの関する情報を取得する。例えば、旧仮想マシン１０４１は、procファイル等を利用して、カーネル内の通信フローの関する情報を取得するようにしてもよい。また、カーネル内の通信フローに関する情報には、プロトコルコントロールブロックなどに含まれる通信フローに関する情報が含まれるようにしてもよい。また、カーネル内の通信フローに関する情報には、フロー識別子を含むようにしてもよい。ノード装置１００１の旧仮想マシン１０４１は、取得したカーネル内の通信フローの関する情報を仮想マシンモニタ１０８に渡す。
【００７２】
ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４から、当該旧仮想マシン１０４１が現在処理する通信フローの情報を取得する。
【００７３】
ノード装置１００１の仮想マシンモニタ１０８は、取得した旧仮想マシン１０４１が現在処理する通信フローの情報を仮想ネットワークブリッジ１０６に入力する。ノード装置１００１の仮想ネットワークブリッジ１０６は、取得した旧仮想マシン１０４１が現在処理する通信フローの情報をフロー情報記憶部１１０に格納する。
【００７４】
また、ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４１の仮想マシンIDを仮想ネットワークブリッジ１０６に入力する。ノード装置１００１の仮想ネットワークブリッジ１０６は、取得した旧仮想マシン１０４１の仮想マシンIDをフロー情報記憶部１１０に格納する。
【００７５】
また、ノード装置１００１の仮想マシンモニタ１０８は、取得した旧仮想マシン１０４１の仮想マシンIDから求められるポート識別子を仮想ネットワークブリッジ１０６に入力する。ノード装置１００１の仮想ネットワークブリッジ１０６は、取得した旧仮想マシン１０４１の仮想マシンIDから求められるポート識別子をフロー情報記憶部１１０に格納する。その結果、フロー情報が更新される（ステップＳ９１０）。
【００７６】
ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４１及び新仮想マシン１０４２から取得した通信フローの情報に基づいて、資源の再分配を行う（ステップＳ９１２）。例えば、ノード装置１００１の仮想マシンモニタ１０８は、旧仮想マシン１０４１及び新仮想マシン１０４２が、それぞれ現在扱っているフローの数に比例する資源量を、旧仮想マシン１０４１及び新仮想マシン１０４２に割り当てるようにしてもよい。
【００７７】
そして、ステップＳ９０６に戻る。ノード装置１００１の仮想マシンモニタ１０８は、ステップＳ９１０において更新された旧仮想マシン１０４１の通信フローの情報に基づいて、旧仮想マシン１０４１が現在サービスを実際に提供しているかを判断する。
【００７８】
ノード装置１００２上のネットワークインタフェース１０２は、ネットワークを介して接続されたノード装置１００１から再起動通知メッセージを受信する。ノード装置１００２上のネットワークインタフェース１０２は、受信した再起動通知メッセージを仮想ネットワークブリッジ１０６に入力する。
【００７９】
ノード装置１００２の仮想ネットワークブリッジ１０６は、ネットワークインタフェース１０２により入力された再起動通知メッセージを仮想マシンモニタ１０８に渡す。
【００８０】
ノード装置１００２の仮想マシンモニタ１０８は、仮想ネットワークブリッジ１０６により再起動通知メッセージを受け取り、該再起動通知メッセージに含まれるネットワーク識別子に基づいて、該当する仮想マシンを特定する。
【００８１】
ノード装置１００２の仮想マシンモニタ１０８は、仮想マシン１０４に対する資源割り当て量を増加させる（ステップＳ９１６）。例えば、ノード装置１００２の仮想マシンモニタ１０８は、仮想マシン１０４に対する資源割り当て量を、１０％程度増加させるようにしてもよい。また、ノード装置１００２の仮想マシンモニタ１０８は、同時に起動している仮想マシンに割り当てている資源に基づいて増加させる資源量を決定するようにしてもよい。また、増加させる資源量は、予め決定されてもよい。
【００８２】
ノード装置１００２の仮想マシン１０４は、仮想マシンモニタ１０８により追加して割り当てられた資源を利用して処理を行う（ステップＳ９１８）。ノード装置１００２の仮想マシン１０４は、割り当てられる資源量が増加するため、ノード装置１００１の旧仮想マシン１０４１により提供されるサービスを利用した処理を、早く終了することができる。
【００８３】
ノード装置１００２の仮想マシン１０４は、ノード装置１００１上の旧仮想マシン１０４１により提供されるサービスを利用した処理を終了する（ステップＳ９２０）。ノード装置１００２の仮想マシン１０４は、処理が終了したことを仮想マシンモニタ１０８に通知する。
【００８４】
ノード装置１００２の仮想マシンモニタ１０８は、仮想マシン１０４により通知された処理が終了したことを示す情報に基づいて、仮想マシン１０４に対して追加して割り当てた資源量分を減少させる（ステップＳ９２２）。
【００８５】
上述したステップＳ９１６においては、ノード装置１００２の仮想マシンモニタ１０８が、仮想マシン１０４に対する資源割り当て量を増加させる場合について説明した。しかし、ノード装置１００２の仮想マシンモニタ１０８が仮想マシン１０４に対する資源割り当て量を増加させることにより、ノード装置１００１の旧仮想マシン１０４１への負荷が増加する。その結果、ノード装置１００１の旧仮想マシン１０４１において、トラブルが発生することも想定される。例えば、ノード装置１００１の旧仮想マシン１０４１へ割り当てられる資源量は減少する傾向にある。このような場合に、ノード装置１００２の仮想マシンモニタ１０８が仮想マシン１０４に対する資源割り当て量を増加させると、ノード装置１００１の旧仮想マシン１０４１において、負荷が増大し、トラブルが発生する場合がある。このような場合には、ノード装置１００２の仮想マシンモニタ１０８は、仮想マシン１０４に対する資源割り当て量を、減少させるようにしてもよい。
（第３の実施例）
本実施例に係るノード装置について説明する。
【００８６】
本実施例において、資源についての定義は上述した実施例と同様である。
【００８７】
本実施例に係るノード装置１００は、上述した実施例に係るノード装置の構成と同様である。
【００８８】
本実施例に係るノード装置１００では、フロー情報記憶部１１０に格納されるフロー情報に、フロー識別子が含まれる。例えば、フロー識別子には、上述した図４に示すように、ラベルが含まれる。ラベルは、上述したように、経路を識別するための情報であり、例えばMPLS(Multi-Protocol  Label  Switching)などで使用される。
【００８９】
本実施例に係るノード装置１００では、MPLSのようにデータのフローが流れるパスごとにラベルが付与される。また、本実施例に係るネットワークシステムでは、通信のエンドのノード装置である仮想マシン１０４がパス生成を行う際にラベルに関する情報を交換する。例えば、通信のエンドのノード装置である仮想マシン１０４が、RSVP-TE(Resource  reservation  Protocol-Traffic  Engineering)のように、パス生成を行う際にラベルに関する情報を交換するようにしてもよい。
【００９０】
本実施例に係るノード装置１００により行われる処理については、上位レイヤでのフロー識別ではなく、下位レイヤでのフロー識別を行うこと以外は、上述した実施例と同様である。上位レイヤでのフロー識別には、TCP/IPでのフロー識別が含まれる。また、下位レイヤでのフロー識別には、MPLSでのフロー識別が含まれる。
【００９１】
このようにすることにより、フローの識別処理に係る時間を短縮できる。
【００９２】
本実施例によれば、再起動前と再起動後の仮想マシンを共存させることにより、既存の通信フローを切断することなく、障害やバージョンアップによるサービスの再起動を１台のノードで実現することができる。
【００９３】
本実施例によれば、通信フローを一時的に管理してデータを振り分けることにより、再起動前と再起動後の仮想マシンを共存させることができる。例えば、仮想ネットワークブリッジが、通信フローを一時的に管理して、データを振り分ける。
【００９４】
本実施例によれば、仮想マシンを用いてサービスを提供する際に、再起動前と再起動後の仮想マシンを共存させ、さらに、資源割り当て量を動的に変化させる。このようにすることにより、効率的な資源利用を実現しつつ、仮想マシンの提供するサービスを利用するための通信フローを切断することなくサービスを再起動できる。
【図面の簡単な説明】
【００９５】
【図１】一実施例に係るノード装置を示す部分ブロック図である。
【図２】一実施例に係るノード装置におけるフロー情報の一例を示す説明図である。
【図３】一実施例に係るノード装置におけるフロー情報の一例を示す説明図である。
【図４】一実施例に係るノード装置におけるフロー情報の一例を示す説明図である。
【図５】一実施例に係るノード装置の動作を示すフロー図である。
【図６】一実施例に係るノード装置の動作を示すフロー図である。
【図７】一実施例に係るノード装置の動作を示すフロー図である。
【図８】一実施例に係るネットワークシステムを示す部分ブロック図である。
【図９】一実施例に係るネットワークシステムの動作を示すフロー図である。
【符号の説明】
【００９６】
１００（１００１、１００２）  ノード装置
１０２  ネットワークインタフェース（NW  I/F）
１０４  仮想マシン
１０４１  旧仮想マシン(VM:  virtual  machine)
１０４２  新仮想マシン
１０６  仮想ネットワークブリッジ（仮想NWブリッジ）
１０８  仮想マシンモニタ
１１０  フロー情報記憶部
２００  通信網
１０００  ネットワークシステム
【図１】
2009265894.tif 000003
【図２】
2009265894.tif 000004
【図３】
2009265894.tif 000005
【図４】
2009265894.tif 000006
【図５】
2009265894.tif 000007
【図６】
2009265894.tif 000008
【図７】
2009265894.tif 000009
【図８】
2009265894.tif 000010
【図９】
2009265894.tif 000011