前田 裕貴,飯島 徹
日本ヒューレット・パッカード

 稼働中の仮想マシンを,異なる物理マシンへ移動(マイグレーション)させるホット・マイグレーション技術は大変便利である。負荷が重くなった仮想マシンを高性能な物理マシンに移して対処するといったことが,ダウンタイムなしに実行できる。

 VMware Infrastructure 3(VI3)では,当初からホット・マイグレーション技術としてVMotionという機能が利用できた。この機能で一つの共有ストレージ上にある仮想マシンを二つのサーバー間で稼働させたまま移動させられる。それに対してVI3 v3.5では仮想マシンを二つのストレージ間で稼働させたまま移動させる「Storage VMotion」という技術が利用可能になっている。ここでは,それぞれの技術の仕組みと利用方法を解説したい。

サーバーを動的に切り替えるVMotion

 まず,VMotionについて説明しよう。これは先ほど説明したように,「あるサーバーで実行中の仮想マシンを,稼働させたまま別のサーバーに移動する」という機能である。後述するように,VMotionで仮想マシンを移動するとき,実際にはシステムのサービスが停止するものの,その時間は非常に短い。そのため,システム利用者はVMotionによる停止時間をほとんど意識することはない。

 VMotionは基本的には,移動させる仮想マシンの情報を別のサーバーにコピーすることで実現している。

 まず図1のように,移動元と移動先のサーバーを共有ストレージで接続することによって,ストレージ上の情報についてはコピーを不要にしている。共有ストレージではSAN,iSCSI,NFSのいずれかで保存されている。SAN, iSCSIの場合は,共有ストレージにはVMware独自のVMFSというクラスタ・ファイル・システムが,NFSの場合はNFSそのものを利用することで,各サーバー間のロック管理が行えるようになっている。

図1●VMotionのシステム構成と実行時のイベント
図1●VMotionのシステム構成と実行時のイベント
[画像のクリックで拡大表示]

 一方,サーバー上のメモリーやCPUの中の情報については,高速のVMotion専用ネットワークでコピーする。少なくない量を処理するため,VMotionの専用ネットワークはギガビット・イーサネットで構成する必要がある。

 実際の処理は以下に示す3ステップである。

・ステップ1
VMotionが要求されると,管理ツールのVirtualCenterによって,対象の仮想マシンが現在のサーバー上で正しく機能していることが確認される。

・ステップ2
対象となる仮想マシンの状態情報を,移動先サーバーにコピーする。仮想マシンの状態情報には,ネットワーク接続情報を含む全メモリー情報と,レジスタなどプロセッサにかかわる全情報が含まれる。

・ステップ3
移動先サーバーで,対象となる仮想マシンの活動を再開させる。

 なお,VMotion中にエラーが発生した場合,仮想マシンはVMotion実行前の状態に戻される。

メモリーのスナップショットをコピーに利用

 上述したステップのうち,仮想マシンの状態情報を移動先サーバーにコピーする部分を,図1を使ってもう少し詳しく説明すると以下のようになる。

(1)移動元のESX02で,仮想マシンTestSrvに割り当てられたメモリーのスナップショットが取られ,NIC2を介してESX01に送信される。例えば,TestSrvに512Mバイトのメモリーを割り当てていたときは,512Mバイト分のデータをネットワーク経由で送信する。この後,ESX01ではメモリー・スナップショットとTestSrv用の仮想ディスクを使って,TestSrvを活動させるための準備を開始する。

(2)メモリーのスナップショットを送信した後も,ESX02上で稼働しているTestSrvはクライアントPCからの要求に応じ続けている。スナップショット送信後に変更されたTestSrvのメモリーの差分情報を含む仮想マシンの状態情報が,ESX02からESX01にNIC2を介して送信される。ESX01では,(1)の時点で準備したTestSrvに,その後ESX02から送られてきた仮想マシン状態情報を加えて,TestSrvの最新状態を作り出す。ESX01上のTestSrvが最新状態になったら,ESX02は自身で稼働しているTestSrvの活動を停止させ,ESX01は自身の上のTestSrvの活動を開始する。

(3)ESX01はNIC1を介して,送信元と送信先が共にTestSrvのMACアドレスとなっているRARP(Reverse Address Resolution Protocol)パケットをネットワーク上に送信する。これにより,ESX01のNIC1がつながっているネットワーク・スイッチに対して,TestSrvのMACアドレス・テーブルを更新するよう促され,TestSrvのMACアドレスをあて先とするパケットは,ESX01のNIC1に向かうようになる。