(57)【特許請求の範囲】
【請求項１】
計算機に１つ以上の仮想マシンが構築された仮想マシンシステムであって、
前記計算機は、
仮想マシンごとのシステム情報を含む仮想マシン構成情報を収集し、複数の他の計算機から各計算機の空き容量情報を含むホスト構成情報を収集する情報収集部と、
前記情報収集部によって収集された仮想マシン構成情報とホスト構成情報とに基づいて、仮想マシンのマイグレーション先の他の計算機を決定する決定部と、
前記決定部によって決定されたマイグレーション先の他の計算機に、前記仮想マシンをマイグレーションする実行部とを含み、
前記決定部は、収集された前記仮想マシン構成情報と前記ホスト構成情報とに基づいて、前記仮想マシンに割り当てる使用メモリ量および使用ＣＰＵコア数を修正した場合のシミュレーションを行い、マイグレーションを実行可能なマイグレーション先の他の計算機を決定し、
前記実行部は、前記決定部によってマイグレーション先の他の計算機が決定された場合のシミュレーションと同じ使用メモリ量および使用ＣＰＵコア数を用いて、前記仮想マシンを前記決定された他の計算機にマイグレーションする
ことを特徴とする仮想マシンシステム。
【請求項２】
決定部は、仮想マシンが構築された計算機のＣＰＵ使用率の合計と複数の他の計算機の空きＣＰＵコア数とに基づいて算出した割り当て指標を判断基準の１つに用いて、仮想マシンに割り当てる使用メモリ量および使用ＣＰＵコア数を修正した場合のシミュレーションを行う
請求項１記載の仮想マシンシステム。
【請求項３】
情報収集部は、ＣＰＵコア数、ＣＰＵ使用率およびメモリ使用量を含む仮想マシン構成情報を収集する
請求項１または請求項２記載の仮想マシンシステム。
【請求項４】
情報収集部は、複数の他の計算機の空きＣＰＵコア数および空きメモリ容量を含むホスト構成情報を収集する
請求項１から請求項３のうちのいずれか１項に記載の仮想マシンシステム。
【請求項５】
計算機に１つ以上の仮想マシンが構築された仮想マシンシステムにおける自動マイグレーション方法であって、
仮想マシンごとのシステム情報を含む仮想マシン構成情報を収集し、
複数の他の計算機から各計算機の空き容量情報を含むホスト構成情報を収集し、
収集された前記仮想マシン構成情報と前記ホスト構成情報とに基づいて、前記仮想マシンに割り当てる使用メモリ量および使用ＣＰＵコア数を修正した場合のシミュレーションを行い、マイグレーションを実行可能なマイグレーション先の他の計算機を決定し、
前記マイグレーション先の他の計算機が決定された場合のシミュレーションと同じ使用メモリ量および使用ＣＰＵコア数を用いて、前記仮想マシンを前記決定された他の計算機にマイグレーションする
ことを特徴とする自動マイグレーション方法。
【請求項６】
計算機に１つ以上の仮想マシンが構築された仮想マシンシステムに、
仮想マシンごとのシステム情報を含む仮想マシン構成情報を収集する処理と、
複数の他の計算機から各計算機の空き容量情報を含むホスト構成情報を収集する処理と、
収集された前記仮想マシン構成情報と前記ホスト構成情報とに基づいて、前記仮想マシンに割り当てる使用メモリ量および使用ＣＰＵコア数を修正した場合のシミュレーションを行い、マイグレーションを実行可能なマイグレーション先の他の計算機を決定する処理と、
前記マイグレーション先の他の計算機が決定された場合のシミュレーションと同じ使用メモリ量および使用ＣＰＵコア数を用いて、前記仮想マシンを前記決定された他の計算機にマイグレーションする処理とを実行させるための
自動マイグレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンのマイグレーションを行う仮想マシンシステム、自動マイグレーション方法および自動マイグレーションプログラムに関する。
【背景技術】
【０００２】
近年、仮想マシン（ＶＭ：Virtual Machine ）の利用範囲が拡大し、無停止のシステムやミッションクリティカルなシステムを構成するときに利用される機会が増加している。一方で、仮想マシンの機能が増加し、様々なケースで利用されるにつれ、仮想マシンはより複雑化してきている。仮想マシンが複雑化すると、メンテナンスの難易度が上がる。メンテナンスの難易度が上がることによって、仮想マシンのホストのハードウェアやオペレーティングシステム（ＯＳ：Operating System）などに対するメンテナンスのコストが増加する。
【０００３】
ホストのメンテナンスを実施する場合には、そのホストにある（ホスト上の）全ての仮想マシンが影響を受ける。ホスト上の仮想マシンが提供するサービスを停止させずにホストのメンテナンスを実施するためには、そのホスト上の全ての仮想マシンを一時的にマイグレーション（移動）させることが必要である。
【０００４】
技術者が手動で仮想マシンのマイグレーションを行う方法では、仮想マシンが多くなるにつれて手間が増え、コストも増加する。従って、管理コストを下げるために、仮想マシンのマイグレーションを容易にする技術が求められている。
【０００５】
特許文献１には、仮想マシンのマイグレーション先のホストを決定する仮想マシンシステムが記載されている。特許文献１に記載された仮想マシンシステムでは、管理サーバが、仮想化ソフトウェアの種類や仮想マシンのマイグレーションに要する時間などを考慮してマイグレーション先のホストを決定する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−２１７３０２号公報（段落００１４，００６９−００７５）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１に記載された仮想マシンシステムでは、所定の情報に基づいて算出した評価値に従って、確実にマイグレーション先のホストを決定することができるが、決定先のホストで他の仮想マシンが運用中だった場合に、運用中の仮想マシンによって使用されているリソース状況が考慮されていないために、マイグレーションの実行時に、仮想マシンによるリソース（例えば、ＣＰＵパワー）の奪い合いが起きる可能性がある。
【０００８】
そこで、本発明は、リソースを確実に確保して仮想マシンのマイグレーションを実行する仮想マシンシステム、自動マイグレーション方法および自動マイグレーションプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明による仮想マシンシステムは、計算機に１つ以上の仮想マシンが構築された仮想マシンシステムであって、計算機は、仮想マシンごとのシステム情報を含む仮想マシン構成情報を収集し、複数の他の計算機から各計算機の空き容量情報を含むホスト構成情報を収集する情報収集部と、情報収集部によって収集された仮想マシン構成情報とホスト構成情報とに基づいて、仮想マシンのマイグレーション先の他の計算機を決定する決定部と、決定部によって決定されたマイグレーション先の他の計算機に、仮想マシンをマイグレーションする実行部とを含み、決定部は、収集された仮想マシン構成情報とホスト構成情報とに基づいて、仮想マシンに割り当てる使用メモリ量および使用ＣＰＵコア数を修正した場合のシミュレーションを行い、マイグレーションを実行可能なマイグレーション先の他の計算機を決定し、実行部は、決定部によってマイグレーション先の他の計算機が決定された場合のシミュレーションと同じ使用メモリ量および使用ＣＰＵコア数を用いて、仮想マシンを決定された他の計算機にマイグレーションすることを特徴とする。
【００１０】
本発明による自動マイグレーション方法は、計算機に１つ以上の仮想マシンが構築された仮想マシンシステムにおける自動マイグレーション方法であって、仮想マシンごとのシステム情報を含む仮想マシン構成情報を収集し、複数の他の計算機から各計算機の空き容量情報を含むホスト構成情報を収集し、収集された仮想マシン構成情報とホスト構成情報とに基づいて、仮想マシンに割り当てる使用メモリ量および使用ＣＰＵコア数を修正した場合のシミュレーションを行い、マイグレーションを実行可能なマイグレーション先の他の計算機を決定し、マイグレーション先の他の計算機が決定された場合のシミュレーションと同じ使用メモリ量および使用ＣＰＵコア数を用いて、仮想マシンを決定された他の計算機にマイグレーションすることを特徴とする。
【００１１】
本発明による自動マイグレーションプログラムは、計算機に１つ以上の仮想マシンが構築された仮想マシンシステムに、仮想マシンごとのシステム情報を含む仮想マシン構成情報を収集する処理と、複数の他の計算機から各計算機の空き容量情報を含むホスト構成情報を収集する処理と、収集された仮想マシン構成情報とホスト構成情報とに基づいて、仮想マシンに割り当てる使用メモリ量および使用ＣＰＵコア数を修正した場合のシミュレーションを行い、マイグレーションを実行可能なマイグレーション先の他の計算機を決定する処理と、マイグレーション先の他の計算機が決定された場合のシミュレーションと同じ使用メモリ量および使用ＣＰＵコア数を用いて、仮想マシンを決定された他の計算機にマイグレーションする処理とを実行させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、リソースを確実に確保して、自動で仮想マシンのマイグレーションを実行することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明による仮想マシンシステムの一実施形態であるホストの構成例を示すブロック図である。
【図２】仮想マシンのマイグレーションが行われた場合の、図１に示すホストの構成例を示すブロック図である。
【図３】仮想マシンのマイグレーションが行われる場合の、図１に示すホストの動作を示すＵＭＬアクティビティ図である。
【図４】仮想マシンのマイグレーション先を決定する処理を示すＵＭＬアクティビティ図である。
【図５】仮想マシンのパラメータを修正することなしに、ホストに仮想マシンを割り当てるシミュレーションの処理を示すＵＭＬアクティビティ図である。
【図６】仮想マシンのパラメータを修正して、ホストに仮想マシンを割り当てるシミュレーションの処理を示すＵＭＬアクティビティ図である。
【図７】本発明による仮想マシンシステムの主要部を示すブロック図である。
【発明を実施するための形態】
【００１４】
図１は、本発明による仮想マシンシステムの一実施形態であるホストの構成例を示すブロック図である。図１を参照して、本発明による仮想マシンシステムの一実施形態であるホスト１０の構成を説明する。
【００１５】
ホスト１０，２０，３０は、それぞれのリソースを１つ以上の仮想マシンに割り当てて、各ホスト上に１つ以上の仮想マシンを構築し、運用することができる。ホスト１０，２０，３０では、それぞれ仮想マシンを運用中であるとする。ホスト１０，２０，３０は、ネットワーク線５０によって接続され、それぞれ通信可能である。
【００１６】
ホスト１０は、仮想マシン１１ａ，１１ｂ，１１ｃを含む。ホスト１０では、仮想マシン管理ソフトウェア１２が動作しており、ホスト１０の制御部（図示せず）は、仮想マシン管理ソフトウェア１２のプログラムに従って、仮想マシン１１ａ，１１ｂ，１１ｃを制御する（以降、簡単に、ホスト１０が仮想マシン１１ａ，１１ｂ，１１ｃを管理する、と表現する。）。
【００１７】
ホスト１０は、仮想マシン管理ソフトウェア１２の動作によって、ホスト１０のハードウェア情報や仮想マシン１１ａ，１１ｂ，１１ｃの構成情報などを収集する。例えば、ホスト１０は、ホスト１０のＣＰＵコア数、ホスト１０のＣＰＵ数、ホスト１０のＩＰアドレス、ホスト１０の総メモリ容量、ホスト１０のＣＰＵ使用率、仮想マシン１１ａ，１１ｂ，１１ｃそれぞれのＣＰＵ使用率、および仮想マシン１１ａ，１１ｂ，１１ｃそれぞれのメモリ容量を収集しているとする。なお、仮想マシン管理ソフトウェア１２は、仮想マシンを構築する機能、および仮想マシンのマイグレーション先を決定する機能を備えている。
【００１８】
仮想マシン１１ａ，１１ｂ，１１ｃは、それぞれのＯＳのディスクイメージを共有ストレージ４０に格納する。
【００１９】
ホスト２０は、１台以上の仮想マシン（図示せず）を含む。ホスト２０では、仮想マシン管理ソフトウェア２２が動作している。ホスト２０は、ホスト２０上の仮想マシンを管理する。ホスト２０は、仮想マシン管理ソフトウェア２２の動作によって、ホスト２０のハードウェア情報や、ホスト２０上の仮想マシンのそれぞれの構成情報などを収集する。ホスト２０上の仮想マシンは、それぞれのＯＳのディスクイメージを共有ストレージ４０に格納する。
【００２０】
ホスト３０は、１台以上の仮想マシン（図示せず）を含む。ホスト３０では、仮想マシン管理ソフトウェア３２が動作している。ホスト３０は、ホスト３０上の仮想マシンを管理する。ホスト３０は、仮想マシン管理ソフトウェア３２の動作によって、ホスト３０のハードウェア情報や、ホスト３０上の仮想マシンのそれぞれの構成情報などを収集する。ホスト３０上の仮想マシンは、それぞれのＯＳのディスクイメージを共有ストレージ４０に格納する。
【００２１】
なお、各ホストは、他のホストが仮想マシン管理ソフトウェアの動作によって収集した各構成情報をネットワーク線５０を介して取得することができる。具体的には、例えば、ホスト１０は、ホスト２０のＣＰＵコア数、ＣＰＵ数、ＩＰアドレス、の総メモリ容量、ＣＰＵ使用率、ホスト２０上のそれぞれの仮想マシンのＣＰＵ使用率およびメモリ容量などを取得することができる。ホスト１０は、ホスト３０に対しても同様の情報を取得することができる。
【００２２】
共有ストレージ４０は、ストレージネットワーク線５１，５２，５３によって、それぞれホスト１０，２０，３０に接続される記憶装置である。共有ストレージ４０は、ホスト１０，２０，３０からアクセス可能である。
【００２３】
また、共有ストレージ４０に格納される仮想マシンのＯＳのディスクイメージは、当該仮想マシンが含まれるホスト以外のホストからもアクセス可能であるとする。すなわち、例えば、共有ストレージ４０に格納されている仮想マシン１１ａのＯＳのディスクイメージは、ホスト１０からだけでなく、ホスト２０およびホスト３０からもアクセスすることができる。
【００２４】
図２は、仮想マシンのマイグレーションが行われた場合の、図１に示すホストの構成例を示すブロック図である。図２を参照して、図１に示すホスト１０上の仮想マシン１１ａ，１１ｂ，１１ｃに対してマイグレーションが行われた場合のホスト１０，２０，３０の構成を説明する。
【００２５】
例えば、ホスト１０のメンテナンスを実施するために、ホスト１０上の仮想マシン１１ａ，１１ｂ，１１ｃに対してマイグレーションが行われるとする。まず、仮想マシン１１ａ，１１ｂ，１１ｃのマイグレーション先が決定される。仮想マシンのマイグレーション先の決定方法については、図４〜図６を参照して後述する。ここでは、仮想マシン１１ａはホスト２０に割り当てられ、仮想マシン１１ｂ，１１ｃはホスト３０に割り当てられたとする。
【００２６】
次に、決定されたマイグレーション先に従って、仮想マシン１１ａ，１１ｂ，１１ｃは、割り当て先の各ホストに移動される。その結果、図２に示すように、仮想マシン１１ａはホスト２０上の仮想マシン２１ａとなり、仮想マシン１１ｂはホスト３０上の仮想マシン３１ｂとなり、仮想マシン１１ｃはホスト３０上の仮想マシン３１ｃとなる。
【００２７】
図３は、仮想マシンのマイグレーションが行われる場合の、図１に示すホストの動作を示すＵＭＬ（Unified Modeling Language ）アクティビティ図である。図３を参照して、ホスト１０のメンテナンスを実施するために、ホスト１０上の仮想マシン１１ａ，１１ｂ，１１ｃのマイグレーションが行われるときに、図１に示すホスト１０，２０，３０が行う動作の概要を説明する。
【００２８】
まず、ホスト１０においてマイグレーションを行いたい仮想マシンが指定される（ステップＳ１１）。例えば、マイグレーションを行いたい仮想マシンに、仮想マシン１１ａ，１１ｂ，１１ｃを指定する。
【００２９】
次に、ホスト１０は、ネットワーク線５０を介して、他のホスト（例えば、ホスト２０，３０）との間で通信を行う。ホスト１０は、ホスト２０およびホスト３０から、それぞれのホスト２０，３０におけるホストのハードウェア情報や、ホスト上の仮想マシンの構成情報などの動作状況を取得する（ステップＳ１２）。
【００３０】
ステップＳ１２において取得した他のホストにおける動作状況に基づいて、ホスト１０は、仮想マシン１１ａ，１１ｂ，１１ｃ装置のそれぞれのマイグレーション先を決定する（ステップＳ１３）。マイグレーション先を決定する詳細な処理は、図４〜図６を参照して後述する。
【００３１】
ホスト１０は、ステップＳ１３において決定されたマイグレーション先に、それぞれの仮想マシンのマイグレーションを実施する（ステップＳ１４）。なお、マイグレーションを実施する前に、ホスト１０は、仮想マシン管理ソフトウェア１２によって収集されているデータのうち、ホスト１０上の仮想マシンの設定を示す情報を、例えば、ホスト１０の格納部（図示せず）または共有ストレージ４０に格納しておく。
【００３２】
ホスト１０およびマイグレーション先のホスト２０，３０は、ステップＳ１４においてホスト１０からホスト２０，３０にマイグレーションが実施されたという情報を保持する（ステップＳ１５）。なお、各ホストは、ＩＰアドレスなどの識別可能なＩＤをそれぞれ所有する。各ホストは、例えば、それぞれのホストのＩＤとマイグレーションの実施状況とを対応付けることによって、情報を保持することができる。
【００３３】
仮想マシン１１ａ，１１ｂ，１１ｃのホスト１０からのマイグレーションが完了しているので、ホスト１０においてメンテナンスを実施することができる（ステップＳ１６）。
【００３４】
ステップＳ１６においてホスト１０のメンテナンスが終了した後に、マイグレーションを行う前の環境に仮想マシン環境を戻したい場合には、ホスト１０は、ステップＳ１４において格納されたホスト１０上の仮想マシンの設定を示す情報を参照する。そして、マイグレーションを行う前のホスト１０の仮想マシンの設定に従って、マイグレーション先のホスト２０，３０に、マイグレーションが行われた仮想マシンをホスト１０に戻すように通知する（ステップＳ１７）。
【００３５】
ステップＳ１７において通知を受けたマイグレーション先のホスト２０，３０は、マイグレーションが行われた仮想マシン１１ａ，１１ｂ，１１ｃをホスト１０に戻す（ステップＳ１８）。その結果、仮想マシン１１ａ，１１ｂ，１１ｃは、再びホスト１０上で運用される。なお、仮想マシンがホスト１０上に戻されたあとは、ホスト１０は、マイグレーション前の仮想マシンの設定を示す情報を消去してもよい。
【００３６】
このような仮想マシンシステムでは、ユーザがマイグレーションしたい仮想マシンを指定するだけで、仮想マシンのマイグレーションの実施を自動で実行することができる。従って、マイグレーションの実施は技術者が手動で行っていた従来の方法に比べ、処理を自動化できて便利である。
【００３７】
また、このような仮想マシンシステムでは、ホストのメンテナンスなどのために、一時的に仮想マシンのマイグレーションを行いたい場合には、ステップＳ１６〜Ｓ１８の動作を行うことによって、仮想マシンシステムの構成をマイグレーションの実施前の構成に復元することができる。
【００３８】
図４は、仮想マシンのマイグレーション先を決定する処理を示すＵＭＬアクティビティ図である。図４を参照して、図３のステップＳ１３に示されたマイグレーション先の決定処理を詳細に説明する。例えば、マイグレーションを行う仮想マシンとして、図１に示すホスト１０上の仮想マシン１１ａ，１１ｂ，１１ｃが指定されたとする。また、仮想マシンの割り当ての指標となるパラメータの算出には、ホストおよび仮想マシンに関するＣＰＵのコア数、ＣＰＵ使用率およびメモリ容量を用いる。
【００３９】
まず、ホスト１０は、ホスト１０上の全ての仮想マシン（仮想マシン１１ａ，１１ｂ，１１ｃ）に割り当てられているコア数の合計（合計コア数）を算出する（ステップＳ２１）。次に、ホスト１０は、ホスト１０上の全ての仮想マシンに割り当てられているメモリの合計（合計メモリ容量）を算出する（ステップＳ２２）。
【００４０】
ホスト１０は、ステップＳ２１，Ｓ２２で算出したホスト１０の合計コア数および合計メモリ容量に基づいて、ホスト１０上の全ての仮想マシンで必要とされる物理容量の最大量を算出し、算出した物理容量と、他のホストのメモリの空き容量の合計（合計空き容量）とを比較する（ステップＳ２３）。以降では省略のために、「ホスト１０の合計コア数および合計メモリ容量と、他のホストの合計空き容量とを比較する。」などの表現を用いる。
【００４１】
ステップＳ２３において、ホスト１０の合計コア数および合計メモリ容量が他のホストの合計空き容量よりも少なかった場合には、ホスト１０は、当該他のホストにホスト１０上の仮想マシンを、パラメータを修正することなしに、そのまま割り当てることができるか否かをシミュレートする（ステップＳ２４）。なお、ステップＳ２４のシミュレーションの詳細な処理については、図５を参照して後述する。
【００４２】
ステップＳ２４のシミュレーションにおいて、仮想マシンを割り当てることができた場合には、割り当てることができたホストをホスト１０の仮想マシンのマイグレーション先とする。
【００４３】
ステップＳ２３において、ホスト１０の合計コア数および合計メモリ容量が他のホストの合計空き容量以上であった場合、または、ステップＳ２４において、仮想マシンの割り当て先が見つからなかった場合には、ホスト１０は、ホスト１０上の全仮想マシンについて、平均メモリ使用量の合計を算出する（ステップＳ２５）。
【００４４】
そして、ホスト１０は、ステップＳ２５で算出した平均メモリ使用量の合計と、他のホストの合計空き容量とを比較する（ステップＳ２６）。
【００４５】
ステップＳ２６において、ホスト１０の他のホストの合計空き容量が、ホスト１０上の全仮想マシンの平均メモリ使用量の合計以上であった場合には、ホスト１０は、ホスト１０上の全仮想マシンについて、ＣＰＵ使用率の合計を算出する（ステップＳ２７）。ここで、「ＣＰＵ使用率」は、「平均ＣＰＵ使用率×コア数」で求められる値とし、１００を超える値になってもよい。例えば、平均ＣＰＵ使用率が６０％で、コア数が４つ割り当てられた仮想マシンのＣＰＵ使用率は、２４０となる。
【００４６】
そして、ホスト１０は、ステップＳ２７で算出したＣＰＵ使用率の合計と、他のホストの空きコア数の合計を１００倍したものとを比較する（ステップＳ２８）。
【００４７】
ステップＳ２６において、ホスト１０の他のホストの合計空き容量が、ホスト１０上の全仮想マシンの平均メモリ使用量の合計よりも少なかった場合、または、ステップＳ２８において、空きコア数の合計を１００倍したものが、ホスト１０上の全仮想マシンのＣＰＵ使用率の合計よりも少なかった場合には、割り当ての対象外として処理を終了する。
【００４８】
ステップＳ２８において、空きコア数の合計を１００倍したものが、ホスト１０上の全仮想マシンのＣＰＵ使用率の合計以上であった場合には、ホスト１０上の仮想マシンのパラメータ修正を行い、仮想マシンのシステム構成を変更して、当該他のホストに割り当てることができるか否かをシミュレートする（ステップＳ２９）。なお、ステップＳ２９のシミュレーションの詳細な処理については、図６を参照して後述する。
【００４９】
ステップＳ２９のシミュレーションにおいて、仮想マシンを割り当てることができた場合には、割り当てることができたホストをホスト１０の仮想マシンのマイグレーション先とする。ステップＳ２４のシミュレーションにおいて、仮想マシンを割り当てることができなかった場合には、割り当ての対象外として処理を終了する。
【００５０】
なお、図４の処理において、「割り当ての対象外」と判定された場合は、マイグレーションを実施すると、別の仮想マシンを運用している他のホストのパフォーマンスに影響を与えると判断されたことを意味する。本発明による仮想マシンシステムは、マイグレーション先のホストのパフォーマンスにできるだけ影響を与えずに、マイグレーションを行うことを目的の１つとしているので、このような場合には、割り当ての対象外と判定する。
【００５１】
図５は、仮想マシンのパラメータを修正することなしに、ホストに仮想マシンを割り当てるシミュレーションの処理を示すＵＭＬアクティビティ図である。図５を参照して、図４のステップＳ２４におけるシミュレーションの処理を詳細に説明する。
【００５２】
まず、ホスト１０は、第１キーをコア数、第２キーをメモリ容量として、マイグレーションを実施する仮想マシン、すなわち、ホスト１０上の全仮想マシンを降順にソートする（ステップＳ３１）。その結果、ホスト１０上の全仮想マシンは、仮想マシンごとに必要とする物理容量の最大量が大きい順に並べられる。ホスト１０は、ステップＳ３１においてソートした仮想マシンソート結果をテーブルなどの形式でホスト１０の格納部に格納する。
【００５３】
次に、ホスト１０は、第１キーを空きコア数、第２キーを空きメモリ容量として、マイグレーション先の候補となるホスト、すなわち、ネットワーク線５０によって接続されているホスト１０以外の全てのホストを降順にソートする（ステップＳ３２）。その結果、ホスト１０以外の全てのホストは、仮想メモリに割り当てることが可能な物理容量が大きい順に並べられる。ホスト１０は、ステップＳ３２においてソートしたホストソート結果をテーブルなどの形式でホスト１０の格納部に格納する。
【００５４】
ホスト１０は、ステップＳ３１およびステップＳ３２におけるソート結果に、仮想マシン番号ｍおよびホスト番号ｎを定義する（ステップＳ３３）。例えば、ホスト１０上の仮想マシンがＭ台あるとすると、仮想マシン番号ｍは、０から順にＭ−１までの整数が当てられる。ホスト１０以外の全てのホストがＮ台あるとすると、ホスト番号ｎは、０から順にＮ−１までの整数が当てられる。また、仮想マシン番号ｍおよびホスト番号ｎは初期値を０とする。なお、仮想マシン番号ｍが当てられた仮想マシンを仮想マシンｍと呼び、ホスト番号ｎが当てられたホストをホストｎと呼ぶ。
【００５５】
ホスト１０は、全仮想マシンに対して、後述のステップＳ３５〜Ｓ３９に示す処理を行う（ステップＳ３４）。すなわち、仮想マシン番号ｍが０からＭ−１の間、ステップＳ３５〜Ｓ３９に示す処理を繰り返す。ただし、場合によって、ステップＳ４０〜Ｓ４３に示す処理も繰り返し実行される。
【００５６】
ステップＳ３５〜Ｓ４３における処理を説明する。まず、ホスト１０は、仮想マシン番号ｍを固定したまま、仮想マシンｍをマイグレーションできるホストが見つかるまでは、ホスト１０以外の全てのホストに対して、後述のステップＳ３６〜Ｓ３７に示す処理を行う（ステップＳ３５）。すなわち、仮想マシン番号ｍについて、ホスト番号ｎが０からＮ−１の間、ステップＳ３６〜Ｓ３７に示す処理を繰り返す。
【００５７】
ステップＳ３５において、仮想マシンｍについて、ホスト１０以外の全てのホストに対する処理が終了していない場合に、ホスト１０は、仮想マシンｍがホストｎにマイグレーションできるか否か判定する（ステップＳ３６）。仮想マシンｍがホストｎにマイグレーションできるか否かは、仮想マシンｍに割り当てられているコア数とメモリ容量とが、ホストｎの空き容量内に収まるか否かによって判定される。
【００５８】
ステップＳ３６において、仮想マシンｍがホストｎにマイグレーションできないと判定した場合には、ホスト１０は、ホスト番号をｎ＋１にして（ステップＳ３７）、ステップＳ３５に戻って次のホストに対する処理を行う。
【００５９】
ステップＳ３６において、仮想マシンｍがホストｎにマイグレーションできると判定した場合には、ホスト１０は、仮想マシンｍをホストｎに割り当てることを割り当てデータとして記録する（ステップＳ３８）。記録された割り当てデータは、格納部に格納される。また、ホスト１０は、格納部に格納されているホストソート結果に対して、記録された割り当てを反映させる。具体的には、例えば、ホストソート結果のホストｎのデータに対して、仮想マシンｍが必要とする物理容量だけ減算し、格納部に再格納する。
【００６０】
そして、ホスト１０は、仮想マシン番号をｍ＋１に、ホスト番号を０にして（ステップＳ３９）、ステップＳ３４に戻って次の仮想マシンに対する処理を行う。
【００６１】
Ｓ３６〜Ｓ３９に示す処理が繰り返されて、ステップＳ３５において、仮想マシンｍについて、ホスト１０以外の全てのホストに対する処理が終了した場合には、仮想マシンｍのマイグレーション先ホストが見つからなかったことを意味する。そのとき、ホスト１０は、仮想マシン番号ｍが０か否かを確認し、ステップＳ３１における仮想マシンソート結果の最初の仮想マシンであるか否かを判定する（ステップＳ４０）。
【００６２】
ステップＳ４０において、仮想マシン番号ｍが０で、最初の仮想マシンであると判定された場合には、ホスト１０は、割り当て例が見つからなかったとして、シミュレーションを終了する。
【００６３】
ステップＳ４０において、仮想マシン番号が０以外で、最初の仮想マシンではないと判定された場合には、ホスト１０は、仮想マシン番号をｍ−１にして、１つ前の仮想マシンに戻る（ステップＳ４１）。このとき、１つ前の仮想マシンは、マイグレーションできるホストが見つかっていて、ステップＳ３８に示す処理で、割り当てるホスト（例えば、ホスト番号ｎ１とする）が記録されている。
【００６４】
ステップＳ４１において仮想マシン番号をｍ−１にすると、ホスト１０は、ホスト番号を（ｎ１＋１）にして、仮想マシン（ｍ−１）の割り当て先として記録されたホストｎ１の次のホストにする（ステップＳ４２）。
【００６５】
ホスト１０は、格納部に格納されている割り当てデータに対して、仮想マシン（ｍ−１）とホストｎ１との記録を削除する。また、ホスト１０は、格納部に格納されているホストソート結果に対して、削除された割り当てを反映させる（ステップＳ４３）。具体的には、例えば、ホストソート結果のホストｎ１のデータに対して、仮想マシン（ｍ−１）の割り当てを記録するときに減算された物理容量を戻し、格納部に再格納する。
【００６６】
そして、ステップＳ３４に戻り、仮想マシン番号（ｍ−１）の仮想マシンについて、ホスト番号（ｎ１＋１）のホストに対する処理を行う。
【００６７】
ステップＳ３４において、仮想マシン番号がＭとなった場合には、ホスト１０上の全仮想マシンについて、マイグレーションできるホストが見つかったことを示すので、割り当て例が見つかったとしてシミュレーションを終了する。このとき、ホスト１０上の全仮想マシンに、パラメータの修正を行うことなく、割り当てが記録された各ホストにマイグレーションを実行することができる。
【００６８】
図６は、仮想マシンのパラメータを修正して、ホストに仮想マシンを割り当てるシミュレーションの処理を示すＵＭＬアクティビティ図である。図６を参照して、図４のステップＳ２９におけるシミュレーションの処理を詳細に説明する。
【００６９】
まず、ホスト１０は、仮想マシンの割り当て指標Ｐを算出する（ステップＳ５１）。例えば、割り当て指標Ｐは、Ｐ＝（ホスト１０上の全仮想マシンのＣＰＵ使用率の合計／ホスト１０以外の全ホストの空きＣＰＵコア数×１００）で示される計算式によって算出される。ホスト１０は、算出した割り当て指標Ｐを格納部に格納する。
【００７０】
次に、ホスト１０は、図５のステップＳ３１〜Ｓ３３に示す処理と同様に、ホスト１０上の全仮想マシンのソート（ステップＳ５２）と仮想マシンソート結果の格納、ホスト１０以外の全ホストのソート（ステップＳ５３）とホストソート結果の格納、および仮想マシン番号ｍ，ホスト番号ｎの定義と割り当て（ステップＳ５４）を行う。なお、仮想マシン番号ｍが当てられた仮想マシンを仮想マシンｍと呼び、ホスト番号ｎが当てられたホストをホストｎと呼ぶ。
【００７１】
ホスト１０は、全仮想マシンに対して、後述のステップＳ５６〜Ｓ６２に示す処理を行う（ステップＳ５５）。すなわち、仮想マシン番号ｍが０からＭ−１の間、ステップＳ５６〜Ｓ６２に示す処理を繰り返す。ただし、場合によって、ステップＳ６３〜Ｓ６６に示す処理も繰り返し実行される。
【００７２】
ステップＳ５６〜Ｓ６６における処理を説明する。まず、ホスト１０は、仮想マシン番号ｍを固定したまま、仮想マシンｍをマイグレーションできるホストが見つかるまでは、ホスト１０以外の全てのホストに対して、後述のステップＳ５７〜Ｓ５９に示す処理を行う（ステップＳ５６）。すなわち、仮想マシン番号ｍについて、ホスト番号ｎが０からＮ−１の間、ステップＳ５７〜Ｓ５９に示す処理を繰り返す。
【００７３】
ステップＳ５６において、仮想マシンｍについて、ホスト１０以外の全てのホストに対する処理が終了していない場合に、ホスト１０は、ホストｎのリソース状況と割り当て指標Ｐを比較する（ステップＳ５７）。具体的には、（ホストｎのＣＰＵ使用率の合計／ホストｎの空きＣＰＵコア数×１００）で算出される値（ホストｎのリソース指数）が、割り当て指標Ｐよりも大きいか否かを比較する。
【００７４】
ステップＳ５７において、ホストｎのリソース指数が割り当て指標Ｐよりも大きかった場合には、ホスト１０は、仮想マシンｍをホストｎにマイグレーションできないと判定し、ホスト番号をｎ＋１にして（ステップＳ５８）、ステップＳ５６に戻って次のホストに対する処理を行う。
【００７５】
ステップＳ５７において、ホストｎのリソース指数が割り当て指標Ｐ以下であった場合は、ホスト１０は、マイグレーション後の仮想マシンｍに割り当てる使用メモリ量Ｘｍを決定する（ステップＳ５９）。具体的には、使用メモリ量Ｘｍは、Ｘｍ＝（（仮想マシンｍの平均メモリ使用量／Ｑ）＋１）×Ｍで示される計算式によって算出される。なお、Ｑは、割り当てられるメモリの最小単位を示す定数である。
【００７６】
ステップＳ５９において決定された仮想マシンｍの使用メモリ量が、ホストｎの空きメモリ容量を超えているときには、容量オーバーであるから、ホスト１０は、仮想マシンｍをホストｎにマイグレーションできないと判定し、ステップＳ５８に進み、次のホストに対する処理を行う。
【００７７】
ステップＳ５９において決定された仮想マシンｍの使用メモリ量が、ホストｎの空きメモリ容量以内である場合には、ホスト１０は、仮想マシンｍをホストｎにマイグレーションできると判定する。ホスト１０は、マイグレーション後の仮想マシンｍに割り当てる使用コア数Ｙｍを決定する（ステップＳ６０）。具体的には、使用コア数Ｙｍは、Ｙｍ＝（仮想マシンｍのＣＰＵ使用率／１００）＋１で示される計算式によって算出される（“／”の計算結果は、除算の商を表すものとする。除算の余りは切り捨てられる。）。
【００７８】
ホスト１０は、仮想マシンｍをホストｎに割り当てることを割り当てデータとして記録する（ステップＳ６１）。記録された割り当てデータは、格納部に格納される。また、ホスト１０は、格納部に格納されているホストソート結果に対して、記録された割り当てを反映させる。具体的には、例えば、ホストソート結果のホストｎのデータに対して、使用メモリＸｍと使用コア数Ｙｍに基づいて仮想マシンｍのために確保する必要がある物理容量を減算し、格納部に再格納する。
【００７９】
そして、ホスト１０は、仮想マシン番号をｍ＋１に、ホスト番号を０にして（ステップＳ６２）、ステップＳ５５に戻って次の仮想マシンに対する処理を行う。
【００８０】
Ｓ５７〜Ｓ６２に示す処理が繰り返されて、ステップＳ５６において、仮想マシンｍについて、ホスト１０以外の全てのホストに対する処理が終了した場合には、仮想マシンｍのマイグレーション先ホストが見つからなかったことを意味する。そのとき、ホスト１０は、仮想マシン番号が０か否かを確認し、ステップＳ５２における仮想マシンソート結果の最初の仮想マシンであるか否かを判定する（ステップＳ６３）。
【００８１】
ステップＳ６３において、仮想マシン番号が０で、最初の仮想マシンであると判定された場合には、ホスト１０は、割り当て例が見つからなかったとして、シミュレーションを終了する。
【００８２】
ステップＳ６３において、仮想マシン番号が０以外で、最初の仮想マシンではないと判定された場合には、ホスト１０は、仮想マシン番号をｍ−１にして、１つ前の仮想マシンに戻る（ステップＳ６４）。このとき、１つ前の仮想マシンは、マイグレーションできるホストが見つかっていて、ステップＳ６１に示す処理で、割り当てるホスト（例えば、ホスト番号ｎ２とする）が記録されている。
【００８３】
ステップＳ６４において仮想マシン番号をｍ−１にすると、ホスト１０は、ホスト番号を（ｎ２＋１）にして、仮想マシン（ｍ−１）の割り当て先として記録されたホストｎ２の次のホストにする（ステップＳ６５）。
【００８４】
ホスト１０は、格納部に格納されている割り当てデータに対して、仮想マシン（ｍ−１）とホストｎ２との記録を削除する。また、ホスト１０は、格納部に格納されているホストソート結果に対して、削除された割り当てを反映させる（ステップＳ６６）。具体的には、例えば、ホストソート結果のホストｎ２のデータに対して、仮想マシン（ｍ−１）の割り当てを記録するときに減算された物理容量を戻し、格納部に再格納する。
【００８５】
そして、ステップＳ５５に戻り、仮想マシン番号（ｍ−１）の仮想マシンについて、ホスト番号（ｎ２＋１）のホストに対する処理を行う。
【００８６】
ステップＳ５５において、仮想マシン番号がＭとなった場合には、ホスト１０上の全仮想マシンについて、マイグレーションできるホストが見つかったことを示すので、割り当て例が見つかったとしてシミュレーションを終了する。このとき、ホスト１０上の全仮想マシンに、それぞれパラメータを修正したうえで、割り当てが記録された各ホストにマイグレーションを実行することができる。
【００８７】
なお、図５および図６では、仮想マシンの割り当て先のホストのシミュレーションにおいて、ホストおよび仮想マシンに関するＣＰＵのコア数、ＣＰＵ使用率およびメモリ容量を用いたが、ＣＰＵの種類や周波数などを考慮して仮想マシンの割り当て先のホストをシミュレーションしてもよい。
【００８８】
このように、仮想マシンシステムであるホスト１０は、仮想マシンのパラメータを変更せずにマイグレーションする場合に、マイグレーション先のホスト上ですでに運用中である他の仮想マシンに割り当てられているリソース以外のリソースを仮想マシンに割り当てるので、マイグレーションを行ったときに、運用中の他の仮想マシンとリソースを奪い合うといった悪影響を抑えることができる。
【００８９】
また、ホスト１０は、マイグレーション先の候補となるホストに空き容量が足りないなどして、仮想マシンのパラメータを変更せずにマイグレーションを行うことができない場合には、仮想マシンのパラメータを変更してシステム構成を変更し、マイグレーション先を探すことができる。そして、仮想マシンのパラメータを変更してマイグレーションする場合にも、マイグレーション先のホスト上ですでに運用中である他の仮想マシンに割り当てられているリソースを変更することなく、使用されていないリソースを仮想マシンに割り当てるので、マイグレーションを行ったときに、運用中の他の仮想マシンとリソースを奪い合うといった悪影響を抑えることができる。
【００９０】
そして、このような仮想マシンシステムによれば、待機用のハードウェアを用意しなくても、仮想マシンの運用を中断することなしに、オンラインのまま、仮想マシンシステムのメンテナンスを実施することができる。
【００９１】
さらに、このような仮想マシンシステムは、仮想マシンのマイグレーションを自動で行うことができるので、技術者の手間を軽減することができ、マイグレーション時の人的な操作ミスによる障害の発生を抑止することもできる。
【００９２】
なお、図６では、仮想マシンの割り当て先のホストのシミュレーションにおいて、仮想マシンの割り当て指標Ｐを用いたが、例えば、割り当て指標Ｐに０以上の係数を掛けて算出される割り当て指標Ｐ’を用いてもよい。このような割り当て指標Ｐ’を用いることによって、仮想マシンシステムは、仮想マシンシステムにかかる負荷を任意に調整したシミュレーション（例えば、少し負荷がかかってもマイグレーションしたい場合のシミュレーションなど）を実行することができる。
【００９３】
図７は、本発明による仮想マシンシステムの主要部を示すブロック図である。図７に示すように、仮想マシンシステムは、計算機１（例えば、図１に示すホスト１０に相当）に１つ以上の仮想マシン２，３（例えば、図１に示す仮想マシン１１ａ，１１ｂに相当）が構築された仮想マシンシステムであって、計算機は、仮想マシンごとのシステム情報を含む仮想マシン構成情報（例えば、実施形態において仮想マシン管理ソフトウェア１２の動作によって収集されるホスト１０のハードウェア情報や仮想マシン１１ａ，１１ｂ，１１ｃの構成情報に相当）を収集し、複数の他の計算機４，５（例えば、図１に示すホスト２０，３０に相当）から各計算機の空き容量情報を含むホスト構成情報（例えば、実施形態においてホスト１０がホスト２０から取得できる各構成情報に相当）を収集する情報収集部６（例えば、図１に示す管理ソフトウェア１２のプログラムに従って動作する制御部に相当）と、情報収集部６によって収集された仮想マシン構成情報とホスト構成情報とに基づいて、仮想マシン２，３のマイグレーション先の他の計算機４，５を決定する決定部７（例えば、図１に示す管理ソフトウェア１２のプログラムに従って動作する制御部に相当）と、決定部７によって決定されたマイグレーション先の他の計算機４，５に、仮想マシン２，３をマイグレーションする実行部８（例えば、図１に示す管理ソフトウェア１２のプログラムに従って動作する制御部に相当）とを含むように構成されている。
【００９４】
また、仮想マシンシステムの一実施形態として記載された上記のホストでは、以下の（１）〜（５）に示すような仮想マシンシステムも開示されている。
【００９５】
（１）マイグレーションを行う前の仮想マシン構成情報を格納する格納部（例えば、実施形態の格納部（図示せず）に相当）を備え、実行部は、決定部によって決定されたマイグレーション先の他の計算機に仮想マシンをマイグレーションして、所定の処理（例えば、ホストのメンテナンス）が完了したあとに、格納部に格納された仮想マシン構成情報を参照し、マイグレーション先の他の計算機に、マイグレーションを行う前の配置状態に復元するために仮想マシンを戻すように通知する（例えば、図３のステップＳ１７に示す動作によって実現される。）仮想マシンシステム。
【００９６】
（２）決定部は、仮想マシン構成情報とホスト構成情報とに基づいて、仮想マシンのシステムを構成する所定のパラメータを修正した場合のシミュレーションを行い（例えば、図６に示すシミュレーションの動作によって実現される。）、マイグレーションを実行可能なマイグレーション先の他の計算機を決定し、実行部は、決定部によってマイグレーション先の他の計算機が決定された場合のシミュレーションと同じ修正パラメータを用いて、仮想マシンを決定された他の計算機にマイグレーションする仮想マシンシステム。
【００９７】
（３）決定部は、計算機のＣＰＵ使用率の合計と空きＣＰＵコア数とに基づいて算出した割り当て指標（例えば、実施形態における割り当て指標Ｐに相当）を判断基準の１つに用いて、仮想マシンのシステムを構成する所定のパラメータを修正した場合のシミュレーションを行う（例えば、図６に示すシミュレーションの動作によって実現される。）仮想マシンシステム。
【００９８】
（４）情報収集部は、ＣＰＵコア数、ＣＰＵ使用率およびメモリ使用量を含む仮想マシン構成情報を収集する仮想マシンシステム。
【００９９】
（５）情報収集部は、計算機の空きＣＰＵコア数および空きメモリ容量を含むホスト構成情報を収集する仮想マシンシステム。
【符号の説明】
【０１００】
１    計算機
２，３  仮想マシン
４，５  （他の）計算機
６    情報収集部
７    決定部
８    実行部
１０，２０，３０  ホスト
１１ａ，１１ｂ，１１ｃ，２１ａ，３１ｂ，３１ｃ  仮想マシン
１２，２２，３２  仮想マシン管理ソフトウェア
４０  共有ストレージ
５０  ネットワーク線
５１，５２，５３  ストレージネットワーク線
【図１】
0005515889.tif 000002
【図２】
0005515889.tif 000003
【図３】
0005515889.tif 000004
【図４】
0005515889.tif 000005
【図５】
0005515889.tif 000006
【図６】
0005515889.tif 000007
【図７】
0005515889.tif 000008