1台のPCでLiveMigrationをやってみた(1)

LiveMigrationは物理ノード間で共有しているVMを、VMを停止すること無く移動する技術で、LinuxでもXen, KVMを通じて機能を提供している。

通常、LiveMigrationには少なくとも2台の物理ノードが必要だが、PCが1台しか調達できない場合でも、1台のPCにKVMを導入し、そこでDom0 2つを仮想化ノードとして動かし、更にその上のDomUでLiveMigrationを行うという方針で、1台のPCでLiveMigrationを試してみた。

Dom0をKVM上で動かせる件に付いては、こちらのブログを参照。
http://d.hatena.ne.jp/Akkiesoft/20090531/1243703498

筆者はKVMノード Fedora12 64bit版, Dom0, DomUをCentOS5.4 32bit版として実施してみた。この構成でLiveMigrationまで上手く実施できたので、構築手順をここに貼っておく。。


いきなりで何だが、KVMでのVM構築までは既に何度か書いているので、詳しくは書かない。。(というかvirt-managerで作るだけなので、あまり書くことがない。 orz ) Dom0の構築も、CentOS5.4のDVDから普通にインストールを行い、 その後

# yum groupinstall "Virtualization"

で実施できた。
※ ただし、Dom0カーネルの起動のためには、カーネルオプションとして、 "noapic" が必要となった。。また、virtio_blkは持っていないため、virtioディスクは使えない。

その後、Dom0 2台で cman, clvmd, gfs2, iSCSIの構成を行い、8GBのLUNを /var/lib/xen/images にGFS2でマウントした。(Red Hat Cluster Suite の設定等はこちらを参照。。 ==> http://d.hatena.ne.jp/aaabbb_200904/20090606/1244286945 )
iSCSIターゲットは、 ホストOS Fedora12の scsi-target-utils を使用した。。
ちなみに、GFS2(というかGFS)の使用は必須ではなく、NFS等でもLiveMigrationは実施できるようなので、念のため。後でフェイルオーバー等も試してみたかったので、今回はGFSをつかってみた。


この状態で、片方のDom0のvirt-manager にて、/var/lib/xen/images 以下にCentOS5.4のインストールを行い(100MBit NICなのでとても時間がかかる。。)、、両Dom0から交互に停止・起動を行い、両Dom0から

# virsh start testvm1

が上手くいくことを確認した。(testvm1はテスト用のVMの名前) ただし、事前に/etc/xen/testvm1 を両側で同期しておく必要がある。(/etc/xen/testvm1 は割り当てメモリなど、VMの作成に必要な情報が書いてある。)

ここまでの設定に加え、構築したVMのLiveMigrationを行うには次のリンク先の4項目について、/etc/xen/xend-config.sxp を変更しておく必要がある。
http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.4/html/Virtualization_Guide/sect-Virtualization-Xen_live_migration-Configuring_guest_live_migration.html

変更後、両側から TCP 8002番ポートに疎通できることを確認したら、 testvm1が起動している方のDom0で、

# xm migrate --live testvm1 相手側のホスト名

と打つことで、migrationが行われる。--live をつけておくと、移動している最中も他ノードからのpingが途切れないことがわかる。。

ちなみに、migration 中に受け側のDom0で、

# xm list

を打つと、移動してくるVMのメモリ割り当てが増えていく様子が分かる。ノード名が異なるのだが、一応実際にやってみたログも貼っておく。。 centos-virt17(Dom0)からcentos-virt18(Dom0)に、centos-xen-virt1(DomU)を移動した場合である。centos-virt18で、centos-xen-virt1 の使用メモリが増えていっているのがわかる。

centos-virt17:
[root@centos-virt17 ~]# xm migrate --live 1 centos-virt18


centos-virt18:
[root@centos-virt18 ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      879     2 r-----     68.2
[root@centos-virt18 ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      491     2 r-----     71.6
centos-xen-virt1                           1       46     0 -bp---      0.0
[root@centos-virt18 ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      491     2 r-----     76.4
centos-xen-virt1                           1      173     0 -bp---      0.0
[root@centos-virt18 ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      491     2 r-----     80.6
centos-xen-virt1                           1      290     0 -bp---      0.0
[root@centos-virt18 ~]# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      491     2 r-----     84.6
centos-xen-virt1                           1      368     0 -bp---      0.0
[root@centos-virt18 ~]# 


尚、実際に試してみたところ、TCP接続が必要なサービス(httpd, sshd)については、migrate中に上手く動作しない事象が発生したが、おそらくNICの高負荷でTCP接続が上手く通じなかったものと思われる。( Dom0でvirtio_net が使えれば状況は改善されそうなのだが。。 )

一応PCが複数台無くてもLiveMigrationは試せることが分かったので、LiveMigrationを試してみたい人は是非。。