(57)【要約】【課題】仮想マシンにアタッチされた仮想ボリュームのマイグレーションを高速化する。【解決手段】マイグレーション制御装置１０において、受付部１１は、仮想マシンにアタッチされた仮想ボリュームを含む仮想機器のマイグレーションの指示を受け付ける。マイグレーション種別判定部１２は、マイグレーションが、仮想ボリュームを移行元の記憶装置から移行先の記憶装置へマイグレーションする処理を含むブロックマイグレーション又はボリュームマイグレーションであるか否かを判定する。マイグレーション制御部１４は、マイグレーションがブロックマイグレーション又はボリュームマイグレーションである場合、仮想ボリュームを、移行元の記憶装置及び移行先の記憶装置よりも入出力性能が高い所定の記憶装置へマイグレーションさせた後に、所定の記憶装置から移行先の記憶装置へマイグレーションさせる。【選択図】図１
2017004467.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシン又は該仮想マシンにアタッチされた仮想ボリュームの少なくともいずれかのマイグレーションの指示を受け付ける受付部と、
前記マイグレーションが、前記仮想ボリュームを移行元の記憶装置から移行先の記憶装置へマイグレーションする処理を含むブロックマイグレーション又はボリュームマイグレーションであるか否かを判定する判定部と、
前記判定部により、前記マイグレーションが前記ブロックマイグレーション又は前記ボリュームマイグレーションであると判定された場合には、前記仮想ボリュームを、前記移行元の記憶装置及び前記移行先の記憶装置よりも入出力性能が高い所定の記憶装置へマイグレーションさせた後に、前記所定の記憶装置から前記移行先の記憶装置へマイグレーションさせ、前記マイグレーションが前記ブロックマイグレーション及び前記ボリュームマイグレーション以外であると判定された場合には、前記仮想ボリュームを前記移行元の記憶装置から前記移行先の記憶装置へ直接マイグレーションさせる制御部と
を備えることを特徴とするマイグレーション制御装置。
【請求項２】
前記判定部は、前記マイグレーションが前記ブロックマイグレーション又は前記ボリュームマイグレーションである場合に、前記仮想マシンから前記仮想ボリュームへの単位時間あたりのデータの書き込み回数又は単位時間あたりの書き込みデータ量を示す負荷が所定閾値より大であるか否かを判定し、
前記制御部は、前記判定部により、前記負荷が前記所定閾値より大であると判定された場合には、前記仮想ボリュームを、前記所定の記憶装置へマイグレーションさせた後、前記所定の記憶装置から前記移行先の記憶装置へマイグレーションさせ、前記負荷が前記所定閾値以下であると判定された場合には、前記仮想ボリュームを前記移行元の記憶装置から前記移行先の記憶装置へ直接マイグレーションさせる
ことを特徴とする請求項１に記載のマイグレーション制御装置。
【請求項３】
前記制御部は、前記所定の記憶装置を用いるマイグレーションが実行中の場合には、前記所定の記憶装置を用いる他のマイグレーションの実行開始を保留させ、該マイグレーションが完了後に、該他のマイグレーションを実行開始させる
ことを特徴とする請求項１又は２に記載のマイグレーション制御装置。
【請求項４】
マイグレーション制御装置が実行するマイグレーション制御方法であって、
前記マイグレーション制御装置が、
仮想マシン又は該仮想マシンにアタッチされた仮想ボリュームの少なくともいずれかのマイグレーションの指示を受け付ける受付ステップと、
前記マイグレーションが、前記仮想ボリュームを移行元の記憶装置から移行先の記憶装置へマイグレーションする処理を含むブロックマイグレーション又はボリュームマイグレーションであるか否かを判定する判定ステップと、
前記判定ステップにより、前記マイグレーションが前記ブロックマイグレーション又は前記ボリュームマイグレーションであると判定された場合には、前記仮想ボリュームを、前記移行元の記憶装置及び前記移行先の記憶装置よりも入出力性能が高い所定の記憶装置へマイグレーションさせた後に、前記所定の記憶装置から前記移行先の記憶装置へマイグレーションさせ、前記マイグレーションが前記ブロックマイグレーション及び前記ボリュームマイグレーション以外であると判定された場合には、前記仮想ボリュームを前記移行元の記憶装置から前記移行先の記憶装置へ直接マイグレーションさせる制御ステップと
を含んだことを特徴とするマイグレーション制御方法。
【請求項５】
請求項１、２又は３に記載のマイグレーション制御装置としてコンピュータを機能させるマイグレーション制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイグレーション制御装置、マイグレーション制御方法及びマイグレーション制御プログラムに関する。
【背景技術】
【０００２】
近年、ＩａａＳ（Infrastructure  as  a  Service）型クラウドサービスが発展して来ている。ユーザは、サービス事業者と契約することで、仮想マシン、仮想ボリューム、仮想ネットワーク、仮想ルータ等の仮想機器（仮想リソース）をオンデマンドに利用できる（例えばAmazon  Web  Service（登録商標）、＜http://aws.amazon.com/jp/ec2＞参照）。仮想マシンは、ユーザが希望するサイズのボリュームがアタッチされる。ユーザは、仮想マシンへアタッチされたボリュームへ、ユーザ独自に、ＯＳ（Operating  System）や、ＤＢ（Data  Base）、Ｗｅｂサーバ、メールサーバ等のミドルウェアを適用できる。また、ＩａａＳを実現するオープンソースソフトウェアも普及してきている。例えば、OpenStack（登録商標、以下同様）を採用した商用クラウドサービスが数多く始まっている（例えば、Rackspace（登録商標）  Managed  Cloud  Services−More  than  just  infrastructure、<http://www.rackspace.com/cloud/>）。
【０００３】
ここで、仮想マシンが用いるデータは、仮想マシンにアタッチされた、ＨＤＤ（Hard  Disk  Drive）ストレージ上の仮想ボリュームに保存されることが多い。しかし、ＨＤＤストレージの増設時及び減設時には、ストレージ装置自体の再起動を伴うため、仮想ボリュームを別ＨＤＤストレージへマイグレーションすることを要する。OpenStackやCloudStack（登録商標、以下同様）等のクラウド基盤では、仮想マシンや仮想ボリュームをマイグレーションするＡＰＩ（Application  Programming  Interface）が提供されている。
【０００４】
なお、仮想マシンを別の物理マシンのハイパーバイザ上へマイグレーションし、かつ、仮想マシンにアタッチされた仮想ボリュームを別ストレージへマイグレーションすることを、ブロックマイグレーションという。また、仮想マシンはマイグレーションせずに、仮想マシンにアタッチされた仮想ボリュームのみを別ストレージへマイグレーションすることを、ボリュームマイグレーションという。また、仮想マシンを別の物理マシンのハイパーバイザ上へマイグレーションするが、仮想マシンにアタッチされた仮想ボリュームはマイグレーションしないことを、ライブマイグレーションという。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“Open  source  software  for  creating  private  and  public  clouds.”［online］、［２０１５年６月３日検索］、インターネット＜ＵＲＬ：http://www.openstack.org/＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、マイグレーション中も仮想マシンは動作しており、アタッチされた仮想ボリュームへログ等が書き込まれている。そのため、上述の技術では、仮想マシンによるボリュームへの書き込み回数や書き込みデータ量等の書き込み負荷が高い場合は、ブロックマイグレーションやボリュームマイグレーションに要する時間が長時間化する場合がある。すなわち、仮想マシンによる書き込み負荷が高い場合は、ブロックマイグレーションやボリュームマイグレーションが完了しない場合がある。
【０００７】
例えば、仮想マシンが１００Ｍｂｐｓで仮想ボリュームへログを書き込んでいるとき、ブロックマイグレーションやボリュームマイグレーションを１００Ｍｂｐｓで行う場合、別ストレージに転送したデータ量と同量のデータが新たに仮想ボリュームに書き込まれる。このため、ログの書き込み及びマイグレーションのデータ転送を繰り返すことになり、マイグレーションが完了しない。
【０００８】
そこで、ストレージのＩＯ（Input  Output）性能を向上させるため、ＨＤＤを並列化してストライピングを行ってストレージを構成する技術がある。しかし、ＨＤＤを並列化しても、ＨＤＤの増設時及び減設時や故障交換時は、ストレージ自体の再起動を伴うため、ボリュームを別ストレージへマイグレーションすることを要し、マイグレーションが完了しない場合がある可能性は依然として残る。
【０００９】
また、ＳＳＤ（Solid  State  Drive）を用いてストレージを構成することも考えられる。しかし、ＳＳＤは、ランダムＩＯ性能はＨＤＤと比べて高いが、シーケンシャルＩＯ性能がＨＤＤと比べて低く、容量当たりのコストが高く、耐久性も低い。このため、ＳＳＤは、ＯＬＴＰ（Online  Transaction  Processing）等の、高いＩＯ性能が要求されるアプリケーションに用いられるように、利用局面が限定されている。さらに、仮想マシンにアタッチされる仮想ボリュームは、低コストで運用したいファイルサーバ等では、ＨＤＤにより構成されたストレージが用いられることが一般的である。
【００１０】
本願が開示する実施形態の一例は、上記に鑑みてなされたものであって、仮想マシンにアタッチされた仮想ボリュームのマイグレーションを高速化することを目的とする。
【課題を解決するための手段】
【００１１】
本願が開示する実施形態の一例は、仮想マシン又は仮想マシンにアタッチされた仮想ボリュームの少なくともいずれかのマイグレーションの指示を受け付ける。そして、マイグレーションが、仮想ボリュームを移行元の記憶装置から移行先の記憶装置へマイグレーションする処理を含むブロックマイグレーション又はボリュームマイグレーションであるか否かを判定する。そして、マイグレーションがブロックマイグレーション又はボリュームマイグレーションであると判定された場合には、仮想ボリュームを、移行元の記憶装置及び移行先の記憶装置よりも入出力性能が高い所定の記憶装置へマイグレーションさせる。その後に、仮想ボリュームを、所定の記憶装置から移行先の記憶装置へマイグレーションさせる。また、マイグレーションがブロックマイグレーション及びボリュームマイグレーション以外であると判定された場合には、仮想ボリュームを移行元の記憶装置から移行先の記憶装置へ直接マイグレーションさせる。
【発明の効果】
【００１２】
本願が開示する実施形態の一例によれば、例えば、仮想マシンにアタッチされた仮想ボリュームのマイグレーションを高速化できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施形態に係るシステムの一例を示す図である。
【図２】図２は、実施形態に係るスケジューリングテーブルの一例を示す図である。
【図３】図３は、実施形態に係るボリュームのマイグレーションの概要の一例を示す図である。
【図４】図４は、実施形態に係るマイグレーション制御処理の一例を示すシーケンス図である。
【図５】図５は、プログラムが実行されることによりマイグレーション制御装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１４】
［実施形態］
以下、本願が開示するマイグレーション制御装置、マイグレーション制御方法及びマイグレーション制御プログラムの実施形態を説明する。なお、以下の実施形態は、一例を示すに過ぎず、本願が開示する技術を限定するものではない。また、以下に示す種々の形態は、矛盾しない範囲で適宜組合せてもよい。
【００１５】
（実施形態に係るシステムの一例）
図１は、実施形態に係るシステムの一例を示す図である。実施形態に係るシステム１は、ユーザ端末２、オペレータ端末３、マイグレーション制御システム１００、クラウドコントローラ２００、物理機器３００、４０１〜４０４、５０１〜５０４を含む。ユーザ端末２、オペレータ端末３、マイグレーション制御システム１００、クラウドコントローラ２００、物理機器３００、４０１〜４０４、５０１〜５０４は、ネットワーク等の所定の通信回線を介して接続される。
【００１６】
クラウドコントローラ２００、物理機器３００、４０１〜４０４、５０１〜５０４は、例えばデータセンタ内に設置される。ユーザ端末２、オペレータ端末３、マイグレーション制御システム１００は、クラウドコントローラ２００及び物理機器３００、４０１〜４０４、５０１〜５０４と同一のデータセンタ内に設置されてもよいし、異なるデータセンタ内に設置されてもよい。
【００１７】
ユーザ端末２は、クラウドコントローラ２００を介して物理機器３００、４０１〜４０４、５０１〜５０４上の仮想機器を操作するユーザの端末である。ユーザは、ユーザ端末２を操作し、後述の仮想機器の作成をクラウドコントローラ２００に依頼する。
【００１８】
オペレータ端末３は、マイグレーション制御システム１００及びクラウドコントローラ２００を操作するクラウド事業者のオペレータの端末である。オペレータは、オペレータ端末３を操作し、物理機器３００、４０１〜４０４、５０１〜５０４上の仮想機器のマイグレーションをマイグレーション制御システム１００に依頼する。また、オペレータは、オペレータ端末３を操作し、物理機器３００、４０１〜４０４、５０１〜５０４上の仮想機器の作成をクラウドコントローラ２００に依頼する。
【００１９】
なお、ユーザは、ユーザ端末２を操作し、物理機器３００、４０１〜４０４、５０１〜５０４上の仮想機器のマイグレーションをマイグレーション制御システム１００に依頼できるとしてもよい。
【００２０】
物理機器３００は、ＳＳＤストレージであり、例えば仮想ボリューム３００ａが作成される。物理機器３００は、「移行元ストレージ」から「移行先ストレージ」への仮想ボリュームのマイグレーションに際し、ＳＳＤを介したマイグレーションが行なわれる場合に、マイグレーションする仮想ボリュームのデータを一時記憶する仮想ボリュームが作成される。ＳＳＤを介したマイグレーションを、“中継マイグレーション”と呼ぶ。“中継マイグレーション”は、「移行元ストレージ」から「移行先ストレージ」への仮想ボリュームのマイグレーションに際し、先ず、「移行元ストレージ」から物理機器３００へ仮想ボリュームをマイグレーションする。次に、“中継マイグレーション”は、物理機器３００から「移行先ストレージ」へ仮想ボリュームをマイグレーションする。
【００２１】
なお、物理機器３００の記憶容量は、例えば、物理機器４０１〜４０４に作成される仮想ボリュームのうちの最大容量以下であればよい。このため、“中継マイグレーション”では、実行中の１つのマイグレーションにより物理機器３００の記憶領域が使用される場合に、実行中のマイグレーションが完了して記憶領域が開放されるまで他のマイグレーションは実行開始されない排他制御が行われる。
【００２２】
物理機器４０１は、ＨＤＤストレージ（ＨＤＤストレージＡと呼ぶ）であり、例えば仮想ボリューム４０１ａが作成される。物理機器４０２は、ＨＤＤストレージ（ＨＤＤストレージＢと呼ぶ）であり、例えば仮想ボリューム４０２ａが作成される。物理機器４０３は、ＨＤＤストレージ（ＨＤＤストレージＣと呼ぶ）であり、例えば仮想ボリューム４０３ａが作成される。物理機器４０４は、ＨＤＤストレージ（ＨＤＤストレージＤと呼ぶ）であり、例えば仮想ボリューム４０４ａが作成される。仮想ボリューム４０１ａ〜４０４ａは、ユーザ端末２又はオペレータ端末３からの依頼に応じて作成された仮想機器の一例である。
【００２３】
物理機器５０１は、ハイパーバイザａにより仮想マシンが動作する物理マシン（ハイパーバイザａと呼ぶ）であり、例えば仮想マシン５０１ａがハイパーバイザａ上で動作する。物理機器５０２は、ハイパーバイザｂにより仮想マシンが動作する物理マシン（ハイパーバイザｂと呼ぶ）であり、例えば仮想マシン５０２ａがハイパーバイザｂ上で動作する。物理機器５０３は、ハイパーバイザｃにより仮想マシンが動作する物理マシン（ハイパーバイザｃと呼ぶ）であり、例えば仮想マシン５０３ａがハイパーバイザｃ上で動作する。物理機器５０４は、ハイパーバイザｄにより仮想マシンが動作する物理マシン（ハイパーバイザｄと呼ぶ）であり、例えば仮想マシン５０４ａがハイパーバイザｄ上で動作する。仮想マシン５０１ａ〜５０４ａは、ユーザ端末２又はオペレータ端末３からの依頼に応じて作成された仮想機器の一例である。そして、仮想マシン５０１ａ〜５０４ａへ、物理機器４０１〜４０４に作成されたいずれかの仮想ボリュームがアタッチされる。
【００２４】
物理機器３００、４０１〜４０４、５０１〜５０４及びこれらの物理機器上の仮想ボリューム及び仮想マシンは、クラウドコントローラ２００により制御される。なお、クラウドコントローラ２００により制御される仮想機器は、仮想ボリューム及び仮想マシンの他、仮想ルータ、仮想ネットワーク、仮想ロードバランサ等の仮想ネットワーク機器等があるが、図１では図示を省略している。
【００２５】
図１に示すユーザ端末２、オペレータ端末３、マイグレーション制御システム１００、クラウドコントローラ２００、物理機器３００、４０１〜４０４、５０１〜５０４の数は、一例を示すに過ぎず、システム１の構成に応じて適切な数とすることができる。また、図１に示す各物理機器の数ならびに各物理機器への各仮想機器の配置及び数は、一例を示すに過ぎず、システム１の構成に応じて適切な数とすることができる。
【００２６】
（マイグレーション制御システムの一例）
マイグレーション制御システム１００は、マイグレーション制御装置１０、マイグレーションスケジューリングＤＢ２０を含む。マイグレーション制御装置１０は、ネットワーク等の所定の通信回線を介して、ユーザ端末２及びオペレータ端末３と接続される。また、マイグレーション制御装置１０は、ネットワーク等の所定の通信回線を介して、マイグレーションスケジューリングＤＢ２０と接続される。
【００２７】
マイグレーションスケジューリングＤＢ２０は、ボリュームマイグレーション、ブロックマイグレーション、ライブマイグレーションの各マイグレーションに該当するタスクの情報を管理する。マイグレーションスケジューリングＤＢ２０は、スケジューリングテーブル２０ａを有する。
【００２８】
（スケジューリングテーブルの一例）
図２は、実施形態に係るスケジューリングテーブルの一例を示す図である。スケジューリングテーブル２０ａは、「タスクＩＤ」「マイグレーション種別」「仮想マシン」「負荷」「移行元ハイパーバイザ」「移行先ハイパーバイザ」「移行元ストレージ」「移行先ストレージ」「状態」のカラムを有する。
【００２９】
ここで、「タスクＩＤ」は、マイグレーションの依頼を一意に識別する識別子である。「マイグレーション種別」は、依頼されたマイグレーションが“ボリュームマイグレーション”、“ブロックマイグレーション”、“ライブマイグレーション”のいずれであるかを判別するための情報である。「仮想マシン」は、マイグレーション対象の仮想マシンを識別する情報である。
【００３０】
「負荷」は、「マイグレーション種別」が“ボリュームマイグレーション”又は“ブロックマイグレーション”である場合に「仮想マシン」から「移行元ストレージ」への単位時間あたりの書き込み回数又は書き込みデータ量が所定閾値を越えているか否かの情報である。「負荷」が“高”は、「移行元ストレージ」であるＨＤＤストレージ上の仮想ボリュームへの単位時間あたりの書き込み回数又は単位時間あたりの書き込みデータ量が所定閾値を越えている場合である。また、「負荷」が“低”は、「移行元ストレージ」であるＨＤＤストレージ上の仮想ボリュームへの単位時間あたりの書き込み回数又は単位時間あたりの書き込みデータ量が所定閾値未満の場合である。なお、「負荷」が“−”（Ｎｕｌｌ）は、「マイグレーション種別」が“ライブマイグレーション”であるため、ＨＤＤストレージへの単位時間あたりの書き込み回数又は単位時間あたりの書き込みデータ量の判定結果の情報を要さない場合である。
【００３１】
「負荷」が“高”の場合には、「移行元ストレージ」であるＨＤＤストレージから「移行先ストレージ」であるＨＤＤストレージへの仮想ボリュームのマイグレーションに際し、“中継マイグレーション”が行なわれる。また、「負荷」が“低”の場合には、「移行元ストレージ」であるＨＤＤストレージから「移行先ストレージ」であるＨＤＤストレージへの仮想ボリュームのマイグレーションに際し、“通常マイグレーション”が行われる。“通常マイグレーション”は、「移行元ストレージ」から「移行先ストレージ」へ仮想ボリュームを直接マイグレーションする既存手法である。なお、「マイグレーション種別」が“ライブマイグレーション”の場合には、仮想ボリュームのマイグレーションは行われない。
【００３２】
「移行元ハイパーバイザ」「移行先ハイパーバイザ」は、「仮想マシン」の移行元の物理マシン、移行先の物理マシンをそれぞれ示す情報である。“ブロックマイグレーション”及び“ライブマイグレーション”では、「仮想マシン」がマイグレーションされるため、「移行元ハイパーバイザ」及び「移行先ハイパーバイザ」が異なる。“ボリュームマイグレーション”では、「仮想マシン」はマイグレーションされないため、「移行元ハイパーバイザ」及び「移行先ハイパーバイザ」は同一である。
【００３３】
「移行元ストレージ」「移行先ストレージ」は、「仮想マシン」にアタッチされている仮想ボリュームの移行元であるＨＤＤストレージ、仮想ボリュームの移行先であるＨＤＤストレージをそれぞれ示す情報である。“ブロックマイグレーション”及び“ボリュームマイグレーション”では、仮想ボリュームがマイグレーションされるため、「移行元ストレージ」及び「移行先ストレージ」が異なる。“ライブマイグレーション”では、仮想ボリュームはマイグレーションされないため、「移行元ストレージ」及び「移行先ストレージ」は同一である。
【００３４】
「状態」は、各タスクに該当するマイグレーションの実行状態を示す情報である。「状態」が“保留”であるタスクは、未処理のタスク、又は、排他制御により実行が保留されている“中継マイグレーション”のタスクである。「状態」が“前半処理実行中”であるタスクは、“中継マイグレーション”において、ＨＤＤストレージからＳＳＤストレージへのボリュームマイグレーションの実行中であるタスクである。“前半処理”は、“中継マイグレーション”におけるＨＤＤストレージからＳＳＤストレージへの仮想ボリュームのボリュームマイグレーションをいう。「状態」が“後半処理実行中”であるタスクは、“中継マイグレーション”が“ボリュームマイグレーション”に係る場合には、ＳＳＤストレージからＨＤＤストレージへの仮想ボリュームのボリュームマイグレーション実行中であるタスクである。または、「状態」が“後半処理実行中”であるタスクは、“中継マイグレーション”が“ブロックマイグレーション”に係る場合には、ＳＳＤストレージからＨＤＤストレージへの仮想ボリュームのマイグレーション及び仮想ボリュームのマイグレーション完了後の該当「仮想マシン」のマイグレーションを含むブロックマイグレーション実行中であるタスクである。“後半処理”は、“中継マイグレーション”が“ボリュームマイグレーション”に係る場合には、“中継マイグレーション”におけるＳＳＤストレージからＨＤＤストレージへの仮想ボリュームのボリュームマイグレーションをいう。または、“後半処理”は、“中継マイグレーション”が“ブロックマイグレーション”に係る場合には、ＳＳＤストレージからＨＤＤストレージへの仮想ボリュームのマイグレーション及び仮想ボリュームのマイグレーション完了後の該当「仮想マシン」のマイグレーションを含むブロックマイグレーションをいう。「状態」が“実行中”であるタスクは、ＨＤＤストレージから他のＨＤＤストレージへの仮想ボリュームの直接のマイグレーション実行中、又は、ライブマイグレーション実行中であるタスクである。「状態」が“完了”であるタスクは、マイグレーションが完了したタスクである。
【００３５】
OpenStackやCloudStack等のクラウド基盤では、個々のマイグレーション状態のみを管理する。このため、“前半処理実行中”“後半処理実行中”等のＳＳＤストレージを介した仮想ボリュームのマイグレーションの実行は、マイグレーションスケジューリングＤＢ２０のスケジューリングテーブル２０ａで管理される。「状態」は、マイグレーション制御装置１０が、クラウドコントローラ２００へマイグレーションを依頼した時や、クラウドコントローラ２００からマイグレーション完了通知を受信した時に更新される。例えば、「状態」は、“前半処理実行中”が完了すると“後半処理実行中”へ更新され、仮想ボリュームのマイグレーションの全工程が完了すると、“完了”へ更新される。さらに「仮想マシン」のマイグレーションを要する場合には、「状態」は、“後半処理”の完了後に「仮想マシン」のマイグレーションが完了すると、“完了”へ更新される。
【００３６】
図２に示す例では、「タスクＩＤ」“１”のマイグレーションは、「マイグレーション種別」「仮想マシン」がそれぞれ“ボリュームマイグレーション”“ＶＭ１”である。そして、「タスクＩＤ」“１”のマイグレーションは、「移行元ハイパーバイザ」「移行先ハイパーバイザ」「移行元ストレージ」「移行先ストレージ」がそれぞれ“ハイパーバイザａ”“ハイパーバイザａ”“ＨＤＤストレージＡ”“ＨＤＤストレージＣ”である。そして、「タスクＩＤ」“１”のマイグレーションは、「負荷」が“高”であり、「状態」が“完了”である。すなわち、「タスクＩＤ」“１”のマイグレーションのタスクは、仮想マシンはマイグレーションせず、仮想ボリュームのみをＨＤＤストレージＡからＨＤＤストレージＣへマイグレーションする。そして、「タスクＩＤ」“１”のマイグレーションのタスクは、「負荷」が“高”のため“中継マイグレーション”を行って、全てのマイグレーションの工程が完了している。
【００３７】
（マイグレーション制御装置の一例）
マイグレーション制御装置１０は、オペレータ端末３（もしくはユーザ端末２）から、マイグレーションの依頼を受けて、マイグレーションスケジューリングＤＢ２０のスケジューリングテーブル２０ａへタスクとして依頼を登録する。そして、マイグレーション制御装置１０は、スケジューリングテーブル２０ａの情報を用いて、クラウドコントローラ２００へマイグレーションを依頼する。また、マイグレーション制御装置１０は、クラウドコントローラ２００からのマイグレーション開始情報又は完了情報に基づいて、スケジューリングテーブル２０ａへ登録されている各タスクの状態を変更させる。そして、マイグレーション制御装置１０は、スケジューリングテーブル２０ａへ登録されている次の実行順序のタスクや別タスクの開始をクラウドコントローラ２００に依頼する。すなわち、マイグレーション制御装置１０は、スケジューリングテーブル２０ａをもとに、マイグレーションのタスクの実行をスケジューリングする。
【００３８】
マイグレーション制御装置１０は、受付部１１、マイグレーション種別判定部１２、仮想マシン負荷判定部１３、マイグレーション制御部１４を有する。
【００３９】
受付部１１は、オペレータ端末３（もしくはユーザ端末２）から投入されたマイグレーション依頼を受け付ける。マイグレーション依頼は、「マイグレーション種別」「仮想マシン」「移行元ハイパーバイザ」「移行先ハイパーバイザ」「移行元ストレージ」「移行先ストレージ」の情報を含む。すなわち、オペレータ（もしくはユーザ）は、「マイグレーション種別」「仮想マシン」「移行元ハイパーバイザ」「移行先ハイパーバイザ」「移行元ストレージ」「移行先ストレージ」を指定して、マイグレーション制御装置１０へマイグレーションを依頼する。なお、「移行先ハイパーバイザ」「移行先ストレージ」は、クラウドコントローラ２００により各物理機器のリソース状況に応じて自動選択されるとし、オペレータ（もしくはユーザ）による指定を要しないとしてもよい。また、「移行元ハイパーバイザ」、「移行元ストレージ」の情報は、「仮想マシン」の情報をもとに、後述のクラウドコントローラＤＢ２０２から取得できるため、マイグレーション依頼には含まれなくてもよい。
【００４０】
受付部１１は、受け付けたマイグレーション依頼に対し、一意の「タスクＩＤ」を割り当て、マイグレーションスケジューリングＤＢ２０のスケジューリングテーブル２０ａへタスク情報として登録する。受付部１１は、受け付けたマイグレーション依頼の「状態」を、初期状態として、マイグレーション未実行を示す“保留”とし、スケジューリングテーブル２０ａへ登録する。スケジューリングテーブル２０ａにおける１レコードが１つのタスク情報に該当する。受付部１１が、マイグレーション依頼に対して割り当てる「タスクＩＤ」は、例えばマイグレーション依頼の受付順序に応じたＩＤであり、マイグレーション依頼と対応するタスクを実行する実行順序を制御するための情報となる。
【００４１】
マイグレーション種別判定部１２は、スケジューリングテーブル２０ａにおいて「状態」が“保留”であるタスクのうち、「タスクＩＤ」により示される実行順序が最先のタスクのタスク情報を取得する。そして、マイグレーション種別判定部１２は、取得したタスク情報の「マイグレーション種別」を判定する。
【００４２】
仮想マシン負荷判定部１３は、マイグレーション種別判定部１２により判定された「マイグレーション種別」が“ボリュームマイグレーション”又は“ブロックマイグレーション”である場合、該当タスクの「仮想マシン」の負荷を、この仮想マシンが動作する「移行元ハイパーバイザ」へ問い合わせることにより取得する。「負荷」は、例えば、仮想マシンからこの仮想マシンにアタッチされている仮想ボリュームへの単位時間あたりの書き込み回数又は単位時間あたりの書き込みデータ量である。
【００４３】
そして、仮想マシン負荷判定部１３は、取得した負荷が所定閾値を越えている場合、スケジューリングテーブル２０ａにおける該当タスクの「負荷」へ“高”を設定する。一方、仮想マシン負荷判定部１３は、取得した負荷が所定閾値未満の場合、スケジューリングテーブル２０ａにおける該当タスクの「負荷」へ“低”を設定する。なお、マイグレーション種別判定部１２により判定された「マイグレーション種別」が“ライブマイグレーション”である場合は、仮想マシン負荷判定部１３は負荷の判定を行わないため、スケジューリングテーブル２０ａにおける該当タスクの「負荷」は“−”(Ｎｕｌｌ)となる。
【００４４】
マイグレーション制御部１４は、仮想マシン負荷判定部１３により判定された「負荷」が“高”である該当タスクについては、アタッチされている仮想ボリュームの“中継マイグレーション”の“前半処理”として、「移行元ストレージ」からＳＳＤストレージへの、該当タスクの仮想ボリュームのボリュームマイグレーションをクラウドコントローラ２００に依頼する。その後、マイグレーション制御部１４は、該当タスクの“前半処理”の終了をクラウドコントローラ２００から通知される。
【００４５】
マイグレーション制御部１４は、クラウドコントローラ２００から“前半処理”の終了を通知されると、“中継マイグレーション”が“ボリュームマイグレーション”に係る場合には、“中継マイグレーション”の“後半処理”として、ＳＳＤストレージからＨＤＤストレージへの仮想ボリュームのボリュームマイグレーションをクラウドコントローラ２００に依頼する。または、マイグレーション制御部１４は、クラウドコントローラ２００から“前半処理”の終了を通知されると、“中継マイグレーション”が“ブロックマイグレーション”に係る場合には、“中継マイグレーション”の“後半処理”として、ＳＳＤストレージからＨＤＤストレージへの仮想ボリュームのマイグレーション及び仮想ボリュームのマイグレーション完了後の該当「仮想マシン」のマイグレーションを含むブロックマイグレーションをクラウドコントローラ２００に依頼する。
【００４６】
マイグレーション制御部１４は、“中継マイグレーション”を行う際に、タスクの進行に伴うクラウドコントローラ２００からの通知により、該当タスクの「状態」を、“保留”から“前半処理実行中”へ、“前半処理実行中”から“後半処理実行中”へ、“後半処理実行中”から“完了”へ更新する。なお、マイグレーション制御部１４は、該当タスクが“ボリュームマイグレーション”である場合は、該当タスクの「状態」を“後半処理”完了後に“完了”へ更新し、該当タスクが“ブロックマイグレーション”である場合は、該当タスクの「状態」を「仮想マシン」を含む全てのマイグレーション完了後に“完了”へ更新する。
【００４７】
なお、マイグレーション制御部１４は、排他制御により該当タスクの“中継マイグレーション”をクラウドコントローラ２００に依頼しない場合は、該当タスクの「状態」を“保留”のままとする。そして、マイグレーション制御部１４は、“中継マイグレーション”の排他制御が解除されると、該当タスクの“中継マイグレーション”の“前半処理”としてのボリュームマイグレーション、“前半処理”の完了後の“後半処理”としてのボリュームマイグレーション又はブロックマイグレーションをクラウドコントローラ２００に依頼する。また、マイグレーション制御部１４は、該当タスクの“中継マイグレーション”を保留中に、マイグレーション種別判定部１２及び仮想マシン負荷判定部１３による判定結果に応じて、次の実行順序のタスクについての“ライブマイグレーション”又は“通常マイグレーション”としてのボリュームマイグレーションもしくはブロックマイグレーションをクラウドコントローラ２００に依頼する。
【００４８】
または、マイグレーション制御部１４は、仮想マシン負荷判定部１３により判定された「負荷」が“低”である該当タスクについては、アタッチされている仮想ボリュームの“通常マイグレーション”をクラウドコントローラ２００に依頼する。マイグレーション制御部１４は、“通常マイグレーション”を行う際に、タスクの進行に伴うクラウドコントローラ２００からの通知により、該当タスクの「状態」を、“保留”から“実行中”へ、“実行中”から“完了”へ更新する。
【００４９】
または、マイグレーション制御部１４は、スケジューリングテーブル２０ａにおける該当タスクの「負荷」が“−”である該当タスクについては、アタッチされている仮想ボリュームのマイグレーション対象外であるので、仮想ボリュームのマイグレーションは行わない。なお、“ライブマイグレーション”の場合に負荷判定を除外している、すなわち“中継マイグレーション”の対象とならないのは、“ライブマイグレーション”がボリューム移行を伴わず、移行データのサイズが小さいため移行時間が問題とならないためである。
【００５０】
また、マイグレーション制御部１４は、マイグレーション種別判定部１２により判定された該当タスクの「マイグレーション種別」が“ライブマイグレーション”である場合、「移行元ハイパーバイザ」から「移行先ハイパーバイザ」への該当タスクの「仮想マシン」のマイグレーションをクラウドコントローラ２００に依頼する。マイグレーション制御部１４は、ライブマイグレーションを行う際に、タスクの進行に伴うクラウドコントローラ２００からの通知により、該当タスクの「状態」を、“保留”から“実行中”へ、“実行中”から“完了”へ更新する。
【００５１】
（クラウドコントローラの一例）
クラウドコントローラ２００は、制御部２０１、クラウドコントローラＤＢ２０２を有する。制御部２０１は、クラウドコントローラ２００全体の制御を実行し、クラウドコントローラ２００が提供する各種サービスを実行する。クラウドコントローラＤＢ２０２は、クラウドコントローラＤＢ２０２が提供する各種サービスに関する状態や設定に関する情報を格納する。
【００５２】
具体的には、クラウドコントローラ２００は、オペレータ端末３（もしくはユーザ端末２）からＡＰＩ経由で受けた仮想機器の作成、削除、マイグレーション等の依頼に応じて、物理機器３００、４０１〜４０４、５０１〜５０４に、各仮想機器の作成、削除、マイグレーション等を依頼する。クラウドコントローラ２００は、OpenStack等が利用できる。物理機器３００、４０１〜４０４、５０１〜５０４は、クラウドコントローラ２００から依頼を受け、仮想機器の作成、削除、マイグレーションを行う。例えばOpenStackのコアサービスには、Compute、Identity、Networking、Block  Storage等がある。クラウドコントローラＤＢ２０２は、コアサービスの状態や設定に関する情報を格納する。
【００５３】
（ボリュームのマイグレーションの概要の一例）
図３は、実施形態に係るボリュームのマイグレーションの概要の一例を示す図である。図２及び図３を参照して、実施形態に係るボリュームのマイグレーションの概要を説明する。図３に示す例は、マイグレーション制御装置１０（図１参照）が、オペレータ端末３（もしくはユーザ端末２）からの依頼を受け付け、物理機器４０１（ＨＤＤストレージＡ）から物理機器４０２（ＨＤＤストレージＢ）へ、物理機器５０１（ハイパーバイザａ）上の仮想マシン５０１ａのアタッチボリュームを“中継マイグレーション”によるボリュームマイグレーションで移行する処理をクラウドコントローラ２００に依頼する場合を示す。
【００５４】
図３に示す例では、クラウドコントローラ２００（図１参照）にOpenStack、物理機器５０１（ハイパーバイザａ）にKVM/QEMU、仮想マシン制御ライブラリにLibvirt、データ転送ツールにrsyncを用いるとするが、他のツールを用いてもよい。アタッチボリュームの移行の際、アタッチボリュームのデータは、データを同期するツールにより、仮想マシン５０１ａが動作する物理機器５０１（ハイパーバイザａ）を介して転送される。
【００５５】
先ず、マイグレーション制御装置１０は、仮想マシン５０１ａが書き込みを行っている物理機器４０１（ＨＤＤストレージＡ）上の仮想ボリューム４０１ａを、物理機器４０２（ＨＤＤストレージＢ）上の仮想ボリューム４０２ａへマイグレーションするタスク情報をマイグレーションスケジューリングＤＢ２０のスケジューリングテーブル２０ａへ登録する。
【００５６】
次に、マイグレーション制御装置１０は、物理機器５１０（ハイパーバイザａ）に、仮想マシン５０１ａから仮想ボリューム４０１ａへの書き込み負荷を問い合わせる。物理機器５１０（ハイパーバイザａ）は、例えばdstat等の既存の計測手法を用いて書き込み負荷を計測する。マイグレーション制御装置１０は、物理機器５１０（ハイパーバイザａ）から取得した書き込み負荷が所定閾値よりも高い場合、ボリューム書き込みが多い「負荷」“高”と判定し、物理機器３００（ＳＳＤストレージ）をリレーに使う“中継マイグレーション”を行うと決定する。一方、マイグレーション制御装置１０は、物理機器５１０（ハイパーバイザａ）から取得した書き込み負荷が所定閾値以下の場合、ボリューム書き込みが少ない「負荷」“低”と判定し、“通常マイグレーション”を行うと決定する。
【００５７】
なお、“中継マイグレーション”を行う場合は、スケジューリングテーブル２０ａの「負荷」へ“高”が設定され、“通常マイグレーション”を行う場合は、スケジューリングテーブル２０ａの「負荷」へ“低”が設定される。図２に示す例では、「タスクＩＤ」“３”、“６”のタスクは、仮想マシンからボリュームへの書き込み負荷が“低”であるため、ＨＤＤストレージＢからＨＤＤストレージＤへ、ＨＤＤストレージＢからＨＤＤストレージＣへ、仮想ボリュームの直接のマイグレーションが実行される。
【００５８】
次に、マイグレーション制御装置１０は、スケジューリングテーブル２０ａを参照し、他に物理機器３００（ＳＳＤストレージ）をリレーに使用しているマイグレーションのタスクがあるか否かを判定する。
【００５９】
次に、マイグレーション制御装置１０は、他に物理機器３００（ＳＳＤストレージ）をリレーに使用しているマイグレーションのタスクがない場合、物理機器４０１（ＨＤＤストレージＡ）から物理機器３００（ＳＳＤストレージ）へのボリュームマイグレーション（前半処理）をクラウドコントローラ２００（図１参照）に依頼する。マイグレーション制御装置１０は、他に物理機器３００（ＳＳＤストレージ）をリレーに使用しているマイグレーションのタスクがある場合は、物理機器４０１（ＨＤＤストレージＡ）から物理機器３００（ＳＳＤストレージ）へのボリュームマイグレーションを保留する。
【００６０】
例えば、図２に示す例では、「タスクＩＤ」“８”のタスクのブロックマイグレーションは、「状態」が“前半処理実行中”であり、“前半処理”としてＨＤＤストレージＢから物理機器３００（ＳＳＤストレージ）へボリュームマイグレーション中であるため、「タスクＩＤ」“９”が保留されている。マイグレーション制御装置１０は、「タスクＩＤ」“８”のタスクのブロックマイグレーション完了をクラウドコントローラ２００から通知されると、スケジューリングテーブル２０ａの「タスクＩＤ」“８”の「状態」を“完了”へ更新し、保留中のタスクである「タスクＩＤ」“９”のブロックマイグレーションをクラウドコントローラ２００に依頼する。
【００６１】
なお、図２に示す「タスクＩＤ」“６”のタスクのボリュームマイグレーションは、物理機器３００（ＳＳＤストレージ）をリレーとして使用しないため、物理機器３００（ＳＳＤストレージ）をリレーとして使用する「タスクＩＤ」“８”のタスクのブロックマイグレーションと同時実行される。よって、図２において、「タスクＩＤ」“６”、“８”のタスクのそれぞれの「状態」が“実行中”“前半処理実行中”となる。
【００６２】
図３に示すように、クラウドコントローラ２００は、マイグレーション制御装置１０から依頼を受けて、物理機器４０１の仮想ボリューム４０１ａを物理機器３００の仮想ボリューム３００ａへボリュームマイグレーション（前半処理）する処理を開始する。そして、マイグレーション制御装置１０は、スケジューリングテーブル２０ａに当該タスクの「状態」を“前半処理実行中”へ更新する。
【００６３】
次に、マイグレーション制御装置１０は、クラウドコントローラ２００から“前半処理”が完了した情報が通知されると、物理機器３００（ＳＳＤストレージ）から物理機器４０２（ＨＤＤストレージＢ）へのボリュームマイグレーション（後半処理）をクラウドコントローラ２００に依頼する。そして、マイグレーション制御装置１０は、スケジューリングテーブル２０ａの当該タスクの「状態」を“後半処理実行中”へ更新する。
【００６４】
次に、マイグレーション制御装置１０は、クラウドコントローラ２００から“後半処理”が完了した情報が通知されると、スケジューリングテーブル２０ａに当該タスクの「状態」を“完了”へ更新する。
【００６５】
なお、マイグレーション制御装置１０は、実行中の“中継マイグレーション”の他のタスクがある場合は、受け付けたマイグレーションの依頼に係る“中継マイグレーション”を保留し、先行する“中継マイグレーション”が完了した後に、保留した“中継マイグレーション”を開始する。
【００６６】
仮想マシン５０１ａは、仮想ボリューム４０１ａから仮想ボリューム３００ａへのマイグレーション中も動作し、新たに出力したデータを仮想ボリューム４０１ａ及び仮想ボリューム３００ａの両方へ書き込む。例えば、OpenStack、KVM/QEMU、Libvirtを用いる場合は、Libvirtのサブモジュールであるvirtioがボリューム書き込みのバッファとして動作する。仮想ボリューム４０１ａから仮想ボリューム３００ａへのマイグレーションの前半処理実行中は、仮想ボリューム４０１ａ及び仮想ボリューム３００ａの両方にデータ書き込みが行われるが、信頼性のあるコミットは仮想ボリューム４０１ａだけで行われる。このため、マイグレーションの前半処理においてinitial  sync等のデータ同期が終了後、仮想ボリューム４０１ａ及び仮想ボリューム３００ａの差分が、差分syncが繰り返されることにより仮想ボリューム３００ａへ反映される。そして、virtioのバッファデータが仮想ボリューム３００ａにコミットされた後、仮想ボリューム４０１ａが仮想マシン５０１ａからデタッチされ、仮想ボリューム３００ａが仮想マシン５０１ａへアタッチされることで、アタッチボリュームが切り替えられる。
【００６７】
同様に、仮想マシン５０１ａは、仮想ボリューム３００ａから仮想ボリューム４０２ａへのマイグレーション中も動作し、新たに出力したデータを仮想ボリューム３００ａ及び仮想ボリューム４０２ａの両方へ書き込む。仮想ボリューム３００ａから仮想ボリューム４０２ａへのマイグレーションの後半処理実行中は、仮想ボリューム３００ａ及び仮想ボリューム４０２ａの両方にデータ書き込みが行われるが、信頼性のあるコミットは仮想ボリューム３００ａだけで行われる。このため、マイグレーションの後半処理においてinitial  sync等のデータ同期が終了後、仮想ボリューム３００ａ及び仮想ボリューム４０２ａの差分が、差分syncが繰り返されることにより仮想ボリューム４０２ａへ反映される。そして、virtioのバッファデータが仮想ボリューム４０２ａにコミットされた後、仮想ボリューム３００ａが仮想マシン５０１ａからデタッチされ、仮想ボリューム４０２ａが仮想マシン５０１ａへアタッチされることで、アタッチボリュームが切り替えられる。
【００６８】
なお、ブロックマイグレーションにおけるマイグレーション制御装置１０の動作は、“後半処理”において仮想マシンのマイグレーションを伴う点以外は、ボリュームマイグレーションと同様である。ブロックマイグレーションでは、アタッチボリュームが移行元ストレージから移行先ストレージへ、仮想マシンが移行元ハイパーバイザから移行先ハイパーバイザへ移行される。アタッチボリューム及び仮想マシンの移行の際に、アタッチボリュームのデータは、移行元ハイパーバイザ及び移行先ハイパーバイザを介して転送され、最終的に移行先ストレージへ移行される。データ同期ツールが、ファイルのチャンク（塊）毎にチェックサムを計算し、ファイル内容に差分がある場合はマージを行うため、移行元ボリュームと移行先ボリュームが同一データであれば、データ転送は発生しない。initial  sync等のデータ同期及び差分syncは、ボリュームマイグレーションと同様である。そして、差分sync終了後、移行元仮想マシン及び移行元ボリュームから移行先仮想マシン及び移行先ボリュームへ運用が切り替えられる。
【００６９】
（マイグレーション制御処理の一例）
図４は、実施形態に係るマイグレーション制御処理の一例を示すシーケンス図である。図４は、一例として、物理機器５０１のハイパーバイザａ上で仮想マシンが動作し、この仮想マシンにアタッチされている移行元ボリュームが物理機器４０１（ＨＤＤストレージＡ）に作成されている場合を示す。また、図４は、一例として、ボリュームのマイグレーションが行われる場合には、移行元ボリュームが物理機器４０２（ＨＤＤストレージＢ）に作成される場合を示す。また、図４は、一例として、物理機器５０１のハイパーバイザａ上で動作する仮想マシンのマイグレーションが行われる場合には、物理機器５０２のハイパーバイザｂ上へ仮想マシンが移行される場合を示す。
【００７０】
先ず、オペレータ端末３（もしくはユーザ端末２）は、マイグレーション制御装置１０へ、マイグレーション依頼を送信する（ステップＳ１１）。次に、マイグレーション制御装置１０は、オペレータ端末３（もしくはユーザ端末２）から受信したマイグレーション依頼を、マイグレーションスケジューリングＤＢ２０のスケジューリングテーブル２０ａ（図１参照）へ、マイグレーションのタスク情報として登録する（ステップＳ１２）。なお、ステップＳ１１及びＳ１２の処理は、ステップＳ１３以降の処理と並行して、繰り返し行われてもよい。
【００７１】
次に、マイグレーション制御装置１０は、スケジューリングテーブル２０ａから未実行のタスク情報を１つ取得する（ステップＳ１３）。次に、マイグレーション制御装置１０は、ステップＳ１３で取得したタスク情報の「マイグレーション種別」が“ボリュームマイグレーション”又は“ブロックマイグレーション”であるか否かを判定する。マイグレーション制御装置１０は、「マイグレーション種別」が“ボリュームマイグレーション”又は“ブロックマイグレーション”である場合（ステップＳ１４：Ｙｅｓ）、ステップＳ１６へ処理を移す。一方、マイグレーション制御装置１０は、「マイグレーション種別」が“ライブマイグレーション”である場合（ステップＳ１４：Ｎｏ）、ステップＳ２７へ処理を移す。
【００７２】
ステップＳ１５では、マイグレーション制御装置１０は、物理機器５０１のハイパーバイザａから、仮想マシンの書き込み負荷を取得する。次に、マイグレーション制御装置１０は、ステップＳ１５で取得した仮想マシンの書き込み負荷が所定閾値より大であるか否かを判定する（ステップＳ１６）。マイグレーション制御装置１０は、仮想マシンの書き込み負荷が所定閾値より大である場合（ステップＳ１６：Ｙｅｓ）、ステップＳ１７へ処理を移す。一方、マイグレーション制御装置１０は、仮想マシンの書き込み負荷が所定閾値以下である場合（ステップＳ１６：Ｎｏ）、ステップＳ２５へ処理を移す。
【００７３】
ステップＳ１７では、マイグレーション制御装置１０は、ＳＳＤストレージ（物理機器３００）がアイドル中であるか否か、すなわち、“中継マイグレーション”により使用中であるか否かを判定する。マイグレーション制御装置１０は、ＳＳＤストレージ（物理機器３００）がアイドル中である、すなわち、“中継マイグレーション”により使用中でない場合（ステップＳ１７：Ｙｅｓ）、ステップＳ１８へ処理を移す。一方、マイグレーション制御装置１０は、ＳＳＤストレージ（物理機器３００）がアイドル中でない、すなわち、“中継マイグレーション”により使用中である場合（ステップＳ１７：Ｎｏ）、ステップＳ１７を繰り返す。
【００７４】
ステップＳ１８では、マイグレーション制御装置１０は、物理機器４０１（ＨＤＤストレージＡ）から物理機器４０２（ＨＤＤストレージＢ）への“中継マイグレーション”の“前半処理”として、物理機器４０１（ＨＤＤストレージＡ）から物理機器３００（ＳＳＤストレージ）への仮想ボリュームのボリュームマイグレーションをクラウドコントローラ２００に依頼する。クラウドコントローラ２００は、マイグレーション制御装置１０からの依頼を受け、物理機器４０１（ＨＤＤストレージＡ）から物理機器３００（ＳＳＤストレージ）への仮想ボリュームのボリュームマイグレーションを実行し、実行完了後に完了応答をマイグレーション制御装置１０へ送信する（ステップＳ１９）。
【００７５】
次に、マイグレーション制御装置１０は、ステップＳ１３で取得したタスク情報の「マイグレーション種別」が“ボリュームマイグレーション”であるか否かを判定する（ステップＳ２０）。マイグレーション制御装置１０は、ステップＳ１３で取得したタスク情報の「マイグレーション種別」が“ボリュームマイグレーション”である場合（ステップＳ２０：Ｙｅｓ）、ステップＳ２１へ処理を移す。一方、マイグレーション制御装置１０は、ステップＳ１３で取得したタスク情報の「マイグレーション種別」が“ボリュームマイグレーション”でない場合（ステップＳ２０：Ｎｏ）、ステップＳ２３へ処理を移す。
【００７６】
ステップＳ２１では、マイグレーション制御装置１０は、物理機器４０１（ＨＤＤストレージＡ）から物理機器４０２（ＨＤＤストレージＢ）への“中継マイグレーション”の“後半処理”として、物理機器３００（ＳＳＤストレージ）から物理機器４０２（ＨＤＤストレージＢ）への仮想ボリュームのボリュームマイグレーションをクラウドコントローラ２００に依頼する。クラウドコントローラ２００は、マイグレーション制御装置１０からの依頼を受け、物理機器３００（ＳＳＤストレージ）から物理機器４０２（ＨＤＤストレージＢ）への仮想ボリュームのボリュームマイグレーションを実行し、実行完了後に完了応答をマイグレーション制御装置１０へ送信する（ステップＳ２２）。ステップＳ２１が終了すると、マイグレーション制御装置１０は、ステップＳ２７へ処理を移す。
【００７７】
一方、ステップＳ２３では、マイグレーション制御装置１０は、物理機器４０１（ＨＤＤストレージＡ）から物理機器４０２（ＨＤＤストレージＢ）への“中継マイグレーション”の“後半処理”として、物理機器３００（ＳＳＤストレージ）から物理機器４０２（ＨＤＤストレージＢ）への仮想ボリュームのマイグレーション、及び、物理機器５０１（ハイパーバイザａ）から物理機器５０２（ハイパーバイザｂ）への仮想マシンのマイグレーションを含むブロックマイグレーションをクラウドコントローラ２００に依頼する。クラウドコントローラ２００は、マイグレーション制御装置１０からの依頼を受け、物理機器３００（ＳＳＤストレージ）から物理機器４０２（ＨＤＤストレージＢ）への仮想ボリュームのマイグレーション、及び、物理機器５０１（ハイパーバイザａ）から物理機器５０２（ハイパーバイザｂ）への仮想マシンのマイグレーションを含むブロックマイグレーションを実行し、実行完了後に完了応答をマイグレーション制御装置１０へ送信する（ステップＳ２４）。ステップＳ２３が終了すると、マイグレーション制御装置１０は、ステップＳ２７へ処理を移す。
【００７８】
他方、ステップＳ２５では、マイグレーション制御装置１０は、ステップＳ１３で取得したタスク情報の「マイグレーション種別」に応じて、“通常マイグレーション”として“ボリュームマイグレーション”又は“ブロックマイグレーション”をクラウドコントローラ２００に依頼する。クラウドコントローラ２００は、マイグレーション制御装置１０からの依頼を受け、“ボリュームマイグレーション”又は“ブロックマイグレーション”を実行し、実行完了後に完了応答をマイグレーション制御装置１０へ送信する（ステップＳ２６）。ステップＳ２５が終了すると、マイグレーション制御装置１０は、ステップＳ２７へ処理を移す。
【００７９】
ステップＳ２７では、マイグレーション制御装置１０は、ステップＳ１３で取得したタスク情報の「マイグレーション種別」が“ライブマイグレーション”であるか否かを判定する。マイグレーション制御装置１０は、「マイグレーション種別」が又は“ライブマイグレーション”である場合（ステップＳ２７：Ｙｅｓ）、ステップＳ２８へ処理を移す。一方、マイグレーション制御装置１０は、「マイグレーション種別」が“ライブマイグレーション”でない場合（ステップＳ２７：Ｎｏ）、ステップＳ３０へ処理を移す。
【００８０】
ステップＳ２８では、マイグレーション制御装置１０は、物理機器５０１のハイパーバイザａ上で動作する仮想マシンを、物理機器５０２のハイパーバイザｂ上へ移行する“ライブマイグレーション”をクラウドコントローラ２００に依頼する。クラウドコントローラ２００は、マイグレーション制御装置１０からの依頼を受け、“ライブマイグレーション”を実行し、実行完了後に完了応答をマイグレーション制御装置１０へ送信する（ステップＳ２９）。ステップＳ２８が終了すると、マイグレーション制御装置１０は、ステップＳ３０へ処理を移す。ステップＳ３０では、マイグレーション制御装置１０は、マイグレーション制御処理を終了するか否かを判定する。マイグレーション制御装置１０は、マイグレーション制御処理を終了する場合（ステップＳ３０：Ｙｅｓ）、マイグレーション制御処理を終了し、マイグレーション制御処理を終了しない場合（ステップＳ３０：Ｎｏ）、ステップＳ１３へ処理を移す。
【００８１】
なお、マイグレーション制御装置１０は、“ブロックマイグレーション”において“中継マイグレーション”を行う場合、ステップＳ１８の“前半処理”で仮想ボリュームのボリュームマイグレーションを依頼し、ステップＳ２３の“後半処理”で仮想ボリュームのマイグレーション、及び、仮想マシンのマイグレーションを含むライブマイグレーションを依頼するとした。しかし、これに限らず、マイグレーション制御装置１０は、“ブロックマイグレーション”において“中継マイグレーション”を行う場合、“前半処理”で仮想ボリュームのボリュームマイグレーション、及び、仮想マシンのマイグレーションを含むライブマイグレーションを依頼し、“後半処理”で仮想ボリュームのボリュームマイグレーションを依頼するとしてもよい。
【００８２】
（実施形態による効果）
実施形態は、仮想ボリュームへの書き込み負荷が高い仮想マシンのブロックマイグレーション及びボリュームマイグレーションの際に、先ず、移行元ＨＤＤストレージからＳＳＤストレージへ仮想ボリュームを移行する。そして、ＳＳＤストレージへ仮想ボリュームを移行完了後、ＳＳＤストレージから移行先ＨＤＤストレージへボリュームを移行する。これにより、実施形態は、マイグレーション対象のデータサイズが大きいブロックマイグレーション及びボリュームマイグレーションの処理の高速化を図ることができる。
【００８３】
また、移行元ＨＤＤストレージから移行先ＨＤＤストレージへ仮想ボリュームのマイグレーションを行う際に、マイグレーション中に新たにデータが更新される場合がある。移行元ＨＤＤストレージから移行先ＨＤＤストレージへの更新データの差分同期に関するデータ移行速度が、仮想マシンから移行元ＨＤＤストレージへのデータ書き込み速度以下であると、待ち行列理論に従い、差分同期を繰り返すことになり、マイグレーション完了までの処理時間が長時間化する。仮想マシンによる移行元ＨＤＤストレージへの書き込みが頻繁であればあるほど、マイグレーション完了までの処理時間は、より長時間化する。
【００８４】
これに対し、実施形態は、ランダムＩＯ性能がＨＤＤストレージと比較して十分高いＳＳＤストレージを使用する“中継マイグレーション”を行うことで、例えばランダムＩＯを行う更新データの差分同期に関するデータ移行速度を、仮想マシンから移行元ＨＤＤストレージへのデータ書き込み速度より速くできるため、マイグレーション完了までの処理時間を短縮できる。
【００８５】
また、実施形態は、ブロックマイグレーション及びボリュームマイグレーションの際に、ＳＳＤストレージをボリュームデータの中継に用い、通常時のデータ格納には用いない。このため、実施形態は、ＳＳＤストレージが大容量であることを要さず、例えば１つのアタッチボリュームのデータを格納できる容量であればよいため、ＨＤＤストレージと比べてサイズ当たりの単価が高いＳＳＤストレージを効率的に用い、ブロックマイグレーション及びボリュームマイグレーションの処理の高速化を図ることができる。
【００８６】
また、実施形態は、例えば１つのブロックマイグレーション又はボリュームマイグレーションに際して“中継マイグレーション”を行う場合に、“中継マイグレーション”で使用するＳＳＤストレージに対して排他制御を行って他の“中継マイグレーション”が同一のＳＳＤストレージを使用することを禁止する。このため、実施形態は、“中継マイグレーション”の際に用いられるＳＳＤストレージへのＩＯ負荷を軽減し、“中継マイグレーション”の効率をより高めることができる。
【００８７】
また、実施形態は、移行元ＨＤＤストレージへの書き込み負荷が所定閾値よりも大である場合に“中継マイグレーション”を行い、移行元ＨＤＤストレージへの書き込み負荷が所定閾値以下である場合に“通常マイグレーション”を行う。このように、実施形態は、書き込み負荷に応じてより処理時間がより短いマイグレーション方式を仮想マシン毎に適切に選択するため、ＳＳＤストレージを効率的に用いて、ブロックマイグレーション及びボリュームマイグレーションの処理の高速化を図ることができる。
【００８８】
（その他の実施形態）
実施形態は、“中継マイグレーション”にＳＳＤストレージを用いるとした。しかし、ＳＳＤストレージに限らず、ＨＤＤストレージより高いＩＯ性能を有する記憶デバイスであれば、“中継マイグレーション”に用いることができる。例えば、Nimble社のNimble  Storage（登録商標）は、ＣＡＳＬ（Cache  Accelerated  Sequential  Layout、登録商標、以下同様）と呼ばれるハイブリッド方式を採用している。ＣＡＳＬは、データの書き込み時は、先ずＳＳＤストレージへデータを書き込み、データを圧縮してシーケンシャルアクセスできる形式へ変換してＨＤＤストレージへ書き込むと同時に、データの一部をキャッシュメモリへ保存する。また、ＣＡＳＬは、データの読み込み時は、ＳＳＤストレージ及びキャッシュメモリを検索し、ヒットしない場合にＨＤＤストレージを検索してデータの応答を返す。これにより、ＣＡＳＬは、一般的なＳＳＤストレージと同程度以上のランダムＩＯ性能を実現しており、“中継マイグレーション”に用いることができる。これにより、様々な記憶装置を“中継マイグレーション”に用いて、例えば性能やコストの面から、柔軟にシステムを構築できる。
【００８９】
また、実施形態は、“中継マイグレーション”に用いるＳＳＤストレージは、１つであり、かつ、１つの仮想ボリュームを格納できる記憶容量であればよいとした。しかし、“中継マイグレーション”に用いるＳＳＤストレージは、複数設けてられてもよいし、複数の仮想ボリュームを格納できる記憶容量であってもよい。これにより、複数の“中継マイグレーション”を並行して実行できる。
【００９０】
また、実施形態は、ボリューム書き込み負荷が高い仮想マシンのブロックマイグレーション及びボリュームマイグレーションを行う場合に、“中継マイグレーション”を行うとした。しかし、ブロックマイグレーション及びボリュームマイグレーションを行う場合には、ボリューム書き込み負荷の高低に関わらず、“中継マイグレーション”を行うとしてもよい。
【００９１】
また、実施形態は、マイグレーション対象の移行元及び移行先のストレージがＨＤＤストレージであるとした。しかし、マイグレーション対象の移行元又は移行先のストレージが、ＨＤＤストレージよりもＩＯ性能が高い記憶デバイスであってもよい。例えば、ブロックマイグレーション及びボリュームマイグレーションを行う際に、マイグレーション対象の移行元又は移行先のストレージの種別がＨＤＤストレージであるか、ＨＤＤストレージよりもＩＯ性能が高い記憶デバイスであるかを判定する。または、“中継マイグレーション”に用いるＳＳＤストレージと、移行元及び移行先のストレージとで、各ＩＯ性能を比較する。
【００９２】
そして、移行元及び移行先のストレージがＨＤＤストレージである場合、あるいは、“中継マイグレーション”に用いるＳＳＤストレージのＩＯ性能が、移行元又は移行先のストレージのＩＯ性能よりも高い場合に、書き込み負荷に応じて“中継マイグレーション”を行うよう制御してもよい。また、移行元又は移行先のストレージがＨＤＤストレージよりもＩＯ性能が高い記憶デバイスである場合、あるいは、“中継マイグレーション”に用いるＳＳＤストレージのＩＯ性能が、移行元又は移行先のストレージのＩＯ性能以下である場合に、“通常マイグレーション”を行うよう制御してもよい。これにより、移行元又は移行先のストレージのＩＯ性能に応じて“中継マイグレーション”の対象を絞り込み、より効率的に“中継マイグレーション”を行うことができる。
【００９３】
（マイグレーション制御装置の装置構成について）
図１に示すマイグレーション制御装置１０の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、マイグレーション制御装置１０の機能の分散及び統合の具体的形態は図示のものに限られず、全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散又は統合して構成することができる。
【００９４】
また、マイグレーション制御装置１０において行われる各処理は、全部又は任意の一部が、ＣＰＵ（Central  Processing  Unit）等の処理装置及び処理装置により解析実行されるプログラムにて実現されてもよい。また、マイグレーション制御装置１０において行われる各処理は、ワイヤードロジックによるハードウェアとして実現されてもよい。
【００９５】
また、実施形態及びその他の実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともできる。もしくは、実施形態において説明した各処理のうち、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記及び図示の処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて適宜変更することができる。
【００９６】
（プログラムについて）
図５は、プログラムが実行されることにより、マイグレーション制御装置が実現されるコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。コンピュータ１０００において、これらの各部はバス１０８０によって接続される。
【００９７】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１０４１に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１０５１、キーボード１０５２に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１０６１に接続される。
【００９８】
ハードディスクドライブ１０３１は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、マイグレーション制御装置１０の各処理を規定するプログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュール１０９３として、例えばハードディスクドライブ１０３１に記憶される。例えば、マイグレーション制御装置１０における機能構成と同様の情報処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０３１に記憶される。
【００９９】
また、実施形態での処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０３１に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０３１に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【０１００】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０３１に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１０４１等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３やプログラムデータ１０９４は、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【０１０１】
以上の実施形態及びその他の実施形態は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０１０２】
１  システム
２  ユーザ端末
３  オペレータ端末
１０  マイグレーション制御装置
１１  受付部
１２  マイグレーション種別判定部
１３  仮想マシン負荷判定部
１４  マイグレーション制御部
２０  マイグレーションスケジューリングＤＢ
２０ａ  スケジューリングテーブル
１００  マイグレーション制御システム
２００  クラウドコントローラ
２０１  制御部
２０２  クラウドコントローラＤＢ
３００  物理機器（ＳＳＤストレージ）
３００ａ、４０１ａ〜４０４ａ  仮想ボリューム
４０１  物理機器（ＨＤＤストレージＡ）
４０２  物理機器（ＨＤＤストレージＢ）
４０３  物理機器（ＨＤＤストレージＣ）
４０４  物理機器（ＨＤＤストレージＤ）
５０１  物理機器（ハイパーバイザａ）
５０２  物理機器（ハイパーバイザｂ）
５０３  物理機器（ハイパーバイザｃ）
５０４  物理機器（ハイパーバイザｄ）
５０１ａ〜５０４ａ  仮想マシン
１０００  コンピュータ
１０１０  メモリ
１０２０  ＣＰＵ
【図１】
2017004467.tif 000003
【図２】
2017004467.tif 000004
【図３】
2017004467.tif 000005
【図４】
2017004467.tif 000006
【図５】
2017004467.tif 000007