こんにちは。
アドウェイズのネットワーク・サーバインフラを担当している畠山です。
初めての投稿になります。よろしくお願いします。


仮想化、という言葉が世間でもかなり一般的になってきました。
アドウェイズでも、開発環境などで VMWare や Xen を利用しています。まだ、社内で統一して利用するものが決まっていないので、個々に手探りで使っている状態です。

そんな中、3月末にCitrix社の提供するXenServerが無償化されました。
これは、オープンソースの仮想化技術 "Xen" をベースに開発されているプロダクトです。オープンソース版よりも改良されているため、動作が安定していて、かつ直感的な操作が行えるものとなっています。しかも、今回の無償化に際して機能が削られていないため、VMWare Server などの競合する仮想化プロダクトにはない機能が利用できます。

そのうちの一つが、ライブマイグレーション (Xen Motion) という機能です。



■ ライブマイグレーションとは

ライブマイグレーションとは、動作中の仮想マシンを止めることなく別の物理マシンに移動させる (マイグレーション) 技術です。
2台の物理マシン A, B から参照できる共有ストレージを用意し、そのストレージに仮想マシンのイメージを保存します。そして、サーバ A にストレージをマウントし仮想マシンを起動させると、仮想マシンは A のメモリ上で動作し、データを共有ストレージに保存します。ここで、仮想マシンをサーバ B に移動させる操作 (ライブマイグレーション) を実行すると、サーバ A のメモリがリアルタイムにサーバ B にコピーされ、切替ができる状態になった時点で引き継がれるという仕組みです。

これを活用できれば、物理マシンの障害時・メンテナンス時も無停止!という夢のような話が実現できるかもしれません。しかもお金をかけることなく。
こんなにすごい技術を試さないはずがありません!

そこで今回、社内に余っていたPCを利用して、ライブマイグレーションの検証をしてみました。



■ 検証環境

XenMotion-構成図








  1. 同機種のメーカー製PC 3台を物理マシンとして利用
    CPU: Pentium4 2.8GHz (intel-VT 非対応)
    RAM: 1〜4GB (容量はバラバラ)
  2. それぞれ、OSをセットアップして利用できるようにする
    "xentest-1","xentest-2" : XenServer 5をインストール
    "nfsserver-1" : CentOS 5.0をインストール、NFSを設定
  3. 操作は全てXenCenterから行う
    リソースプール"TestPool"を作成し、"xentest-1","xentest-2"を追加しておく
    "TestPool"に、ストレージとして"nfsserver-1"を追加しておく
    "xentest-1"をホームとした仮想マシン"mig-test"をNFS上に作成する
    • VCPU: 1
    • RAM: 256MB
    • HDD: 8GB
    • OS: CentOS 5.2
  4. "mig-test"にはXenServer Toolsをインストールしておく

マイグレーションするためには、共有ストレージに仮想マシンのイメージを置き、移動元・移動先から参照できるようにしておく必要があります。そのため、今回はNFSで共有ストレージを構築しています。
また、現在のXenServerがサポートするマイグレーションは、「移動元と移動先で物理マシンのCPUのモデルが同じでなければならない」という制約があるようなので、同機種のPCを利用しました。でも、社内にあったPCなのでスペックはそんなに高くありません。ハードディスク・メモリの容量もバラバラ、CPUもシングルコアでかろうじてHTに対応してだけですが、この検証環境でマイグレーションなんてできるんでしょうか。



■ 仮想マシンのマイグレーション

準備が整ったところで、早速仮想マシンのマイグレーションを試してみました。

XenCenter上で、"mig-test"のメニューから [Migrate] を選択、移動先を選択するだけで操作は完了です。

XenMotion-操作イメージ








操作後、わずか30秒足らずでマイグレーションが行えました。使用した物理マシンは2年前のPCですが、それでもしっかり動作しました。
もちろん、マイグレーションを行っても、仮想マシンへのSSH接続などは切断されません。動作も止まることなく、ずっと動き続けています。
これは、実際に見ると感動しますね!

興奮して、思わず数回マイグレーションを行ったのですが、移動は毎回26〜27秒でした。
仮想マシンのメモリを512MBにしたところ、マイグレーションの所要時間が50秒だったので、移動の所要時間は仮想マシンのメモリ量で決まるようです。今回は、各マシンにethが1つずつしかなかったため、他のトラフィック (NFSやXenCenterとの通信) が影響して時間がかかっていた可能性もあります。ネットワーク環境次第ではもっと早くなるのかもしれません。

ただし、若干不思議な挙動もありました。
移動後にマイグレーション先で仮想マシンをシャットダウンをしようとしたところ、正常に終了できずにフリーズするケースがありました。これは、"smartd"など仮想マシン環境では不要なdaemonが応答待ちになっていたことが原因だったため、daemonを起動しないように設定することで回避できました。ちなみに、シャットダウンした仮想マシンは、仮想マシンの"HomeServer"として設定されている物理マシンのインベントリに表示されるようになります。
また、移動後に仮想マシンで top コマンドを実行すると、全プロセスのCPU使用率が99.9%と表示されたり、時間が止まったりするケースがありました。これは、移動元と移動先の物理マシンの内部時計の不一致が原因かもしれません。仮想マシンは、稼動している物理マシンの時刻を元に動作するため、仮想マシンの時刻が物理マシンの時刻よりも進んでしまっている場合などに時刻が止まる現象が発生するようです。



■ 物理マシンのシャットダウン

物理マシン上で動作する仮想マシンをすべて移動させることができたら、その物理マシンをシャットダウンしたくなります。
そこで、物理マシンのシャットダウンについても試してみました。

物理マシンのシャットダウンの場合は、物理マシンがリソースプールのマスタかどうかが重要となります。マスタの場合は、他のホストにマスタを委譲する必要が生じます。
また、物理マシン上で稼動している仮想マシンを、同じリソースプールの他の物理マシンにマイグレーションするか、リソースが足りない場合はサスペンドをする必要があります。
このようにリソースプールから一時的に外せる機能として"Maintenance Mode"が実装されています。

こちらもマイグレーションと同様に、簡単なマウス操作で"Maintenance Mode"に移行し、仮想マシンを止めないまま物理マシンのシャットダウンを行うことができます。
もちろん、一時的に移動した仮想マシンを切り戻す操作も簡単に行えます。これは便利ですね。



今回はNFSを使っての簡易的な実験だったのですが、それでも思ったよりも高速にマイグレーションができて驚きました。
今後も引き続き、複数の仮想マシンを同時に稼動させた場合の負荷や、iSCSIなど他の構成における検証を行っていきたいと思います。