ライブマイグレーション

ライブマイグレーション機能が組み込まれたstable版カーネルが見つからなかったので、
devel版の2.6.18-ovz028test003.1で試してみました。

<- すでに提供されている安定版のカーネル(2.6.9-023stab032.1)でも機能が実装されているようです。


2台のopenvz化したサーバnode1、node2を用意して、node1にVEを動かします。
VEIDは101にします。


node1: 192.168.0.1
vps1 : 192.168.0.101


node2: 192.168.0.2

node1の様子は以下のような感じです。


[root@node1 ~]# vzlist
VEID NPROC STATUS IP_ADDR HOSTNAME
101 19 running 192.168.0.101 -


マイグレーションするにあたって、node1からnode2にrootでsshの公開鍵認証が可能な状態にします。


[root@node1 ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
b0:40:13:fc:f5:a7:4b:48:ca:c6:5c:eb:9c:89:e0:5d root@node1


※~/.ssh/配下にid_dsa(秘密鍵)、id_dsa.pub(公開鍵)の2つのファイルができ
る。


[root@node1 ~]# cat id_dsa.pub |ssh root@192.168.0.2 'cat >>
~/.ssh/authorized_keys'


※node2(192.168.0.2)の/root/.ssh/authorized_keysにnode1の公開鍵を追記しています。

準備ができたらnode1からライブマイグレーションを実行します。
転送先のハードウェアノードに転送するVEIDが存在していてはいけません。


vzmigrate --onine <転送先のハードウェアノードのIPアドレス> <転送するVEID>


[root@node1 ~]# vzmigrate --online 192.168.0.2 101
OPT:--online
OPT:192.168.0.2
Starting online migration of VE 101 on 192.168.0.2
Preparing remote node
Initializing remote quota
Syncing private
Live migrating VE
Syncing 2nd level quota
Cleanup

拍子抜けするくらいあっさり終了しました。
マイグレーション中にVEにpingを打っていたのですが、マイグレーション終了間近で2パケットほど
ロスしています。tcpdumpをしてみると、gratuitous ARPが飛んでいるかもしれません。

データの同期にはどうやらrsyncを使っているようです。


[root@node1 ~]# top

Tasks: 60 total, 2 running, 58 sleeping, 0 stopped, 0 zombie
Cpu(s): 40.0% us, 35.0% sy, 0.0% ni, 11.0% id, 0.0% wa, 1.0% hi, 13.0% si
Mem: 253024k total, 249400k used, 3624k free, 20248k buffers
Swap: 524280k total, 576k used, 523704k free, 192748k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19180 root 16 0 7484 2680 1832 R 45.7 1.1 0:25.32 sshd
19209 root 15 0 3868 2108 172 S 30.8 0.8 0:15.19 rsync

追記

ご指摘を頂いたので一部修正。
安定版のカーネルでもライブマイグレーションできます。
ただマイグレーションを繰り返すと失敗し、少々不安定のようです。


[root@node1 ~]# vzmigrate --online 192.168.0.2 101
OPT:--online
OPT:192.168.0.2
Starting online migration of VE 101 on 192.168.0.2
Preparing remote node
Initializing remote quota
Syncing private
Live migrating VE
Failed to dump VE

ログ(/var/log/vzctl.log)をみると、checkpointingで失敗しているようです。


2006-11-29T09:37:52+0900 vzctl : VE 101 : Setting up checkpoint...
2006-11-29T09:37:52+0900 vzctl : VE 101 : suspend...
2006-11-29T09:37:52+0900 vzctl : VE 101 : get context...
2006-11-29T09:37:52+0900 vzctl : VE 101 : Checkpointing completed succesfully
2006-11-29T09:37:52+0900 vzctl : VE 101 : Setting up checkpoint...
2006-11-29T09:37:52+0900 vzctl : VE 101 : join context..
2006-11-29T09:37:52+0900 vzctl : VE 101 : dump...
2006-11-29T09:37:52+0900 vzctl : VE 101 : Can not dump VE: Invalid argument
2006-11-29T09:37:52+0900 vzctl : VE 101 : Checkpointing failed
2006-11-29T09:37:52+0900 vzctl : VE 101 : Resuming...

2006-11-29T10:12:37+0900 vzctl : VE 101 : WARNING: Settings were not saved and will be resetted to original values on next start (use --save flag)

VEをリスタートすると、成功します。


[root@node1 ~]# vzctl restart 101
Restarting VE
Stopping VE ...
VE was stopped
VE is unmounted
Starting VE ...
VE is mounted
Adding IP address(es): 192.168.0.2
Setting CPU units: 1000
VE start in progress...
[root@centos1 ~]# vzmigrate --online 192.168.0.2 101
OPT:--online
OPT:192.168.0.2
Starting online migration of VE 101 on 192.168.0.2
Preparing remote node
Initializing remote quota
Syncing private
Live migrating VE
Syncing 2nd level quota
Cleanup

devel版カーネル2.6.18-ovz028test003.1だとマイグレーションを繰り返しても問題ないので、やはりカーネルが原因のようです。