(57)【特許請求の範囲】
【請求項１】
仮想マシンの制御に用いるプログラムであって、コンピュータに、
前記コンピュータで動作している前記仮想マシンを他のコンピュータに動作させるための予兆を検出すると、前記コンピュータで動作している前記仮想マシンのデータを、前記コンピュータが備える第１の記憶部から前記他のコンピュータが備える第２の記憶部にコピーする第１処理を開始し、
前記予兆が検出されたことで開始された、前記第１処理によりコピーしたデータに基づく前記仮想マシンを前記他のコンピュータで動作させるか否かを判定するための指標値の変動を監視し、
前記第１の記憶部から前記第２の記憶部にコピーする前記第１処理の完了後、前記他のコンピュータに、前記第１処理によりコピーしたデータに基づく前記仮想マシンの動作を開始させずに待機させ、前記指標値が閾値に達したことを検出すると、前記第１処理によりコピーしたデータに基づいて前記他のコンピュータに前記仮想マシンの動作を開始させ、前記コンピュータでの前記仮想マシンの動作を停止する、
処理を実行させるプログラム。
【請求項２】
前記指標値の変動の監視は、前記指標値の低下の監視であり、
前記指標値が前記閾値に達する前に前記指標値の低下が停止したと判断すると、前記第１の記憶部から前記第２の記憶部へのデータのコピーを停止する、
請求項１記載のプログラム。
【請求項３】
前記指標値は、前記コンピュータに電力を供給する電源装置の電力残量を示す値である、請求項１または２記載のプログラム。
【請求項４】
仮想マシンが動作するコンピュータが実行する仮想マシン制御方法であって、
前記コンピュータで動作している前記仮想マシンを他のコンピュータに動作させるための予兆を検出すると、前記コンピュータで動作している前記仮想マシンのデータを、前記コンピュータが備える第１の記憶部から前記他のコンピュータが備える第２の記憶部にコピーする第１処理を開始し、
前記予兆が検出されたことで開始された、前記第１処理によりコピーしたデータに基づく前記仮想マシンを前記他のコンピュータで動作させるか否かを判定するための指標値の変動を監視し、
前記第１の記憶部から前記第２の記憶部にコピーする前記第１処理の完了後、前記他のコンピュータに、前記第１処理によりコピーしたデータに基づく前記仮想マシンの動作を開始させずに待機させ、前記指標値が閾値に達したことを検出すると、前記第１処理によりコピーしたデータに基づいて前記他のコンピュータに前記仮想マシンの動作を開始させ、前記コンピュータでの前記仮想マシンの動作を停止する、
仮想マシン制御方法。
【請求項５】
仮想マシンが動作する情報処理装置であって、
前記仮想マシンのデータを記憶する記憶部と、
前記情報処理装置で動作している前記仮想マシンを他の情報処理装置に動作させるための予兆を検出すると、前記情報処理装置で動作している前記仮想マシンのデータを、前記記憶部から前記他の情報処理装置が備える他の記憶部にコピーする第１処理を開始し、前記予兆が検出されたことで開始された、前記第１処理によりコピーしたデータに基づく前記仮想マシンを前記他の情報処理装置で動作させるか否かを判定するための指標値の変動を監視し、前記記憶部から前記他の記憶部にコピーする前記第１処理の完了後、前記他の情報処理装置に、前記第１処理によりコピーしたデータに基づく前記仮想マシンの動作を開始させずに待機させ、前記指標値が閾値に達したことを検出すると、前記第１処理によりコピーしたデータに基づいて前記他の情報処理装置に前記仮想マシンの動作を開始させ、前記情報処理装置での前記仮想マシンの動作を停止する制御部と、
を有する情報処理装置。
【請求項６】
仮想マシンのデータを記憶する第１の記憶部を備える第１の情報処理装置と、
第２の記憶部を備える第２の情報処理装置と、
前記第１の情報処理装置で動作している前記仮想マシンを前記第２の情報処理装置に移動するよう、前記第１の情報処理装置に要求する管理装置と、を有し、
前記第１の情報処理装置で動作している前記仮想マシンを前記第２の情報処理装置に動作させるための予兆を検出すると、前記第１の情報処理装置は、前記管理装置からの要求に応じて、前記仮想マシンのデータを前記第１の記憶部から前記第２の記憶部にコピーする第１処理を開始し、前記予兆が検出されたことで開始された、前記第１処理によりコピーしたデータに基づく前記仮想マシンを前記第２の情報処理装置で動作させるか否かを判定するための指標値の変動を監視し、前記第１の記憶部から前記第２の記憶部にコピーする前記第１処理の完了後、前記第２の情報処理装置に、前記第１処理によりコピーしたデータに基づく前記仮想マシンの動作を開始させずに待機させ、前記指標値が閾値に達したことを検出すると、前記第１処理によりコピーしたデータに基づいて前記仮想マシンの動作を開始するよう前記第２の情報処理装置に要求し、前記第１の情報処理装置での前記仮想マシンの動作を停止する、
情報処理システム。
【請求項７】
前記指標値の変動の監視は、前記指標値の上昇の監視であり、
前記指標値が所定の期間内に前記閾値に達しないと判断すると、前記第１の記憶部から前記第２の記憶部へのデータのコピーを停止する、
請求項１記載のプログラム。
【請求項８】
前記指標値は、前記コンピュータの負荷を示す値である、請求項１または７記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム、仮想マシン制御方法、情報処理装置および情報処理システムに関する。
【背景技術】
【０００２】
現在、物理的なコンピュータ上で、１またはそれ以上の仮想的なコンピュータ（仮想マシン（ＶＭ：Virtual Machine）と呼ぶことがある）を動作させる仮想化技術が利用されている。各仮想マシンでは、他の仮想マシンとは独立に、オペレーティングシステム（ＯＳ：Operating System）やアプリケーションソフトウェアを実行できる。
【０００３】
物理的なコンピュータでは、仮想マシンを制御する仮想化ソフトウェアが実行される。仮想化ソフトウェアには、ハイパーバイザ、管理ＯＳ、管理ドメインなどと呼ばれるものが含まれる。仮想化ソフトウェアは、例えば、コンピュータが備えるＣＰＵ（Central Processing Unit）の処理能力やＲＡＭ（Random Access Memory）の記憶領域などのリソースを仮想マシンに割り当てる。各仮想マシンのＯＳは、自仮想マシンに割り当てられたリソースの範囲内で、アプリケーションソフトウェアを実行するよう制御する。
【０００４】
複数のコンピュータを備える情報処理システムでは、コンピュータ間で仮想マシンを移動することがある。仮想マシンの移動には、実行中のＯＳやアプリケーションソフトウェアをシャットダウンせずに仮想マシンを移動できるライブマイグレーションと呼ばれる方法がある。ライブマイグレーションでは、仮想化ソフトウェアが、移動元のコンピュータのメモリから移動先のコンピュータのメモリに、仮想マシンに関するデータ（プログラムを含んでもよい）をコピーすることで、情報処理をコンピュータ間で引き継ぐ。
【０００５】
なお、無停電電源装置（ＵＰＳ：Uninterruptible Power Supply）に接続されたサーバで電源障害が検出されると、当該サーバで動作中の仮想マシンを当該サーバに予め対応付けられたフェールオーバ先のサーバに移動して、電源障害が検出されたサーバをシャットダウンするコンピュータシステムが提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２８２７１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、ある状況を検出したときにコンピュータ間で仮想マシンを移動する情報処理システムでは、検出後にその状況が変化してしまうと、仮想マシンの移動が無駄になってしまうリスクがある。例えば、コンピュータで停電が検出されたことを契機として仮想マシンを移動する場合、当該コンピュータにＵＰＳが接続されており停電が短時間（例えば、数秒から数十秒程度）で解消されれば、結果的に移動が無駄になってしまう。また、例えば、コンピュータの負荷が増大すると予測したときに事前に仮想マシンを移動する場合、その予測が外れると、結果的に移動が無駄になってしまう可能性がある。
【０００８】
一側面では、本発明は、コンピュータ間での仮想マシンの移動が無駄になるリスクを低減できるプログラム、仮想マシン制御方法、情報処理装置および情報処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
一側面では、仮想マシンの制御に用いるプログラムであって、コンピュータに以下の処理を実行させるプログラムが提供される。コンピュータで動作している仮想マシンを他のコンピュータに動作させるための予兆を検出すると、コンピュータで動作している仮想マシンのデータを、コンピュータが備える第１の記憶部から他のコンピュータが備える第２の記憶部にコピーする第１処理を開始する。予兆が検出されたことで開始された、第１処理によりコピーしたデータに基づく仮想マシンを他のコンピュータで動作させるか否かを判定するための指標値の変動を監視する。第１の記憶部から第２の記憶部にコピーする第１処理の完了後、他のコンピュータに、第１処理によりコピーしたデータに基づく仮想マシンの動作を開始させずに待機させる。指標値が閾値に達したことを検出すると、第１処理によりコピーしたデータに基づいて他のコンピュータに仮想マシンの動作を開始させ、コンピュータでの仮想マシンの動作を停止する。
【００１０】
また、一側面では、仮想マシンが動作するコンピュータが実行する仮想マシン制御方法が提供される。仮想マシン制御方法では、コンピュータで動作している仮想マシンを他のコンピュータに動作させるための予兆を検出すると、コンピュータで動作している仮想マシンのデータを、コンピュータが備える第１の記憶部から他のコンピュータが備える第２の記憶部にコピーする第１処理を開始する。予兆が検出されたことで開始された、第１処理によりコピーしたデータに基づく仮想マシンを他のコンピュータで動作させるか否かを判定するための指標値の変動を監視する。第１の記憶部から第２の記憶部にコピーする第１処理の完了後、他のコンピュータに、第１処理によりコピーしたデータに基づく仮想マシンの動作を開始させずに待機させる。指標値が閾値に達したことを検出すると、第１処理によりコピーしたデータに基づいて他のコンピュータに仮想マシンの動作を開始させ、コンピュータでの仮想マシンの動作を停止する。
【００１１】
また、一側面では、仮想マシンが動作する情報処理装置であって、記憶部と制御部とを有する情報処理装置が提供される。記憶部は、仮想マシンのデータを記憶する。制御部は、情報処理装置で動作している仮想マシンを他の情報処理装置に動作させるための予兆を検出すると、情報処理装置で動作している仮想マシンのデータを、記憶部から他の情報処理装置が備える他の記憶部にコピーする第１処理を開始し、予兆が検出されたことで開始された、第１処理によりコピーしたデータに基づく仮想マシンを他の情報処理装置で動作させるか否かを判定するための指標値の変動を監視し、記憶部から他の記憶部にコピーする第１処理の完了後、他の情報処理装置に、第１処理によりコピーしたデータに基づく仮想マシンの動作を開始させずに待機させ、指標値が閾値に達したことを検出すると、第１処理によりコピーしたデータに基づいて他の情報処理装置に仮想マシンの動作を開始させ、情報処理装置での仮想マシンの動作を停止する。
【００１２】
また、一側面では、仮想マシンのデータを記憶する第１の記憶部を備える第１の情報処理装置と、第２の記憶部を備える第２の情報処理装置と、第１の情報処理装置で動作している仮想マシンを第２の情報処理装置に移動するよう、第１の情報処理装置に要求する管理装置と、を有する情報処理システムが提供される。第１の情報処理装置で動作している仮想マシンを第２の情報処理装置に動作させるための予兆を検出すると、第１の情報処理装置は、管理装置からの要求に応じて、仮想マシンのデータを第１の記憶部から第２の記憶部にコピーする第１処理を開始し、予兆が検出されたことで開始された、第１処理によりコピーしたデータに基づく仮想マシンを第２の情報処理装置で動作させるか否かを判定するための指標値の変動を監視し、第１の記憶部から第２の記憶部にコピーする第１処理の完了後、第２の情報処理装置に、第１処理によりコピーしたデータに基づく仮想マシンの動作を開始させずに待機させ、指標値が閾値に達したことを検出すると、第１処理によりコピーしたデータに基づいて仮想マシンの動作を開始するよう第２の情報処理装置に要求し、第１の情報処理装置での仮想マシンの動作を停止する。
【発明の効果】
【００１３】
一側面では、コンピュータ間での仮想マシンの移動が無駄になるリスクが低減される。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】サーバが備えるハードウェア例を示すブロック図である。
【図４】サーバおよび管理サーバで動作するソフトウェア例を示す図である。
【図５】サーバ情報収集の手順例を示すフローチャートである。
【図６】サーバ情報テーブルの例を示す図である。
【図７】移動準備の手順例を示すフローチャートである。
【図８】移動準備の手順例を示すフローチャート（続き）である。
【図９】サーバから管理サーバへの停電通知の例を示す図である。
【図１０】管理サーバからサーバへの移動通知の例を示す図である。
【図１１】移動実行の手順例を示すフローチャートである。
【図１２】移動取消の手順例を示すフローチャートである。
【図１３】管理サーバと複数のサーバの通信例を示すシーケンス図である。
【図１４】リソース使用状況の変化例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理システムを示す図である。第１の実施の形態の情報処理システムは、コンピュータなどである情報処理装置１０，１０ａを含む。
【００１６】
情報処理装置１０は、記憶部１１と制御部１２を有する。情報処理装置１０ａは、記憶部１１ａを有する。記憶部１１，１１ａは、例えば、ＲＡＭである。制御部１２は、例えば、ＣＰＵなどのプロセッサを含む。情報処理装置１０と情報処理装置１０ａとは、ネットワークで接続されている。情報処理装置１０，１０ａでは、仮想マシン１３が動作し得る。第１の実施の形態では、仮想マシン１３が、まず情報処理装置１０で動作しており、その後に情報処理装置１０ａに移動する場合を考える。
【００１７】
制御部１２は、仮想マシン１３の移動に関する所定の契機を検出すると、仮想マシン１３を情報処理装置１０から情報処理装置１０ａへ移動する準備を開始する（ステップＳ１）。移動の契機としては、例えば、情報処理装置１０に接続されたＵＰＳで停電が検出されたことや、一定時間後までに情報処理装置１０の負荷が増大すると予測したことなどが挙げられる。移動の準備の開始は、情報処理装置１０で動作している仮想マシン１３に関するデータを、情報処理装置１０の記憶部１１から情報処理装置１０ａの記憶部１１ａにコピーする処理を開始することを含む。例えば、制御部１２は、情報処理装置１０ａに仮想マシン１３の受け入れを要求して移動先のリソースを確保し、仮想マシン１３に関するデータのコピーを開始する。なお、仮想マシン１３に関するデータには、仮想マシン１３上で行われる情報処理に用いられるデータやプログラムが含まれ得る。
【００１８】
制御部１２は、仮想マシン１３を情報処理装置１０ａで動作させるための指標となる指標値の変動を監視し、仮想マシン１３を移動する準備をした状態を維持する（ステップＳ２）。例えば、指標値はＵＰＳの電力残量を示す値（例えば、電力量、充電割合、残り供給可能時間など）であり、制御部１２は電力残量を示す値が閾値（例えば、移動の実行に要する電力に相当する値）まで低下するのを待つ。また、例えば、指標値は情報処理装置１０の負荷を示す値（例えば、ＣＰＵ使用率やＲＡＭ使用率など）であり、制御部１２は負荷を示す値が閾値（例えば、事前に予測した負荷）まで上昇するのを待つ。なお、制御部１２は、指標値の変動を監視している間、準備の処理を継続してもよい。例えば、制御部１２は、前回のデータコピーからの差分を記憶部１１から記憶部１１ａにコピーすることで、仮想マシン１３に関するデータの更新を情報処理装置１０ａに反映させる。
【００１９】
制御部１２は、指標値が閾値に達するか、または、以下に説明するように仮想マシン１３の移動を取り消すまで、仮想マシン１３の移動の実行を保留する。制御部１２は、指標値が閾値に達したことを検出すると、仮想マシン１３の移動を実行する（ステップＳ３）。仮想マシン１３の移動の実行は、記憶部１１から記憶部１１ａにコピーしたデータに基づいて情報処理装置１０ａに仮想マシン１３の動作を開始させ、情報処理装置１０での仮想マシン１３の動作を停止することを含む。情報処理装置１０での仮想マシン１３の動作停止と、情報処理装置１０ａでの仮想マシン１３の動作開始は、何れを先に実行してもよいし並列に行ってもよい。情報処理装置１０での仮想マシン１３の動作停止は、例えば、ＯＳのシャットダウン手続を伴わない突発的な停止であり、仮想マシンの削除やサスペンドと呼んでもよい。情報処理装置１０ａでの仮想マシン１３の動作開始は、例えば、ＯＳの起動手続を伴わない突発的な処理開始であり、リジュームと呼んでもよい。
【００２０】
一方で、制御部１２は、指標値が閾値に達しないこととなったと判断すると、仮想マシン１３の移動を取り消してもよい。例えば、制御部１２は、停電が解消して（復電して）ＵＰＳの電力残量の低下が停止したときや、一定時間経っても予測に反して情報処理装置１０の負荷が閾値まで上昇しないとき、仮想マシン１３を移動する原因が解消されたと判断する。移動の取消は、記憶部１１から記憶部１１ａへの仮想マシン１３に関するデータのコピーを停止することを含む。例えば、制御部１２は、確保していた移動先のリソースの解放を情報処理装置１０ａに指示し、記憶部１１ａにコピー済のデータを削除させる。
【００２１】
なお、以上の情報処理装置１０の処理は、仮想マシン１３を制御するためのプログラムをＲＡＭなどのメモリに格納し、プロセッサが当該プログラムを実行することで実現してもよい。また、以上の情報処理装置１０の処理の少なくとも一部は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの集積回路を用いて実現してもよい。プロセッサは、プログラムの命令を実行するための汎用の演算回路に加えて、専用の処理回路を含んでもよい。
【００２２】
第１の実施の形態の情報処理システムによれば、仮想マシン１３の移動に関する所定の契機が検出されたとき、すぐに仮想マシン１３の移動を実行せず、仮想マシン１３のデータのコピーを開始した上で指標値が閾値に達するのを待つ。仮想マシン１３を移動する原因がその後に解消される可能性を考慮して移動の実行を留保することで、仮想マシン１３の移動が無駄になってしまうリスクを低減できる。また、移動の準備を既に行っているため、移動を実行するか否かを決定するタイミングをできる限り遅らせることができ、また、決定後には仮想マシン１３の移動を迅速に実行できる。
【００２３】
以下の第２の実施の形態では、停電時に仮想マシンを移動するシステムの例を挙げる。
［第２の実施の形態］
次に、第２の実施の形態を説明する。第２の実施の形態の情報処理システムは、ＵＰＳに接続されたコンピュータで停電発生が検出されたとき、そのコンピュータで動作している仮想マシンが、ＵＰＳのバッテリが尽きるまでに他のコンピュータに移動するよう制御する。このとき、移動先のコンピュータを、単に各コンピュータの空きリソース量のみに基づいて選択してしまうと、移動元と同様に停電の影響を受けるコンピュータを移動先として選択してしまう可能性がある。また、停電時に仮想マシンを移動する先をコンピュータ毎に予め設定しておく方法では、情報処理システムのコンピュータ構成が変化する毎に管理者が設定を変更することになり、情報処理システムの管理の負担が大きくなるという問題がある。そこで、第２の実施の形態の情報処理システムは、コンピュータとＵＰＳの接続関係を示す情報を自動的に収集して、仮想マシンの移動先を判定する。
【００２４】
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、ＵＰＳ３１，３２、クライアント４０、サーバ１００，１００ａ，１００ｂ，１００ｃおよび管理サーバ２００を有する。クライアント４０、サーバ１００，１００ａ，１００ｂ，１００ｃおよび管理サーバ２００は、ネットワーク２１に接続されている。なお、サーバ１００は、第１の実施の形態の情報処理装置１０の一例であり、サーバ１００ｂは、第１の実施の形態の情報処理装置１０ａの一例である。
【００２５】
ＵＰＳ３１，３２は、差し込みプラグを介して電力線に接続されている。ＵＰＳ３１，３２は、補助電源としてバッテリを備える。ＵＰＳ３１，３２は、電力線から電力が供給されているとき（停電中でないとき）、バッテリに充電し、また、接続されているサーバにバッテリの電力を消費せず電力を供給する。一方、ＵＰＳ３１，３２は、電力線から電力供給が停止すると（停電中のとき）、接続されているサーバにバッテリから放電して電力を供給する。バッテリからの放電によって電力供給が可能な時間は、例えば、数分程度であり、通常は３０分以下である。ＵＰＳ３１にはサーバ１００，１００ａが接続され、ＵＰＳ３２にはサーバ１００ｂ，１００ｃが接続されている。
【００２６】
クライアント４０は、ユーザが操作する端末装置としてのコンピュータである。クライアント４０は、ユーザの操作に応じて、管理サーバ２００（または、他の管理サーバ）に仮想マシンの起動を要求し、起動した仮想マシンに所望の情報処理を実行させる。
【００２７】
サーバ１００，１００ａ，１００ｂ，１００ｃは、複数の仮想マシンを動作させることが可能なサーバコンピュータである。サーバ１００，１００ａ，１００ｂ，１００ｃは、管理サーバ２００の制御のもと、クライアント４０および他のクライアントから要求された仮想マシンを起動する。仮想マシンの起動に用いるデータ（プログラムを含み得る）は、各サーバが備える不揮発性の記憶装置に格納してもよいし、ネットワーク２１に接続され各サーバからアクセス可能なファイルサーバ（図示せず）に格納しておいてもよい。
【００２８】
また、サーバ１００，１００ａ，１００ｂ，１００ｃは、接続されたＵＰＳから電力供給状況を示す情報を取得し、停電が検出されたときは、管理サーバ２００と連携して仮想マシンを移動する制御を行う。仮想マシンの移動では、仮想マシンに関するデータが、あるサーバから別のサーバに移動され、移動先のサーバで仮想マシンの情報処理を再開する。仮想マシンの移動には、実行中のＯＳやアプリケーションソフトウェアをシャットダウンせずに移動できるライブマイグレーションを用いる。ライブマイグレーションによって、仮想マシンの情報処理が実質的に停止している時間を短縮できる。
【００２９】
管理サーバ２００は、サーバ１００，１００ａ，１００ｂ，１００ｃで動作する仮想マシンを管理するサーバコンピュータである。管理サーバ２００は、サーバ１００，１００ａ，１００ｂ，１００ｃの負荷に応じて、クライアント４０および他のクライアントから要求された仮想マシンをこれら複数のサーバに割り振る。また、管理サーバ２００は、あるサーバで停電が検出されると、停電が検出されない他のサーバを検索し、動作中の仮想マシンがシャットダウンしないよう、サーバ間での仮想マシンの移動を制御する。
【００３０】
なお、第２の実施の形態の情報処理システムは、データセンタを利用したシステム（例えば、いわゆるクライアントシステム）として実現してもよい。その場合、クライアント４０は、例えば、インターネットなどの広域ネットワークを介して、ネットワーク２１にアクセスする。また、サーバ１００，１００ａおよびＵＰＳ３１と、サーバ１００ｂ，１００ｃおよびＵＰＳ３２とは、異なる拠点に設置されていてもよい。その場合、ネットワーク２１は、例えば、複数のネットワークを含む。複数のネットワークは、ＶＬＡＮ（Virtual Local Area Network）やＶＰＮ（Virtual Private Network）などの仮想化技術を用いて、仮想的に１つのネットワークとして結合されてもよい。また、管理サーバ２００を複数設置する（例えば、拠点毎に管理サーバを設置する）ようにしてもよい。
【００３１】
図３は、サーバが備えるハードウェア例を示すブロック図である。サーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ（Hard Disk Drive）１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６、通信インタフェース１０７および電源インタフェース１０８を有する。上記の各ユニットは、バスに接続されている。クライアント４０、サーバ１００ａ，１００ｂ，１００ｃおよび管理サーバ２００も、同様のハードウェアを用いて実現できる。なお、ＣＰＵ１０１は第１の実施の形態のプロセッサ１１の一例であり、ＲＡＭ１０２は第１の実施の形態のメモリ１２の一例である。
【００３２】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部を読み出し、ＲＡＭ１０２に配置してプログラムを実行する。各仮想マシンには、例えば、ＣＰＵ１０１の演算能力の一部が、ＣＰＵリソースとして割り当てられる。なお、サーバ１００は、複数個のプロセッサを備えてもよく、複数の仮想マシンを並列実行してもよい。
【００３３】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムや情報処理に用いられるデータを一時的に記憶する揮発性メモリである。各仮想マシンには、例えば、ＲＡＭ１０２の記憶領域の一部が、メモリリソースとして割り当てられる。なお、サーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えていてもよい。
【００３４】
ＨＤＤ１０３は、ＯＳプログラムやアプリケーションプログラムなどのプログラムおよびデータを記憶する不揮発性の記憶装置である。ＨＤＤ１０３は、ＣＰＵ１０１からの命令に従って、内蔵の磁気ディスクに対してデータの読み書きを行う。各仮想マシンには、例えば、ＨＤＤ１０３の記憶領域の一部が、仮想ディスクとして割り当てられる。なお、サーバ１００は、ＨＤＤ以外の種類の不揮発性の記憶装置（例えば、ＳＳＤ（Solid State Drive）など）を備えてもよく、複数個の記憶装置を備えていてもよい。
【００３５】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、サーバ１００に接続されたディスプレイ２２に画像を出力する。ディスプレイ２２としては、例えば、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイを用いることができる。
【００３６】
入力信号処理部１０５は、サーバ１００に接続された入力デバイス２３から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス２３としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００３７】
ディスクドライブ１０６は、記録媒体２４に記録されたプログラムやデータを読み取る駆動装置である。記録媒体２４として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、例えば、ＣＰＵ１０１からの命令に従って、記録媒体２４から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３８】
通信インタフェース１０７は、ネットワーク２１を介してサーバ１００ａ，１００ｂ，１００ｃや管理サーバ２００と通信を行うことが可能なインタフェースである。通信インタフェース１０７は、有線インタフェースでもよいし、無線インタフェースでもよい。
【００３９】
電源インタフェース１０８は、少なくとも１つのＵＰＳを接続できるインタフェースである。サーバ１００の電源インタフェース１０８には、ＵＰＳ３１が接続される。電源インタフェース１０８は、ＵＰＳ３１から電力供給状況の情報を取得してＲＡＭ１０２に格納する。ＵＰＳ３１から電力供給を受けるインタフェースとＵＰＳ３１とデータ通信を行うインタフェースとは、統合されていてもよいし別個であってもよい。電源インタフェース１０８は、ＵＰＳ３１とデータ通信を行うインタフェースとして、ＵＳＢ（Universal Serial Bus）インタフェースなどの汎用的なデータ通信インタフェースを備えてもよい。
【００４０】
図４は、サーバおよび管理サーバで動作するソフトウェア例を示す図である。
サーバ１００は、仮想マシン１１１，１１２，１１３、ＵＰＳエージェント１２１および仮想化制御部１３０を有する。上記の各ユニットは、例えば、ＲＡＭ１０２に格納されてＣＰＵ１０１が実行するプログラムのモジュールとして実現できる。
【００４１】
仮想マシン１１１，１１２，１１３は、クライアント４０または他のクライアントから要求された情報処理を実行する仮想的なコンピュータである。各仮想マシン上ではＯＳやアプリケーションソフトウェアが実行される。各仮想マシンのＯＳは、仮想化制御部１３０から割り当てられたリソースを管理し、アプリケーションソフトウェアを制御する。リソースには、ＣＰＵ１０１の演算能力、ＲＡＭ１０２の記憶領域、ＨＤＤ１０３の記憶領域である仮想ディスク、周辺機器が接続されたインタフェースのチャネルが含まれる。
【００４２】
ＵＰＳエージェント１２１は、ＵＰＳ３１から電力供給状況を示す情報を取得し、仮想化制御部１３０に電力供給状況を報告する。例えば、ＵＰＳエージェント１２１は、ＵＰＳ３１で停電が検出されたとき、および、ＵＰＳ３１で停電の解消（復電）が検出されたとき、仮想化制御部１３０にその旨を通知する。また、ＵＰＳエージェント１２１は、停電中、ＵＰＳ３１からバッテリ残量の情報（例えば、充電量または充電割合など）を取得し、バッテリ残量の単位時間当たりの変化量から残り稼働時間を算出して、仮想化制御部１３０に報告する。ただし、残り稼働時間を、ＵＰＳ３１が算出するようにしてもよい。電力供給状況を示す情報は、ＵＰＳエージェント１２１が定期的にＵＰＳ３１に問い合わせてもよいし、ＵＰＳ３１が割り込みによって定期または不定期に報告してもよい。
【００４３】
仮想化制御部１３０は、サーバ１００で動作する仮想マシン１１１，１１２，１１３を制御する。仮想化制御部１３０は、ハイパーバイザ、管理ＯＳ、管理ドメインなどと呼ばれるものであってもよい。仮想化制御部１３０は、リソースの競合が発生しないように、仮想マシン１１１，１１２，１１３にサーバ１００のリソースを割り当てる。各仮想マシンに割り当てるリソースの量は、当該仮想マシンの起動を要求したユーザとの契約によって変化し得る。例えば、ＣＰＵリソースはクロック周波数（Ｈｚ）を単位にして分割され、ＲＡＭリソースは記憶容量（Ｂｙｔｅ）を単位にして分割される。
【００４４】
また、仮想化制御部１３０は、ＵＰＳエージェント１２１から報告される電力供給状況に基づいて、仮想マシン１１１，１１２，１１３の移動を制御する。電力供給状況は、仮想化制御部１３０がＵＰＳエージェント１２１に定期的に問い合わせてもよいし、ＵＰＳエージェント１２１が割り込みによって定期または不定期に報告してもよい。仮想化制御部１３０は、サーバ状態報告部１３１および仮想マシン移動部１３２を有する。
【００４５】
サーバ状態報告部１３１は、管理サーバ２００からの要求に応じて、サーバ名とサーバ１００に接続されたＵＰＳ３１の識別子（ＩＤ：Identifier）を確認し、管理サーバ２００に報告する。ＵＰＳ３１のＩＤは、例えば、ＵＰＳエージェント１２１に問い合わせて確認する。また、サーバ状態報告部１３１は、管理サーバ２００からの要求に応じて、サーバ１００の空きリソース量（例えば、未使用のＣＰＵリソースとＲＡＭリソースの量）を管理サーバ２００に報告する。また、サーバ状態報告部１３１は、ＵＰＳエージェント１２１から停電が通知されると、動作中の仮想マシン１１１，１１２，１１３が使用するリソースの量を確認し、停電の通知と共に管理サーバ２００に報告する。
【００４６】
仮想マシン移動部１３２は、ＵＰＳ３１により停電が検出されると、管理サーバ２００からの指示に応じて、サーバ１００で動作中の仮想マシン１１１，１１２，１１３を他のサーバに移動することを制御する。仮想マシンの移動には、ライブマイグレーションを用いる。仮想マシン移動部１３２は、管理サーバ２００から指定された移動先のサーバに、リソースの確保を要求する。仮想マシン移動部１３２は、動作中の仮想マシン１１１，１１２，１１３を停止する前に、仮想マシン１１１，１１２，１１３に関するデータ（プログラムを含み得る）を、サーバ１００のＲＡＭ１０２から移動先のサーバのＲＡＭにコピーする。その後、仮想マシン移動部１３２は、移動先のサーバに仮想マシンの動作を開始するよう指示し、サーバ１００上から仮想マシン１１１，１１２，１１３を削除する。
【００４７】
ただし、仮想マシン移動部１３２は、停電が検出されて管理サーバ２００から移動先のサーバが通知された後、すぐには仮想マシン１１１，１１２，１１３の移動を完了せず、移動の準備をして待つ。移動の準備として、仮想マシン移動部１３２は、移動先のサーバにリソースを確保し、ＲＡＭ１０２上のデータのコピーを開始する。仮想マシン移動部１３２は、移動の準備をした状態で電力供給状況を監視し、ＵＰＳ３１のバッテリ残量が少なくなる（例えば、残り稼働時間が仮想マシン１１１，１１２，１１３の移動を完了するのに要する時間まで低下する）のを待って、移動を完了する。ただし、バッテリ残量が少なくなる前にＵＰＳ３１により復電が検出されると、仮想マシン移動部１３２は、準備していた仮想マシン１１１，１１２，１１３の移動を取り消す。
【００４８】
管理サーバ２００は、サーバ情報記憶部２１０、サーバ情報収集部２２１および移動制御部２２２を有する。サーバ情報記憶部２１０は、例えば、ＲＡＭまたはＨＤＤ上に確保した記憶領域として実現できる。サーバ情報収集部２２１および移動制御部２２２は、例えば、ＣＰＵが実行するプログラムのモジュールとして実現できる。
【００４９】
サーバ情報記憶部２１０は、サーバ１００，１００ａ，１００ｂ，１００ｃから収集したサーバ情報を記憶する。サーバ情報には、各サーバを識別するためのサーバ名と当該サーバに接続されているＵＰＳのＩＤとの対応関係が含まれる。なお、サーバ名はドメイン部とホスト部を含むＦＱＤＮ（Fully Qualified Domain Name）でもよく、また、サーバの識別情報としてＩＰ（Internet Protocol）アドレスなどのアドレスを用いてもよい。
【００５０】
サーバ情報収集部２２１は、サーバ１００，１００ａ，１００ｂ，１００ｃにＵＰＳのＩＤを問い合わせ、各サーバから報告されたサーバ名とＵＰＳのＩＤを、サーバ情報としてサーバ情報記憶部２１０に格納する。ＵＰＳのＩＤの問い合わせは、サーバとＵＰＳとの接続関係が変更されることを考慮し、継続的に行うことが好ましい。
【００５１】
移動制御部２２２は、何れかのサーバから停電が通知されると、サーバ情報記憶部２１０に格納されたサーバ情報を参照して、停電の影響がないと考えられる他のサーバを検索する。このとき、停電の通知をしたサーバと同じＵＰＳに接続されているサーバは、停電の影響があると判断され、検索の対象から除外される。移動制御部２２２は、検索されたサーバに空きリソースを問い合わせて、停電の通知をしたサーバで動作する仮想マシンを収容できる移動先のサーバを選択し、移動先のサーバを指定する。複数の仮想マシンがある場合は、仮想マシンによって移動先のサーバが異なってもよい。
【００５２】
図５は、サーバ情報収集の手順例を示すフローチャートである。図５に示すサーバ情報収集は、例えば、何れかのサーバで停電が検出される前に実行される。
（ステップＳ１１）管理サーバ２００のサーバ情報収集部２２１は、サーバ１００，１００ａ，１００ｂ，１００ｃにＵＰＳのＩＤを問い合わせる。
【００５３】
（ステップＳ１２）サーバ１００のサーバ状態報告部１３１は、サーバ１００のサーバ名とサーバ１００に接続されたＵＰＳ３１のＩＤを確認する。例えば、サーバ状態報告部１３１は、ＵＰＳエージェント１２１からＵＰＳ３１のＩＤを取得する。サーバ１００ａ，１００ｂ，１００ｃも、サーバ１００と同様に、サーバ名とＵＰＳのＩＤを確認する。
【００５４】
（ステップＳ１３）サーバ１００のサーバ状態報告部１３１は、ステップＳ１２で確認したサーバ名とＵＰＳのＩＤを、管理サーバ２００に回答する。サーバ１００ａ，１００ｂ，１００ｃも、サーバ１００と同様に、管理サーバ２００に回答する。
【００５５】
（ステップＳ１４）管理サーバ２００のサーバ情報収集部２２１は、サーバ１００，１００ａ，１００ｂ，１００ｃから取得したサーバ名とＵＰＳのＩＤとを対応付けて、サーバ情報としてサーバ情報記憶部２１０に登録する。サーバ情報記憶部２１０に既に登録されているサーバについては、ＵＰＳのＩＤを最新に更新する。
【００５６】
図６は、サーバ情報テーブルの例を示す図である。図５に示す手順を実行することで、管理サーバ２００のサーバ情報記憶部２１０には、図６に示すようなサーバ情報テーブル２１１が格納される。サーバ情報テーブル２１１は、サーバ名およびＵＰＳ−ＩＤを示す項目を含む。サーバ名の項目には、各サーバを識別するための情報が登録される。ＵＰＳ−ＩＤの項目には、各ＵＰＳを識別するための情報が登録される。
【００５７】
ここで、図６において、“ｈｏｓｔ１１．ａｂｃ”はサーバ１００を示し、“ｈｏｓｔ１２．ａｂｃ”はサーバ１００ａを示し、“ｈｏｓｔ２１．ａｂｃ”はサーバ１００ｂを示し、“ｈｏｓｔ２２．ａｂｃ”はサーバ１００ｃを示す。また、“ＵＰＳ１”はＵＰＳ３１を示し、“ＵＰＳ２”はＵＰＳ３２を示す。サーバ１００，１００ａには同じＵＰＳが接続されているため、同じＵＰＳ−ＩＤが対応付けられる。また、サーバ１００ｂ，１００ｃには同じＵＰＳが接続されているため、同じＵＰＳ−ＩＤが対応付けられる。
【００５８】
図７は、移動準備の手順例を示すフローチャートである。ここでは、サーバ１００に接続されたＵＰＳ３１が、電力線からの電力供給が停止したことを検出した場合を考える。
（ステップＳ２１）サーバ１００のＵＰＳエージェント１２１は、停電発生の通知をＵＰＳ３１から受け取ると、仮想化制御部１３０に停電を通知する。
【００５９】
（ステップＳ２２）サーバ１００のサーバ状態報告部１３１は、サーバ１００で動作中の仮想マシン１１１，１１２，１１３それぞれが使用しているリソースの量（例えば、ＣＰＵリソースの量とＲＡＭリソースの量）を確認する。
【００６０】
（ステップＳ２３）サーバ１００のサーバ状態報告部１３１は、サーバ名とステップＳ２２で確認したリソース量を含む停電通知を、管理サーバ２００へ送信する。
（ステップＳ２４）管理サーバ２００の移動制御部２２２は、サーバ情報記憶部２１０に格納されたサーバ情報テーブル２１１から、サーバ１００と異なるＵＰＳに接続されたサーバを検索する。図２のシステム例の場合、ＵＰＳ３１に接続されたサーバ１００ａが除外され、ＵＰＳ３２に接続されたサーバ１００ｂ，１００ｃが検索される。なお、サーバ１００よりも前に、あるサーバから停電通知を受け取っている場合、移動制御部２２２は、当該サーバおよび当該サーバと同じＵＰＳに接続されたサーバを除外してもよい。
【００６１】
（ステップＳ２５）管理サーバ２００の移動制御部２２２は、ステップＳ２４で検索されたサーバに、空きリソース量（例えば、未使用のＣＰＵリソースの量とＲＡＭリソースの量）を問い合わせる。ここでは、少なくともサーバ１００ｂに問い合わせたとする。
【００６２】
（ステップＳ２６）サーバ１００ｂのサーバ状態報告部は、サーバ１００ｂでも停電が検出されているか判断する。停電が検出されている場合、処理をステップＳ２８に進め、停電が検出されていない場合、処理をステップＳ２７に進める。ステップＳ２５で問い合わせを受けた他のサーバも、サーバ１００ｂと同様に、停電検出の有無を判断する。
【００６３】
（ステップＳ２７）サーバ１００ｂのサーバ状態報告部は、空きリソース量（例えば、未使用のＣＰＵリソースの量とＲＡＭリソースの量）を管理サーバ２００に回答する。
（ステップＳ２８）サーバ１００ｂのサーバ状態報告部は、空きリソースがゼロであると管理サーバ２００に回答する。これにより、仮想マシン１１１，１１２，１１３の移動先としてサーバ１００ｂが選択されなくなる。ただし、停電が検出されている旨を管理サーバ２００に回答してもよい。ステップＳ２５で問い合わせを受けた他のサーバも、サーバ１００ｂと同様に、ステップＳ２７またはステップＳ２８の回答を行う。
【００６４】
図８は、移動準備の手順例を示すフローチャート（続き）である。
（ステップＳ２９）管理サーバ２００の移動制御部２２２は、仮想マシン１１１，１１２，１１３の使用リソース量と、ステップＳ２４で検索されたサーバの空きリソース量とから、仮想マシン１１１，１１２，１１３の少なくとも１つを収容可能なサーバがあるか判断する。少なくとも１つの仮想マシンが収容可能である場合、処理をステップＳ３０に進め、全ての仮想マシンが収容不可である場合、処理をステップＳ３５に進める。
【００６５】
（ステップＳ３０）管理サーバ２００の移動制御部２２２は、仮想マシン１１１，１１２，１１３それぞれの移動先を、当該仮想マシンの使用リソース量よりも大きい空きリソースがあるサーバの中から選択する。例えば、移動制御部２２２は、使用ＣＰＵリソース量より大きい空きＣＰＵリソースがあり、且つ、使用ＲＡＭリソース量より大きい空きＲＡＭリソースがあるサーバを選択する。仮想マシン１１１，１１２，１１３は、全て同じサーバに移動してもよいし、複数のサーバに分散して移動してもよい。移動先のサーバの選択にあたっては、移動後の各サーバの負荷ができる限り均等になることが好ましい。
【００６６】
（ステップＳ３１）管理サーバ２００の移動制御部２２２は、停電通知を送信したサーバ１００に移動通知を送信する。移動通知には、ステップＳ３０で選択した仮想マシン毎の移動先のサーバを示す情報（例えば、移動先サーバのサーバ名）が含まれる。一部の仮想マシンについて、リソース不足により移動先が指定されないこともある。
【００６７】
（ステップＳ３２）サーバ１００の仮想マシン移動部１３２は、管理サーバ２００から指定された移動先のサーバに、当該サーバに移動する仮想マシンの使用リソース量に相当するリソースを確保するよう要求する。要求を受けたサーバは、移動される仮想マシンを収容するため、ＣＰＵリソースやＲＡＭリソースを予約する。
【００６８】
（ステップＳ３３）サーバ１００の仮想マシン移動部１３２は、サーバ１００に移動準備中の仮想マシンがあることを示す移動準備フラグをＯＮにする。移動準備フラグは、例えば、制御情報としてＲＡＭ１０２上に記憶される。
【００６９】
（ステップＳ３４）サーバ１００の仮想マシン移動部１３２は、仮想マシン１１１，１１２，１１３それぞれについて、ＲＡＭ１０２上に記憶されたデータを、移動先のサーバのＲＡＭにコピーする処理を開始する。このとき、仮想マシン１１１，１１２，１１３は停止しておらず、ＲＡＭ１０２上のデータは更新され得ることから、移動の完了または取消があるまで継続的（例えば、定期的）にコピーを行う。
【００７０】
（ステップＳ３５）管理サーバ２００の移動制御部２２２は、停電通知を送信したサーバ１００に、仮想マシン１１１，１１２，１１３を移動できない旨を通知する。この場合は、サーバ１００の仮想化制御部１３０は、ＵＰＳ３１のバッテリ残量が少なくなると、仮想マシン１１１，１１２，１１３のＯＳをシャットダウンすることになる。
【００７１】
図９は、サーバから管理サーバへの停電通知の例を示す図である。図９に示す停電通知は、上記のステップＳ２３において、サーバ１００から管理サーバ２００に送信される。停電通知は、仮想マシン毎に、仮想マシン名とＣＰＵリソースの使用量とＲＡＭリソースの使用量を示す情報を含む。仮想マシン名は、各仮想マシンに一意に付与される識別情報である。ＣＰＵリソースの使用量は、例えば、クロック周波数で表現される。ＲＡＭリソースの使用量は、例えば、記憶領域のバイト数で表現される。
【００７２】
ここで、図９において、“ＶＭ１０１”は仮想マシン１１１を示し、“ＶＭ１０２”は仮想マシン１１２を示し、“ＶＭ１０３”は仮想マシン１１３を示す。例えば、仮想マシン１１１は、４ＧＨｚのＣＰＵリソースと１６ＧＢのＲＡＭリソースを使用している。
【００７３】
図１０は、管理サーバからサーバへの移動通知の例を示す図である。図１０に示す移動通知は、上記のステップＳ３１において、管理サーバ２００からサーバ１００に送信される。移動通知は、仮想マシン毎に、仮想マシン名と移動先サーバを示す情報を含む。移動先サーバは、例えば、ＦＤＱＮなどのサーバ名で表現される。ここで、図１０において、仮想マシン１１１の移動先サーバとしてサーバ１００ｂが指定され、仮想マシン１１２，１１３の移動先サーバとしてサーバ１００ｃが指定されている。
【００７４】
図１１は、移動実行の手順例を示すフローチャートである。図１１に示す処理は、サーバ１００，１００ａ，１００ｂ，１００ｃそれぞれで継続的に（例えば、定期的に）実行される。ここでは、サーバ１００が実行する場合を考える。
【００７５】
（ステップＳ４１）サーバ１００の仮想マシン移動部１３２は、移動準備フラグがＯＮか、すなわち、移動準備中の仮想マシンがあるか判断する。移動準備フラグがＯＮの場合は処理をステップＳ４２に進め、移動準備フラグがＯＦＦの場合は処理を終了する。
【００７６】
（ステップＳ４２）サーバ１００の仮想マシン移動部１３２は、ＵＰＳエージェント１２１からＵＰＳ３１のバッテリによる残り稼働時間を示す情報を取得する。残り稼働時間は、ＵＰＳエージェント１２１が算出してもよいし、ＵＰＳ３１が算出してもよい。
【００７７】
（ステップＳ４３）サーバ１００の仮想マシン移動部１３２は、サーバ１００で動作中の移動すべき仮想マシンの数を確認し、仮想マシン数から稼働時間の閾値を算出する。閾値は、好ましくは、それら仮想マシンを移動するために確保すべき時間である。例えば、仮想マシン移動部１３２は、仮想マシン１つの移動を完了するのに要する時間を示す情報を予め保持しておき、仮想マシン１つ当たりの所要時間を仮想マシン数倍した値を閾値とする。例えば、図４に示すように、移動すべき仮想マシンの数は３である。
【００７８】
（ステップＳ４４）サーバ１００の仮想マシン移動部１３２は、ステップＳ４２で確認した残り稼働時間が、ステップＳ４３で算出した閾値以下であるか判断する。残り稼働時間が閾値以下の場合、処理をステップＳ４５に進め、それ以外の場合、処理を終了する。なお、ステップＳ４２〜Ｓ４４では、バッテリによる残り稼働時間に基づいて移動実行を判断しているが、バッテリの充電量や充電割合に基づいて移動実行を判断してもよい。その場合、仮想マシン移動部１３２は、充電量や充電割合に関する閾値を算出する。
【００７９】
（ステップＳ４５）サーバ１００の仮想マシン移動部１３２は、準備していた仮想マシン１１１，１１２，１１３の移動を実行すると決定する。仮想マシン移動部１３２は、サーバ１００で動作中の仮想マシン１１１，１１２，１１３を停止し、ＲＡＭ１０２上のデータのうち前回のコピーからの更新分を、移動先のサーバにコピーする。
【００８０】
（ステップＳ４６）サーバ１００の仮想マシン移動部１３２は、移動先のサーバに、コピーしたデータに基づいて仮想マシンの動作を開始するよう指示する。動作指示には、移動の準備をしていた仮想マシンの仮想マシン名が含まれ得る。例えば、仮想マシン移動部１３２は、サーバ１００ｂに仮想マシン１１１の動作の開始を指示し、サーバ１００ｃに仮想マシン１１２，１１３の動作の開始を指示する。
【００８１】
（ステップＳ４７）移動先のサーバ（例えば、サーバ１００ｂ，１００ｃ）の仮想化制御部は、サーバ１００からの指示を受けて、移動された仮想マシンの動作を開始させる。これにより、仮想マシン１１１，１１２，１１３の移動が完了する。
【００８２】
図１２は、移動取消の手順例を示すフローチャートである。図１２に示す処理は、図１１において残り稼働時間が閾値以下になるのを待っている間に復電が検出されたときに実行される。ここでは、サーバ１００が実行する場合を考える。
【００８３】
（ステップＳ５１）サーバ１００のＵＰＳエージェント１２１は、復電の通知をＵＰＳ３１から受け取ると、仮想化制御部１３０に復電を通知する。
（ステップＳ５２）サーバ１００の仮想マシン移動部１３２は、移動準備フラグがＯＮか、すなわち、移動準備中の仮想マシンがあるか判断する。移動準備フラグがＯＮの場合は処理をステップＳ５３に進め、移動準備フラグがＯＦＦの場合は処理を終了する。
【００８４】
（ステップＳ５３）サーバ１００の仮想マシン移動部１３２は、移動準備フラグをＯＦＦにする。前述のように、例えば、移動準備フラグはＲＡＭ１０２上に記憶される。
（ステップＳ５４）サーバ１００の仮想マシン移動部１３２は、管理サーバ２００から指定されていた移動先のサーバに、準備していた仮想マシン移動を取り消すことを指示する。取消指示には、移動の準備をしていた仮想マシンの仮想マシン名が含まれ得る。例えば、仮想マシン移動部１３２は、サーバ１００ｂに仮想マシン１１１の移動の取消を指示し、サーバ１００ｃに仮想マシン１１２，１１３の移動の取消を指示する。
【００８５】
（ステップＳ５５）移動先と指定されていたサーバ（例えば、サーバ１００ｂ，１００ｃ）の仮想化制御部は、サーバ１００からの指示を受けて、移動予定の仮想マシンに割り当てていたリソース（例えば、ＣＰＵリソースとＲＡＭリソース）を解放する。これにより、サーバ１００からコピーされたデータが消去される。
【００８６】
（ステップＳ５６）サーバ１００の仮想マシン移動部１３２は、仮想マシン１１１，１１２，１１３に関するデータのコピーを停止する。これにより、仮想マシン１１１，１１２，１１３は、他のサーバに移動せず、引き続きサーバ１００で動作する。
【００８７】
図１３は、管理サーバと複数のサーバの通信例を示すシーケンス図である。ＵＰＳ３１で停電が検出され、仮想マシン１１１の移動先としてサーバ１００ｂが選択され、仮想マシン１１２，１１３の移動先としてサーバ１００ｃが選択される場合を考える。
【００８８】
管理サーバ２００は、サーバ１００，１００ａ，１００ｂ，１００ｃに、接続されているＵＰＳのＩＤを問い合わせる（ステップＳ１１１）。サーバ１００，１００ａ，１００ｂ，１００ｃは、サーバ名とＵＰＳのＩＤを管理サーバ２００に回答する（ステップＳ１１２）。これにより、管理サーバ２００が備えるサーバ情報テーブル２１１には、サーバとＵＰＳとの接続関係を示す情報が登録されることになる。
【００８９】
サーバ１００は、ＵＰＳ３１で停電発生が検出されると、管理サーバ２００に停電通知を送信する（ステップＳ１２１）。停電通知には、仮想マシン１１１，１１２，１１３の使用リソース量を示す情報が含まれる。管理サーバ２００は、サーバ情報テーブル２１１から、停電通知が示す各仮想マシンの移動先の候補として、サーバ１００ｂ，１００ｃを検索する。停電通知を送信したサーバ１００と同じＵＰＳに接続されているサーバ１００ａは、候補から除外される。管理サーバ２００は、検索されたサーバ１００ｂ，１００ｃに空きリソース量を問い合わせる（ステップＳ１２２）。サーバ１００ｂ，１００ｃは、現在の空きリソース量を管理サーバ２００に回答する（ステップＳ１２３）。
【００９０】
管理サーバ２００は、仮想マシン１１１，１１２，１１３の使用リソース量と、サーバ１００ｂ，１００ｃの空きリソース量から、仮想マシン１１１の移動先をサーバ１００ｂと決定し、仮想マシン１１２，１１３の移動先をサーバ１００ｃと決定する。管理サーバ２００は、仮想マシン毎の移動先のサーバを示す移動通知をサーバ１００に送信する（ステップＳ１２４）。サーバ１００は、サーバ１００ｂに仮想マシン１１１のためのリソースを要求し、サーバ１００ｃに仮想マシン１１２，１１３のためのリソースを要求する（ステップＳ１２５）。サーバ１００は、仮想マシン１１１に関するデータのサーバ１００ｂへのコピーを開始し、仮想マシン１１２，１１３に関するデータのサーバ１００ｃへのコピーを開始する（ステップＳ１２６）。そして、サーバ１００は、ＵＰＳ３１のバッテリによる残り稼働時間が閾値まで低下するのを待つ。
【００９１】
サーバ１００は、残り稼働時間が閾値以下に低下したのを検出すると、サーバ１００ｂに仮想マシン１１１の動作開始を指示し、サーバ１００ｃに仮想マシン１１２，１１３の動作開始を指示する（ステップＳ１３１）。これにより、仮想マシン１１１，１１２，１１３の移動が完了する。一方、サーバ１００は、残り稼働時間が閾値まで低下する前に、ＵＰＳ３１で復電が検出されると、サーバ１００ｂに仮想マシン１１１の移動取消を指示し、サーバ１００ｃに仮想マシン１１２，１１３の移動取消を指示する（ステップＳ１３２）。これにより、仮想マシン１１１，１１２，１１３の移動が取り消される。図１３において、ステップＳ１３１とステップＳ１３２は選択的に実行される。
【００９２】
図１４は、リソース使用状況の変化例を示す図である。このリソース使用状況の例において、停電発生前、サーバ１００では仮想マシン１１１，１１２，１１３（ＶＭ１０１，１０２，１０３）が動作している。また、サーバ１００ｂ，１００ｃではそれぞれ１つの仮想マシン（ＶＭ２０１，２０２）が動作している。
【００９３】
サーバ１００で停電が検出されると、仮想マシン１１１をサーバ１００ｂに移動する準備が行われる。このとき、仮想マシン１１１は引き続きサーバ１００で動作しつつ、サーバ１００ｂに仮想マシン１１１のためのリソースが確保され、サーバ１００，１００ｂ間でＲＡＭの内容がコピーされる。また、仮想マシン１１２，１１３をサーバ１００ｃに移動する準備が行われる。このとき、仮想マシン１１２，１１３は引き続きサーバ１００で動作しつつ、サーバ１００ｃに仮想マシン１１２，１１３のためのリソースが確保され、サーバ１００，１００ｃ間でＲＡＭの内容がコピーされる。
【００９４】
サーバ１００で残り稼働時間が閾値以下になったことが検出されると、準備していたサーバ１００ｂへの仮想マシン１１１の移動が実行される。これにより、サーバ１００では仮想マシン１１１のためのリソースが解放され、サーバ１００ｂで仮想マシン１１１が動作する。また、準備していたサーバ１００ｃへの仮想マシン１１２，１１３の移動が実行される。これにより、サーバ１００では仮想マシン１１２，１１３のためのリソースが解放され、サーバ１００ｃで仮想マシン１１２，１１３が動作する。移動後のサーバ１００ｂ，１００ｃの負荷は、できる限り均等化されることが好ましい。一方、サーバ１００で復電が検出されると、ＲＡＭの内容のコピーが停止され、停電検出前の状態に戻る。
【００９５】
第２の実施の形態の情報処理システムによれば、サーバとＵＰＳとの接続関係を示す情報が収集され、あるサーバで停電発生が検出されると、当該サーバと異なるＵＰＳに接続された他のサーバが自動的に検索される。よって、各サーバに対して仮想マシンの退避先のサーバを個別に指定しておかなくても、停電発生を契機とした仮想マシンの移動を自動化でき、サーバとＵＰＳとの接続関係の変更に対して柔軟に対応できる。
【００９６】
また、あるサーバで停電発生が検出されたとき、すぐには仮想マシンの移動が実行されず、移動の準備をした上で、ＵＰＳのバッテリ残量が少なくなるのを待ってから移動が実行される。よって、停電時間が短い（例えば、数秒から数十秒程度）ことによって、仮想マシンの移動が無駄になってしまうリスクを低減できる。また、移動の準備を行っているため、移動の実行の決定を遅らせることができ、決定後には移動を迅速に実行できる。
【００９７】
なお、第２の実施の形態では、停電発生を契機として仮想マシンを移動する例を示したが、仮想マシンの移動を遅延させるという方法は、他の事象を契機とした仮想マシンの移動にも応用できる。例えば、サーバの過去の負荷変動を示すデータから負荷が高い時間帯を予測し、負荷が高いと予測した時間帯になる前に、予め仮想マシンを他のサーバに移動する準備をしておく。そして、当該サーバの負荷を監視し、負荷が閾値以上に上昇した場合には、準備していた仮想マシンの移動を実行し、予想に反して負荷が閾値以上に上昇しなかった場合には、準備していた仮想マシンの移動を取り消すことが考えられる。これによって、負荷予測に応じて仮想マシンを移動するときの無駄を抑制できる。
【符号の説明】
【００９８】
１０，１０ａ  情報処理装置
１１，１１ａ  記憶部
１２  制御部
１３  仮想マシン
【図１】
0005834939.tif 000002
【図２】
0005834939.tif 000003
【図３】
0005834939.tif 000004
【図４】
0005834939.tif 000005
【図５】
0005834939.tif 000006
【図６】
0005834939.tif 000007
【図７】
0005834939.tif 000008
【図８】
0005834939.tif 000009
【図９】
0005834939.tif 000010
【図１０】
0005834939.tif 000011
【図１１】
0005834939.tif 000012
【図１２】
0005834939.tif 000013
【図１３】
0005834939.tif 000014
【図１４】
0005834939.tif 000015