(57)【要約】      （修正有）【課題】フロー別に行われる処理を効率化しつつ、サーバの負荷分散を行う。【解決手段】複数のサーバの間での仮想マシンの移動を制御する。制御装置４０は、取得部６１、選択部６２、送信部４１を備える。取得部６１は、複数のサーバの各々で送受信されているデータを、仮想マシンごとに宛先別のフローに分類した結果を取得する。選択部６２は、複数のサーバのうちで稼働中の仮想マシンの数が相対的に大きい第１のサーバから第２のサーバに移動させる仮想マシンである移動対象を、第１のサーバで稼働中の仮想マシンから選択する。このとき、選択部６２は、第２のサーバで送受信されているフローの処理数が大きい仮想マシンほど優先的に選択する。送信部４１は、移動対象を第２のサーバに移動させるための制御パケットを送信する。【選択図】図２
2015215799.tif 000002
【特許請求の範囲】
【請求項１】
複数のサーバの間での仮想マシンの移動を制御する制御装置であって、
前記複数のサーバの各々で送受信されているデータを、前記仮想マシンごとに宛先別のフローに分類した結果を取得する取得部と、
前記複数のサーバのうちで稼働中の仮想マシンの数が相対的に大きい第１のサーバから第２のサーバに移動させる仮想マシンである移動対象を、前記第２のサーバで送受信されているフローの処理数が大きい仮想マシンほど優先的に、前記第１のサーバで稼働中の仮想マシンから選択する選択部と、
前記移動対象を前記第２のサーバに移動させるための制御パケットを送信する送信部
を備えることを特徴とする制御装置。
【請求項２】
前記複数のサーバのうちで稼働中の仮想マシンの数が相対的に小さいサーバである移動先候補が２台以上ある場合、前記選択部は、
前記移動先候補の各々について、前記第１のサーバで稼働中の仮想マシンごとに、処理対象のフローが一致する数を求め、
前記第１のサーバで稼働中の仮想マシンから選択された処理対象の仮想マシンと、前記移動先候補から選択された処理対象のサーバの組み合わせのうちで、前記処理対象のフローの一致数が大きい組み合わせを優先的に選択し、
選択した前記組み合わせ中のサーバを前記第２のサーバに選択し、
選択した前記組み合わせ中の仮想マシンを、前記移動対象に選択する
ことを特徴とする請求項１に記載の制御装置。
【請求項３】
前記第１のサーバと、前記複数のサーバのうちで稼働中の仮想マシンの数が相対的に小さいサーバとの間で、稼働中の仮想マシンの数の差が閾値に達したことを検出する検出部
をさらに備え、
前記選択部は、前記第１のサーバの識別情報と、前記複数のサーバのうちで稼働中の仮想マシンの数が相対的に小さいサーバの識別情報を、前記検出部から取得する
ことを特徴とする請求項１または２に記載の制御装置。
【請求項４】
前記第１のサーバの識別情報、稼働中の仮想マシンの数が前記第１のサーバよりも閾値以上小さいサーバの識別情報、および、前記移動対象の選択の要求を含む要求パケットを、前記複数のサーバ中の仮想マシンの配置を管理する管理装置から受信する受信部
をさらに備え、
前記選択部は、前記要求パケットを用いて、前記移動対象を選択し、
前記送信部は、前記管理装置を介して、前記制御パケットを前記第１のサーバに送信する
ことを特徴とする請求項１または２に記載の制御装置。
【請求項５】
複数のサーバを含むネットワーク中の第１のサーバとして動作する通信装置であって、
稼働中の仮想マシンが送受信するデータを、前記仮想マシンごとに宛先別のフローに分類する分類部と、
分類結果を、前記複数のサーバ間での仮想マシンの移動を制御する制御装置に送信する送信部と、
稼働中の仮想マシンの数が前記第１のサーバより小さい第２のサーバ中で処理されているフローと宛先が同じフローの処理数が相対的に大きいことにより、前記制御装置で移動対象に選択された仮想マシンの識別子と前記第２のサーバの識別子を含む制御パケットを受信する受信部と、
前記移動対象に選択された仮想マシンを前記第２のサーバに移動させるための処理を行う移動処理部
を備えることを特徴とする通信装置。
【請求項６】
複数のサーバの間での仮想マシンの移動を制御する制御装置が、
前記複数のサーバの各々で送受信されているデータを、前記仮想マシンごとに宛先別のフローに分類した結果を取得し、
前記複数のサーバのうちで稼働中の仮想マシンの数が相対的に大きい第１のサーバから第２のサーバに移動させる仮想マシンである移動対象を、前記第２のサーバで送受信されているフローの処理数が大きい仮想マシンほど優先的に、前記第１のサーバで稼働中の仮想マシンから選択し、
前記移動対象を前記第２のサーバに移動させるための制御パケットを送信する
処理を行うことを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の装置を含むネットワーク中での通信方法に関する。
【背景技術】
【０００２】
データセンタにおいて、データセンタ中の複数のサーバの各々に１つ以上の仮想マシン（Virtual Machine、ＶＭ）を動作させ、仮想マシンを貸し出すサービスが行われることがある。例えば、ＳａａＳ(Software as a Service)、ＶＰＳ(Virtual Private Server)などのサービスが行われている。サービス事業者は、さらに、仮想マシンで使用可能なアプリケーションも複数提供することがある。この場合、ユーザは、サービス事業者によって提供されたアプリケーションからユーザが使用するものを選択して、仮想マシン上で動作させる。サービス事業者は電力の使用状況やサーバの混雑具合などに応じて、新たな仮想マシンの配置や、配置済みの仮想マシンの移動などの処理を行う。
【０００３】
関連する技術として、移動する仮想マシンの通信キューを、移動先と移動元が共有している共有メモリに常駐させる方法が提案されている。この方法では、移動する仮想マシンのオペレーティングシステム（ＯＳ）とアプリケーションは、共有メモリにコピーされた後、移動先にコピーされる（例えば、特許文献１）。また、複数の仮想オペレーティングシステム（ＯＳ）と通信処理を管理するドライバが実行されるサーバにおいて、通信データを共通メモリに格納することが提案されている（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５―３２７２７９号公報
【特許文献２】特開２０１２−２２６４７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
サービス事業者は、データセンタを運用、管理するために、各アプリケーションの利用状況の収集や、ユーザごとの帯域利用制限などを行うこともある。これらの処理では、送受信されているパケットのフローごとに処理が行われる。しかし、サーバの負荷分散のために仮想マシンを移動させる際には、仮想マシンで処理中のフローの種類等については考慮せずに、サーバ間で動作している仮想マシン数の不均衡が解消されるので、フローごとに行われる処理に適していない配置になる恐れもある。
【０００６】
本発明は、フロー別に行われる処理を効率化しつつ、サーバの負荷分散を行う方法を提案することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態にかかる制御装置は、複数のサーバの間での仮想マシンの移動を制御する。制御装置は、取得部、選択部、送信部を備える。取得部は、複数のサーバの各々で送受信されているデータを仮想マシンごとに宛先別のフローに分類した結果を取得する。選択部は、複数のサーバのうちで稼働中の仮想マシンの数が相対的に大きい第１のサーバから第２のサーバに移動させる仮想マシンである移動対象を、第１のサーバで稼働中の仮想マシンから選択する。このとき、選択部は、第２のサーバで送受信されているフローの処理数が大きい仮想マシンほど優先的に選択する。送信部は、移動対象を第２のサーバに移動させるための制御パケットを送信する。
【発明の効果】
【０００８】
フロー別に行われる処理の効率化と、サーバの負荷分散が行われる。
【図面の簡単な説明】
【０００９】
【図１】通信装置の構成の例を示す図である。
【図２】制御装置の構成の例を示す図である。
【図３】通信装置および制御装置のハードウェア構成の例を示す図である。
【図４】ネットワークの例を示す図である。
【図５】ＶＭ配置テーブルの例を示す図である。
【図６】フロー情報の例を示す図である。
【図７】フロー分析データの例を示す図である。
【図８】仮想マシンの移動例を説明する図である。
【図９】制御装置の処理の例を説明するフローチャートである。
【図１０】実施形態にかかる方法によって回避される移動方法の例を示す図である。
【図１１】実施形態にかかる方法によって回避される移動方法の例を示す図である。
【図１２】実施形態にかかる方法によるキューの削減の例を示す図である。
【図１３】第２の実施形態が使用されるネットワークの例を示す図である。
【図１４】フロー制御装置とＶＭ管理装置の間の通信の例を説明するシーケンス図である。
【図１５】フロー制御装置とＶＭ管理装置の間で送受信されるパケットの例を示す図である。
【発明を実施するための形態】
【００１０】
＜装置構成＞
図１は、通信装置１０の構成の例を示す。通信装置１０は、送信部１１、受信部１２、通信部１３、パケット処理部１４、制御部２０、記憶部３０を備える。制御部２０は、フロー分類部２１とＶＭ管理部２２を有する。記憶部３０は、フロー情報３１と収集キュー３２を記憶している。
【００１１】
送信部１１および受信部１２は、通信装置１０と通信装置を制御する制御装置（図２）との間の通信に使用される。通信部１３は、通信装置とネットワーク中の他の装置との間の通信に使用される。パケット処理部１４は、任意の数の仮想マシンとして動作し、アプリケーションを用いたパケットの処理を行うものとする。なお、パケット処理部１４が複数の仮想マシンとして動作する場合、パケット処理部１４は、仮想スイッチとしても動作する。
【００１２】
フロー分類部２１は、パケット処理部１４中で動作している仮想マシンが、ネットワーク中の他の装置との間の通信で送受信したパケットを、フローごとに分類する。以下の例では、フロー分類部２１は、パケットの宛先アドレスと宛先ポート番号の組み合わせごとに、１つのフローとして解析するものとする。なお、フロー分類部２１は、パケットの処理に使用されるアプリケーションの種類をパケットのペイロード中の情報を用いて特定することにより、アプリケーションごとに複数のフローに分類してもよい。
【００１３】
フロー分類部２１は、分類した結果を、フロー情報３１として記憶部３０に記憶させる。さらに、フロー分類部２１は、各フローのパケットを、フローごとに収集キュー３２に格納する。収集キュー３２には、フローごとに異なるキューが含まれているものとする。ＶＭ管理部２２は、パケット処理部１４で動作する仮想マシンの動作の開始、終了、移動などの処理を行う。換言すると、ＶＭ管理部２２は、仮想マシンを移動させるための処理を行う移動処理部としての動作を行う。
【００１４】
図２は、制御装置４０の構成の例を示す。制御装置４０は、送信部４１、受信部４２、制御部５０、記憶部８０を備える。制御部５０は、フロー制御部６０とＶＭ管理部７０を有する。フロー制御部６０は、取得部６１と選択部６２を有する。ＶＭ管理部７０は、検出部７１と配置テーブル更新部７２を有する。記憶部８０は、ＶＭ配置テーブル８１、フロー情報８２、フロー分析データ８３を保持する。
【００１５】
送信部４１は、通信装置１０にパケットを送信する。受信部４２は、通信装置１０からパケットを受信する。受信部４２は、通信装置１０で動作している仮想マシンの情報を通知するパケットを配置テーブル更新部７２に出力し、通信装置１０で送受信されているフローの種類に関する情報を通知するパケットを取得部６１に出力する。
【００１６】
取得部６１は、入力されたパケットから、送信元の通信装置１０で送受信されているフローごとに、そのフローを処理している仮想マシンの識別情報と、フローを処理している仮想マシンが稼動している通信装置１０の識別情報を取得する。取得部６１は、得られた情報を、フロー情報８２として、記憶部８０に記憶させる。
【００１７】
配置テーブル更新部７２は、入力されたパケットを用いて、ＶＭ配置テーブル８１を更新する。ＶＭ配置テーブル８１は、通信装置１０の識別情報に、その通信装置１０で稼働中の仮想マシンの識別情報を対応付けた情報である。検出部７１は、ＶＭ配置テーブル８１を用いて、複数の通信装置１０について、稼働中の仮想マシンの数を比較する。稼働中の仮想マシンの数の差が閾値Ｔｈに達すると、検出部７１は、選択部６２に対して、移動させる仮想マシンと、仮想マシンの移動先の選択を要求する。このとき、検出部７１は、移動先の通信装置の候補と移動元となる通信装置の候補を、取得部６１に通知する。
【００１８】
選択部６２は、検出部７１から通知された情報とフロー情報８２を用いることにより、移動元の通信装置１０で動作している仮想マシンで処理されているフローと、移動先の通信装置１０で処理されているフローを比較し、一致しているフローの数を求める。選択部６２は、得られた結果をフロー分析データ８３として記憶部８０に記憶させ、フロー分析データ８３を用いて、移動させる仮想マシンと、仮想マシンの移動先を選択する。選択部６２は、選択結果を配置テーブル更新部７２に通知する。配置テーブル更新部７２は、仮想マシンを移動させるための制御パケットを生成し、送信部４１を介して、移動対象となっている仮想マシンが動作している通信装置１０と、仮想マシンの移動先となる通信装置１０とに送信する。
【００１９】
図３は、通信装置１０および制御装置４０のハードウェア構成の例を示す図である。通信装置１０と制御装置４０のいずれも、プロセッサ１０１、メモリ１０３、ネットワークインタフェース１０４、バス１０５、記憶装置１０６を備える。通信装置１０と制御装置４０は、いずれも、コンピュータとして実現されうる。バス１０５は、プロセッサ１０１、メモリ１０３、ネットワークインタフェース１０４（１０４ａ、１０４ｂ）、記憶装置１０６を、相互にデータの送受信が可能になるように接続する。なお、プロセッサ１０１は、例えば、記憶装置１０６に記憶されたプログラムを実行することができる。メモリ１０３は、プロセッサ１０１の動作により得られたデータや、プロセッサ１０１の処理に用いられるデータも、適宜、記憶する。
【００２０】
通信装置１０において、プロセッサ１０１はパケット処理部１４および制御部２０として動作し、メモリ１０３は記憶部３０として動作する。通信装置１０において、データ通信用のネットワークに接続されたネットワークインタフェース１０４ａは通信部１３として動作する。一方、ネットワークインタフェース１０４ｂは、制御用のネットワークに接続されているので、送信部１１および受信部１２として動作する。
【００２１】
制御装置４０において、プロセッサ１０１は制御部５０として動作し、メモリ１０３は記憶部８０として動作する。制御装置４０において、送信部４１と受信部４２は、制御用のネットワークに接続されたネットワークインタフェース１０４ｂと、プロセッサ１０１によって実現される。制御装置４０においては、ネットワークインタフェース１０４ａは、オプションであり、制御装置４０がユーザデータの送受信を行わない場合、制御装置４０はネットワークインタフェース１０４ａを含まなくても良い。
【００２２】
＜第１の実施形態＞
図４は、ネットワークの例を示す図である。以下、図４に示すように、通信装置１０ａ〜１０ｃが制御装置４０と接続されている場合を例として説明する。図４の点線は、通信装置１０ａ〜１０ｃと制御装置４０の間の通信に使用される制御用のネットワークの例である。図４の例では、通信装置１０ａ〜１０ｃの各々は、物理サーバである。また、図４では、図を見やすくするために、データの送受信用の回線は省略している。なお、以下の説明では、いずれの通信装置１０での処理かを区別し易くするために、符号の後に動作を行っている通信装置１０に割り当てられたアルファベットを記載することがある。例えば、フロー分類部２１ａは、通信装置１０ａ中のフロー分類部２１である。
【００２３】
ネットワークの運用が開始された時点では、通信装置１０ａ〜１０ｃのいずれでも、同数の仮想マシンが稼動しているものとする。その後、運用が終了した仮想マシンについて終了処理が行われた結果、図４に示すように仮想マシンが配置されたとする。以下、仮想マシンを区別するために、ＶＭ番号を用いるとする。ＶＭ番号は、「ＶＭ」という文字列の後に、個々の仮想マシンを識別するための番号を続けた文字列とする。
【００２４】
通信装置１０ａでは、仮想マシンＶＭ１〜ＶＭ３が動作している。仮想マシンＶＭ１はフローＡとフローＢを処理しているものとする。また、仮想マシンＶＭ２はフローＡとフローＣ、仮想マシンＶＭ３はフローＢとフローＣを処理しているものとする。フロー分類部２１ａは、仮想マシンＶＭ１〜ＶＭ３で処理されるパケットを、フロー別に収集キュー３２ａに出力する。このため、収集キュー３２ａには、フローＡ用のキュー、フローＢ用のキュー、および、フローＣ用のキューが設けられている。
【００２５】
通信装置１０ｂでは、仮想マシンＶＭ４、ＶＭ５が動作している。仮想マシンＶＭ４、ＶＭ５のいずれもフローＢとフローＣを処理しているものとする。フロー分類部２１ｂは、仮想マシンＶＭ４、ＶＭ５で処理されるパケットをフロー別に収集キュー３２ｂに出力するため、収集キュー３２ｂには、フローＢ用のキューとフローＣ用のキューが含まれている。
【００２６】
通信装置１０ｃでは、仮想マシンＶＭ６が動作しており、仮想マシンＶＭはフローＡとフローＣを処理している。フロー分類部２１ｃは、仮想マシンＶＭ６で処理されるパケットをフロー別に収集キュー３２ｃに出力するため、収集キュー３２ｃには、フローＡ用のキューとフローＣ用のキューが含まれている。
【００２７】
なお、図４の例では、通信装置１０ａ〜１０ｃがネットワーク中に含まれている場合を示しているが、ネットワーク中の通信装置１０の数は、実装に応じて任意に変更され得る。また、各仮想マシンが処理するフローの数や種類も実装に応じて任意に変更され得る。
【００２８】
各通信装置１０のＶＭ管理部２２は、所定の期間ごとに、その通信装置１０で動作している仮想マシンを特定するためのパケットを制御装置４０に宛てて送信している。制御装置４０の受信部４２は、通信装置１０で動作している仮想マシンを特定するためのパケットを配置テーブル更新部７２に出力する。そこで、配置テーブル更新部７２は、入力されたパケットを用いて、ＶＭ配置テーブル８１を更新する。
【００２９】
図５は、ＶＭ配置テーブル８１の例を示す図である。ＶＭ配置テーブル８１は、仮想マシンごとに、その仮想マシンが動作している通信装置１０の識別情報と、仮想マシンの識別情報を対応付けている。図５の例では、通信装置１０の識別情報としてサーバ番号が使用され、仮想マシンの識別情報としてＶＭ番号が使用されている。ここで、サーバ番号は、予め各通信装置１０に割り当てられており、「Ｓｅｒｖｅｒ」という文字列の後に、個々の通信装置１０を識別するための番号を続けた文字列であるものとする。図５の例では、各通信装置１０に割り当てられたサーバ番号は、通信装置１０ａ＝Ｓｅｒｖｅｒ１、通信装置１０ｂ＝Ｓｅｒｖｅｒ２、通信装置１０ｃ＝Ｓｅｒｖｅｒ３であるものとする。このため、図４に示すように仮想マシンが配置されている場合、ＶＭ配置テーブル８１は、図５に示すとおりになる。
【００３０】
各通信装置１０のフロー分類部２１は、所定の期間ごとに、その通信装置１０で動作している各仮想マシンでの処理対象のフローの種類を通知するためのパケット（フロー通知パケット）を制御装置４０に宛てて送信している。フロー通知パケットでは、仮想マシンのＶＭ番号と、そのＶＭ番号で識別される仮想マシンが処理しているフローの種類が対応付けられている。例えば、フロー分類部２１ａが送信するフロー通知パケットには、以下の情報要素が含まれる。
宛先アドレス    ：制御装置４０のアドレス
送信元アドレス  ：通信装置１０ａのアドレス
ＶＭ番号        ：ＶＭ１
ＶＭ１の処理対象：フローＡ、フローＢ
ＶＭ番号        ：ＶＭ２
ＶＭ２の処理対象：フローＡ、フローＣ
ＶＭ番号        ：ＶＭ３
ＶＭ３の処理対象：フローＢ、フローＣ
制御装置４０の受信部４２は、フロー通知パケットを取得部６１に出力する。そこで、取得部６１は、入力されたパケットを用いて、フロー情報８２を更新する。
【００３１】
図６は、フロー情報８２の例を示す図である。フロー情報８２は、各仮想マシンで処理されているフローのフロー種別を表わしている。フロー情報８２においても、各仮想マシンは、サーバ番号とＶＭ番号の組み合わせで表現されている。図６は、図４に示すように仮想マシンが配置され、各仮想マシンが図４に示す種類のフローを処理している場合に作成されるフロー情報８２の例である。
【００３２】
制御装置４０において、ネットワーク中の各通信装置１０で動作している仮想マシンの変化や、各仮想マシンで処理されるフローの変化に伴って、ＶＭ配置テーブル８１とフロー情報８２が更新されているものとする。すなわち、検出部７１や選択部６２は、ＶＭ配置テーブル８１やフロー情報８２を用いてネットワーク中の現在のフローの処理状況や仮想マシンの動作状況を把握できるものとする。
【００３３】
検出部７１は、ＶＭ配置テーブル８１を用いて、各通信装置１０で稼動している仮想マシンの数を特定する。さらに、検出部７１は、仮想マシンの稼動数が最大の通信装置と仮想マシンの稼動数が最小の通信装置との間での、仮想マシンの稼動数の差を求める。例えば、ＶＭ配置テーブル８１が図５の通りである場合、検出部７１は、通信装置１０ａでは３台の仮想マシン、通信装置１０ｂでは２台の仮想マシン、通信装置１０ｃでは１台の仮想マシンが稼動していることを特定する。さらに、検出部７１は、仮想マシンの稼動数が最大の通信装置１０ａと仮想マシンの稼動数が最小の通信装置１０ｃとの間では、稼動数の差は２であることを求める。
【００３４】
検出部７１は、予め、閾値Ｔｈを保持している。閾値Ｔｈは、通信装置間での処理負荷の偏りが許容されない状況下での、通信装置間での仮想マシンの稼動数の差の最小値である。検出部７１は、稼動数の差の計算値が閾値Ｔｈに達すると、通信装置１０間での処理負荷の偏りが許容量を超えたと判定する。以下の説明では、閾値Ｔｈが２であるとする。この場合、通信装置１０ａと通信装置１０ｃとの間での仮想マシンの稼動数の差は２であるので、検出部７１は、通信装置１０ａと通信装置１０ｃの間の処理負荷は許容されない程度に大きくなっていると判定する。
【００３５】
検出部７１は、通信装置間での処理負荷の偏りが許容量を超えたことを検出すると、仮想マシンの稼働数が最大の通信装置と、稼動数が最小の通信装置を選択部６２に通知することにより、移動させる仮想マシンの選択を要求する。なお、稼動数が最大の通信装置が複数ある場合、検出部７１は、稼動数が最大の通信装置の全てを、選択部６２に通知する。また、稼動数が最小の通信装置が複数ある場合も、検出部７１は、同様に、稼動数が最小の通信装置の全てを、選択部６２に通知する。このとき、検出部７１は、選択部６２に通知する各通信装置で稼動している仮想マシンの数も合わせて選択部６２に通知するものとする。以下の説明では、分かりやすくするために、移動元の通信装置と移動先の通信装置が１台ずつ検出されている場合を例として説明する。例えば、図４〜図６に示すケースでは、検出部７１は、以下の情報を選択部６２に通知する。
移動元の通信装置                ：通信装置１０ａ（Ｓｅｒｖｅｒ１）
移動元の通信装置で稼働中のＶＭ数：３
移動先の通信装置                ：通信装置１０ｃ（Ｓｅｒｖｅｒ３）
移動先の通信装置で稼働中のＶＭ数：１
この処理により、選択部６２は、通信装置１０ａで稼働中の仮想マシンの中から、通信装置１０ｃに移動させる仮想マシンを選択することを要求されたと認識する。
【００３６】
選択部６２は、移動元の通信装置として通知された通信装置で動作している各仮想マシンについて、各仮想マシンが処理中のフローと、移動先の通信装置で処理中されているフローとの間で一致したフローの数を求める。このとき、選択部６２は、適宜、フロー情報８２（図６）を使用する。選択部６２は、得られた結果をフロー分析データ８３として記憶部８０に格納できる。
【００３７】
図７は、フロー分析データ８３の例を示す図である。フロー分析データ８３には、移動候補としてフローの一致数を調べた仮想マシンごとに、移動元の通信装置（移動元サーバ）、移動先の通信装置（移動先サーバ）、フローの一致数が記録されている。図７は、ネットワークが図４に示す状態であって、通信装置１０ａで稼働中の仮想マシンの中から、通信装置１０ｃに移動させる仮想マシンを選択することを要求されたときに、選択部６２が生成するフロー情報８２の例である。仮想マシンＶＭ１では、フローＡとフローＢの処理が行われているのに対して、移動先の通信装置１０ｃではフローＡとフローＣの処理が行われている。このため、仮想マシンＶＭ１について得られた一致数は１である。仮想マシンＶＭ２では、フローＡとフローＣの処理が行われているのに対して、移動先の通信装置１０ｃでもフローＡとフローＣの処理が行われているので、仮想マシンＶＭ２について得られた一致数は２である。さらに、仮想マシンＶＭ３では、フローＢとフローＣの処理が行われているのに対して、移動先の通信装置１０ｃではフローＡとフローＣの処理が行われているので、仮想マシンＶＭ３について得られた一致数は１である。
【００３８】
仮想マシンの移動により、移動先の通信装置が処理していないフローの処理を開始する場合、移動先の通信装置では、新たに処理を開始するフローの処理を行うためのキューを収集キュー３２に設けることになる。さらに、フローごとに、通信量の制限や使用されているアプリケーションの状況などの解析が行われる場合には、通信装置１０においてフローごとのサンプリングが行われている。このため、処理対象のフローの増加により、通信装置１０は、サンプリングの設定なども、適宜、変更することになる。これらの処理は、移動先の通信装置１０での処理負荷を大きく増大させる恐れがある。このため、フロー別の処理が行われている状況下では、移動先の通信装置１０において、仮想マシンの移動に伴って新たに処理を開始するフローの数が小さいほど、移動先の通信装置１０での処理負荷の増大を抑えられる。
【００３９】
そこで、選択部６２は、フロー分析データ８３のうちで、一致数が最も大きいエントリの内容に従って、仮想マシンを移動させることを決定し、選択した仮想マシンを、移動先の通信装置とともに配置テーブル更新部７２に通知する。例えば、フロー分析データ８３が図７に示すとおりである場合、選択部６２は、移動させる対象の仮想マシンとして、仮想マシンＶＭ２を選択する。なお、このときの移動元は通信装置１０ａで、移動先は通信装置１０ｃである。そこで、選択部６２は、以下の情報を配置テーブル更新部７２に通知する。
移動元の通信装置：通信装置１０ａ（Ｓｅｒｖｅｒ１）
移動対象のＶＭ  ：ＶＭ２
移動先の通信装置：通信装置１０ｃ（Ｓｅｒｖｅｒ３）
【００４０】
配置テーブル更新部７２は、仮想マシンＶＭ２を通信装置１０ａから通信装置１０ｃに移動させるための制御パケットを生成し、送信部４１を介して、通信装置１０ａに送信する。制御パケットのフォーマットや、通信装置１０ａと通信装置１０ｃにおける処理としては、ライブマイグレーションを実現可能な任意の技術が適用され得る。
【００４１】
図８は、仮想マシンの移動例を説明する図である。図８は、通信装置１０ａで稼動していた仮想マシンＶＭ２が、通信装置１０ａから通信装置１０ｃに移動する様子を示す。仮想マシンＶＭ２が通信装置１０ａから通信装置１０ｃに移動しても、いずれの通信装置１０においても処理対象のフローの種類は変化しない。このため、第１の実施形態にかかる方法を用いると、処理対象のフローが新たに加わることによる移動先の通信装置１０での処理負荷の増大を回避しやすい。
【００４２】
図９は、制御装置４０の処理の例を説明するフローチャートである。図９のフローチャートは、移動する仮想マシンと移動先を選択するための処理の例を示している。図９のフローチャートでは、変数ｘ、ｙ、ｚと、定数Ｘ、Ｙ、Ｚが使用される。変数ｘは、仮想マシンの移動元となり得る通信装置（移動元候補）のカウントに用いられる。変数ｙは、仮想マシンの移動先となり得る通信装置（移動先候補）のカウントに用いられる。また、変数ｚは、フローの一致数を特定した仮想マシンのカウントに用いられる。定数Ｘは移動元候補の総数、定数Ｙは移動先候補の総数、定数Ｚは、移動元候補中に含まれている仮想マシンの総数であるものとする。なお、定数Ｚは、処理対象となっている移動元候補のサーバに応じて、ＶＭ配置テーブル８１などから、一意に決定される。図９では、通信装置１０がサーバである場合の例を示す。
【００４３】
検出部７１は、サーバ間での仮想マシンの稼動数の差が閾値Ｔｈ以上になったかを判定する（ステップＳ１）。サーバ間での仮想マシンの稼動数の差が閾値Ｔｈ未満の場合、検出部７１は待機する（ステップＳ１でＮｏ）。サーバ間での仮想マシンの稼動数の差が閾値Ｔｈ以上の場合、検出部７１は、稼働中の仮想マシンの数が最小のサーバを移動先候補、稼働中の仮想マシンの数が最大のサーバを移動元候補とする（ステップＳ２）。検出部７１は、移動先候補と移動元候補を選択部６２に通知する。選択部６２は、検出部７１からの情報を用いて定数Ｘ、Ｙ、Ｚを決定すると共に、変数ｘ、ｙ、ｚをそれぞれ１に設定する（ステップＳ３〜Ｓ５）。選択部６２は、ｘ番目の移動元候補のサーバ中で稼動しているｚ番目の仮想マシンが処理しているフローのうち、ｙ番目の移動先候補のサーバ中で処理されているフローと一致するものがあるかを判定する（ステップＳ６）。一致するフローがある場合、選択部６２は、ｚ番目の仮想マシンについて、ｙ番目の移動先候補の通信装置中で処理されているフローと一致するフロー数をフロー分析データ８３に記録する（ステップＳ６でＹｅｓ、ステップＳ７）。ステップＳ６でＮｏと判定された場合か、ステップＳ７の処理の後、選択部６２は、変数ｙが定数Ｙ以上であるかを判定する（ステップＳ８）。変数ｙが定数Ｙ未満の場合、選択部６２は、変数ｙを１つインクリメントして、ステップＳ６に戻る（ステップＳ８でＮｏ、ステップＳ９）。すなわち、ステップＳ６〜Ｓ９では、移動先候補が２台以上ある場合、移動先候補の各々について、移動元候補で稼働中の仮想マシンごとに、処理対象のフローが一致する数を求めている。
【００４４】
変数ｙが定数Ｙ以上の場合、選択部６２は、変数ｚが定数Ｚ以上であるかを判定する（ステップＳ８でＹｅｓ、ステップＳ１０）。変数ｚが定数Ｚ未満の場合、選択部６２は、変数ｚを１つインクリメントして、ステップＳ５に戻る（ステップＳ１０でＮｏ、ステップＳ１１）。変数ｚが定数Ｚ以上の場合、選択部６２は、変数ｘが定数Ｘ以上であるかを判定する（ステップＳ１０でＹｅｓ、ステップＳ１２）。変数ｘが定数Ｘ未満の場合、選択部６２は、変数ｘを１つインクリメントして、ステップＳ４に戻る（ステップＳ１２でＮｏ、ステップＳ１３）。変数ｘが定数Ｘ以上になると、選択部６２は、フロー分析データ８３を参照して、一致数が最も多い仮想マシンと移動先のサーバの組み合わせを、仮想マシンの移動のために使用する条件として選択する（ステップＳ１２でＹｅｓ、ステップＳ１４）。換言すると、ステップＳ１４において、選択部６２は、一致数が最も多い仮想マシンと移動先のサーバの組み合わせを優先的に選択している。選択部６２は、選択した組み合わせ中のサーバを移動先のサーバとして選択すると共に、選択した組み合わせ中の仮想マシンを移動対象の仮想マシンに選択している。
【００４５】
図１０は、実施形態にかかる方法によって回避される移動方法の例を示す図である。各仮想マシンで処理されているフローの種類を考慮せずに通信装置１０での稼働中の仮想マシンの数を均一化すると、図１０に示すように、仮想マシンＶＭ１が通信装置１０ａから通信装置１０ｃに移動される可能性がある。この場合、仮想マシンＶＭ１はフローＡとフローＢを処理しているのに対し、通信装置１０ｃではフローＡとフローＣが処理対象になっている。このため、仮想マシンＶＭ１が通信装置１０ｃに移動されると、通信装置１０ｃでは、新たにフローＢに分類されるパケットを格納するキューを生成することになる。さらに、フローＢに関する処理の増加により、各フローのパケットからのサンプリングの間隔の設定変更などの処理も通信装置１０ｃで発生してしまう。第１の実施形態を用いて仮想マシンを移動することにより、図１０に示すように、仮想マシンの移動先での処理対象のフローの種類が増加することにより、移動先の通信装置１０ｃでの処理負担の増加するのを防止できる。
【００４６】
図１１は、実施形態にかかる方法によって回避される移動方法の例を示す図である。図１１は、各仮想マシンで処理されている仮想マシンの数を考慮せずに通信装置１０で処理中のフロー数が少なくなるように仮想マシンを移動した場合の例を示す。図１１による処理では、１台の通信装置１０で処理するフローの種類が増加すると通信装置１０の処理負荷が高くなるという問題は解消されているが、仮想マシンの稼動数に差があると、通信装置１０の処理負荷の差も大きくなることが考慮されていない。このため、通信装置１０ａで稼働中の仮想マシンＶＭ２が通信装置１０ｃに移動する上に、通信装置１０ａで稼働中の仮想マシンＶＭ３も通信装置１０ｂに移動することになっている。このような処理を行うと、通信装置１０ａで稼動する仮想マシンは３台から１台になり、さらに処理するフローの種類も３種類から２種類に削減されるが、通信装置１０ｂで稼動する仮想マシンの数が３台になってしまう。このため、図１１のように仮想マシンが移動されても、通信装置１０ｂの処理負荷が通信装置１０ａに比べて大幅に高くなってしまい、負荷分散ができない。
【００４７】
一方、第１の実施形態にかかる方法を用いて仮想マシンを移動させると、仮想マシンの移動に起因する処理対象のフローの種類の増加を防ぐだけでなく、通信装置１０間での負荷分散も行うことができる。
【００４８】
図１２は、第１の実施形態にかかる方法によるキューの削減の例を示す図である。図１２を参照しながら、データセンタ内での仮想マシンの移動を例として、第１の実施形態によるキュー数の削減について説明する。以下、仮想マシンの搭載数の平均は、１台の通信装置１０あたり４台程度であるものとする。さらに、比較を簡単にするために、仮想マシンの動作に使用されるオペレーションシステム、メモリ使用量、ＣＰＵ負荷は、いずれの仮想マシンでも同じ値であると近似する。各仮想マシンでは、２０種類程度のアプリケーションが使用されているものとする。各アプリケーションは、そのアプリケーションの処理を提供するアプリケーションサーバにパケットを送信するため、アプリケーションに固有のフローを発生させるものとする。
【００４９】
図１２のケースＣ１は、仮想マシンの移動処理が行われる場合の仮想マシンの配置例を示す。ケースＣ１に示すように、移動元となる通信装置１０ｄでは５つの仮想マシンＶＭ１〜ＶＭ５が稼動しており、移動先の通信装置１０ｅでは３つの仮想マシンＶＭ６〜ＶＭ８が稼動しているとする。ここで、ＶＭ１〜ＶＭ８の間で処理しているフローが一致する確率はパレート分布に従うものとする。すなわち、アプリケーションのフローのうちの２０％が平均的に一致すると近似する。すると、ＶＭ１〜ＡＭ８のいずれでも、２０種類のフローのうち、４つのフローは共通のフローとなる。ケースＣ１では、ＶＭ１〜ＶＭ５でそれぞれ１６種類のフローが他の仮想マシンと共通していない。このため、通信装置１０ｄには、共通の４フロー分のキューと合わせて、１６×５＋４＝８４のキューが設置されている。一方、通信装置１０ｅには、ＶＭ６〜ＶＭ８でそれぞれ１６種類のフローが他の仮想マシンと共通していないので、共通の４フロー分のキューと合わせて、１６×３＋４＝５２のキューが設置されている。
【００５０】
以下、仮想マシンＶＭ５で処理されているフローは、ＶＭ１〜ＶＭ８で共通の４フロー以外は、通信装置１０ｅ中で処理されているフローとは一致しないとする。一方、仮想マシンＶＭ１で処理されているフローは、ＶＭ１〜ＶＭ８で共通の４フロー以外も、ＶＭ６〜ＶＭ８のいずれかで処理されているフローであるとする。
【００５１】
ケースＣ２は、通信装置１０ｄ中で動作している仮想マシンＶＭ１〜ＶＭ５の中から無作為に移動対象が選択されたため、仮想マシンＶＭ５が通信装置１０ｄから通信装置１０ｅに移動した場合を示す。この場合、仮想マシンＶＭ５で処理されているフローは、４フロー分以外は他の仮想マシンと一致していないので、仮想マシンＶＭ５が移動した後の通信装置１０ｅには、１６×４＋４＝６８のキューが設置されることになる。
【００５２】
ケースＣ３は、第１の実施形態にかかる方法を用いて移動させる仮想マシンを選択したため、仮想マシンＶＭ１が移動対象に選択された場合を示す。この場合、仮想マシンＶＭ１で処理されているフローは全仮想マシンで共通に処理されている４フロー分以外も、他の仮想マシンと一致しているので、仮想マシンＶＭ１が移動しても、通信装置１０ｅではキューが増加しない。仮想マシンＶＭ１が移動した後の通信装置１０ｅには、１６×３＋４＝５２のキューが設置されることになる。従って、第１の実施形態を用いることにより、ケースＣ２に比べて、ケースＣ３では、１６のキューを削減することができる。
【００５３】
さらに、１つのキューの処理のために、送信パケットの解析用の２種類のアプリケーション、受信パケットの解析用の２種類のアプリケーション、ログ記録用の１種類のアプリケーションが動作すると仮定して、ケースＣ２とＣ３での処理負荷の差を計算する。ケースＣ２では、仮想マシンＶＭ５が通信装置１０ｅに移動すると、６８のキューが設置されるので、全てのキューの処理のために、６８×５＝３４０のアプリケーションが動作する。さらに、仮想マシンＶＭ５〜ＶＭ８のいずれでも、２０種類のアプリケーションが、キューの処理以外にも動作している。このため、ケースＣ２での通信装置１０ｅは、３４０＋２０×４＝４２０種類のアプリケーションを動かすだけの処理を行うことになる。
【００５４】
一方、ケースＣ３では、仮想マシンＶＭ１が通信装置１０ｅに移動すると、５２のキューが設置されるので、全てのキューの処理のために、５２×５＝２６０のアプリケーションが動作する。さらに、仮想マシンＶＭ１、ＶＭ６〜ＶＭ８のいずれでも、２０種類のアプリケーションが、キューの処理以外にも動作している。このため、ケースＣ３での通信装置１０ｅの処理は、２６０＋２０×４＝３４０種類のアプリケーション分ですむ。従って、ケースＣ３では、ケースＣ２の場合に比べて、通信装置１０ｅでの処理は、２６０／３４０×１００≒７６（％）程度に抑えられる。
【００５５】
＜第２の実施形態＞
第２の実施形態では、第１の実施形態での制御装置４０による処理が、フロー制御装置６５とＶＭ管理装置７５によって行われる場合について説明する。
【００５６】
図１３は、第２の実施形態が使用されるネットワークの例を示す図である。フロー制御装置６５とＶＭ管理装置７５の各々は、ネットワーク中で動作している通信装置１０ａ〜１０ｃと接続されている。また、フロー制御装置６５とＶＭ管理装置７５の間も互いに接続されている。なお、図１３では、ネットワーク中で動作している通信装置１０が通信装置１０ａ〜１０ｃである場合を例としており、通信装置１０ａ〜１０ｃでの仮想マシンの配置と各仮想マシンが処理するフローは図４を参照しながら説明したとおりであるものとする。なお、図１３は一例であり、ネットワーク中の通信装置１０の数や各通信装置１０で動作する仮想マシンの数、処理されるフローの種類などは、実装に応じて任意に変更され得る。
【００５７】
ＶＭ管理装置７５は、検出部７１、配置テーブル更新部７２、ＶＭ配置テーブル８１、送信部４１、受信部４２を備え、制御装置４０でのＶＭ管理部７０と同様の処理を行う。検出部７１、配置テーブル更新部７２、送信部４１、受信部４２で行われる処理やＶＭ配置テーブル８１中のデータは、第１の実施形態で説明した制御装置４０と同様である。
【００５８】
フロー制御装置６５は、取得部６１、選択部６２、フロー情報８２、フロー分析データ８３、送信部４１、受信部４２を備え、制御装置４０中のフロー制御部６０と同様の処理を行う。取得部６１、選択部６２、送信部４１、受信部４２で行われる処理、フロー情報８２、フロー分析データ８３中のデータは、第１の実施形態で説明した制御装置４０と同様である。
【００５９】
なお、フロー制御装置６５とＶＭ管理装置７５のいずれも、図３に示すハードウェアにより実現される。フロー制御装置６５では、プロセッサ１０１により、取得部６１と選択部６２が実現され、フロー分析データ８３とフロー情報８２はメモリ１０３に格納される。ＶＭ管理装置７５では、プロセッサ１０１により検出部７１と配置テーブル更新部７２が実現され、ＶＭ配置テーブル８１がメモリ１０３に格納される。送信部４１と受信部４２は、フロー制御装置６５とＶＭ管理装置７５のいずれでも、ネットワークインタフェース１０４ｂとプロセッサ１０１によって実現される。また、フロー制御装置６５とＶＭ管理装置７５はユーザデータの送受信を行わない場合、ネットワークインタフェース１０４ａを備えなくても良い。
【００６０】
図１４は、フロー制御装置６５とＶＭ管理装置７５の間の通信の例を説明するシーケンス図である。ＶＭ管理装置７５中の配置テーブル更新部７２は、定期的にネットワーク中の各通信装置１０から、その通信装置１０で動作している仮想マシンの情報を取得することにより、ＶＭ配置テーブル８１を更新する。そこで、検出部７１は、ＶＭ配置テーブル８１を用いて、複数の通信装置１０の間での仮想マシンの稼動数の差が、閾値Ｔｈ以上になったことを検出できる（ステップＳ２１）。ここでは、第１の実施形態と同様に、通信装置１０ａと通信装置１０ｃの間での仮想マシンの稼動数の差が閾値Ｔｈ以上であるものとする。次に、検出部７１は、フロー制御装置６５に送信するための移動要求パケットを生成する。
【００６１】
図１５は、フロー制御装置６５とＶＭ管理装置７５の間で送受信されるパケットの例を示す図である。移動要求パケットは、パケットＰ１に示すように、ヘッダとペイロードを有する。ペイロード中には、移動要求であることを示す値、移動元の通信装置の識別情報、移動元の通信装置中の仮想マシン数、移動先の通信装置の識別情報、移動先の通信装置中の仮想マシン数が含まれている。図１３に示すように仮想マシンが配置されている場合、検出部７１は、以下の情報を含む移動要求パケットを生成する。
移動元の通信装置                ：通信装置１０ａ（Ｓｅｒｖｅｒ１）
移動元の通信装置で稼働中のＶＭ数：３
移動先の通信装置                ：通信装置１０ｃ（Ｓｅｒｖｅｒ３）
移動先の通信装置で稼働中のＶＭ数：１
検出部７１は、移動要求パケットを、送信部４１を介してフロー制御装置６５に送信する（図１４のステップＳ２２）。
【００６２】
フロー制御装置６５の受信部４２は、移動要求パケットを選択部６２に出力する。選択部６２は、フロー情報８２を参照して、第１の実施形態で説明した処理と同様の処理により、フロー分析データ８３を生成する。なお、フロー制御装置６５中の取得部６１は、定期的に各通信装置１０から、仮想マシン別のフローの処理状況を取得し、第１の実施形態と同様の処理により、フロー情報８２を更新しているものとする。選択部６２は、フロー分析データ８３を用いて、フローの一致数が最も大きい仮想マシンと移動先通信装置の組み合わせを決定する（図１４のステップＳ２３）。
【００６３】
次に、選択部６２は、ＶＭ管理装置７５に送信するための応答パケットを生成する。応答パケットのフォーマットの例を図１５のパケットＰ２に示す。応答パケットは、ヘッダとペイロードを有する。ペイロード中には、応答パケットであることを示す値、移動元の通信装置の識別情報、移動対象となる仮想マシンの識別情報、移動先の通信装置の識別情報が含まれている。図１３に示すように仮想マシンが配置されている場合、フロー分析データ８３は図７に示すようになるので、選択部６２は、以下の情報を含む応答パケットを生成する。
移動元の通信装置：通信装置１０ａ（Ｓｅｒｖｅｒ１）
移動対象のＶＭ  ：ＶＭ２
移動先の通信装置：通信装置１０ｃ（Ｓｅｒｖｅｒ３）
選択部６２は、応答パケットを、送信部４１を介してＶＭ管理装置７５に送信する（図１４のステップＳ２４）。
【００６４】
ＶＭ管理装置７５の受信部４２は、応答パケットを配置テーブル更新部７２に出力する。配置テーブル更新部７２は、移動させる仮想マシンが稼動している通信装置１０ａに対して、仮想マシンＶＭ２を通信装置１０ｃに移動させることを通知する（ステップＳ２５）。なお、ＶＭ管理装置７５が移動させる仮想マシンを通知するときに行う処理や、通信装置１０での仮想マシンの移動などは、第１の実施形態と同様に、任意のライブマイグレーション技術を用いて実現される。
【００６５】
第２の実施形態でも、第１の実施形態と同様に、仮想マシンが処理しているフローの種類と、仮想マシンの移動先の通信装置１０が処理しているフローの種類の比較に基づいて移動対象の仮想マシンが決定される。このため、第１の実施形態と同様に、仮想マシンの移動先の通信装置１０におけるフローの増加による処理負担の増加を抑えられる。
【００６６】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【００６７】
以上の説明で示したテーブルやパケットフォーマットは一例であり、テーブルやパケット中の情報要素は、実装に応じて変更されうる。
【００６８】
第２の実施形態では、ＶＭ管理装置７５が通信装置１０に対して移動する仮想マシンや仮想マシンの移動先を通知する場合を例として説明したが、フロー制御装置６５が通信装置１０にこれらの情報を通知するように変形されても良いものとする。
【００６９】
仮想マシンを移動させるための制御パケットは、移動対象の仮想マシンが動作している通信装置と、仮想マシンの移動先の通信装置の両方に送信されても良い。また、制御パケットは、移動対象の仮想マシンが動作している通信装置に送信されるように設計されてもよいものとする。
【符号の説明】
【００７０】
１０  通信装置
１１、４１  送信部
１２、４２  受信部
１３  通信部
１４  パケット処理部
２０、５０  制御部
２１  フロー分類部
２２  ＶＭ管理部
３０、８０  記憶部
３１、８２  フロー情報
３２  収集キュー
４０  制御装置
６０  フロー制御部
６１  取得部
６２  選択部
６５  フロー制御装置
７０  ＶＭ管理部
７１  配置テーブル更新部
７５  ＶＭ管理装置
８１  ＶＭ配置テーブル
８３  フロー分析データ
１０１  プロセッサ
１０３  メモリ
１０４  ネットワークインタフェース
１０５  バス
１０６  記憶装置
【図１】
2015215799.tif 000003
【図２】
2015215799.tif 000004
【図３】
2015215799.tif 000005
【図４】
2015215799.tif 000006
【図５】
2015215799.tif 000007
【図６】
2015215799.tif 000008
【図７】
2015215799.tif 000009
【図８】
2015215799.tif 000010
【図９】
2015215799.tif 000011
【図１０】
2015215799.tif 000012
【図１１】
2015215799.tif 000013
【図１２】
2015215799.tif 000014
【図１３】
2015215799.tif 000015
【図１４】
2015215799.tif 000016
【図１５】
2015215799.tif 000017