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を試してみたい人は是非。。