kvmでストレージパスを変更してのライブマイグレーション
やりたいことがタイトルで表現できているかどうか謎ですが、概要は以下の通りです。
目次
何をやりたいのか
- KVM Host A(以下HA)からKVM Host B(以下HB)にGuest X(以下、GX)をライブマイグレーションしたい
- その際、ストレージパス(ディスクパス)を変更したい
- 例えば以下のようなケース
- HAではGXのストレージが/path/to/gx.imgだったとする
- HBではGXのストレージを/path/to/gx2.imgとしたい、というケース
- ストレージパスが変わる、ということはつまり(ほとんどの場合は)「共有ストレージを用いたライブマイグレーションを行わない」ということ
- 例えば以下のようなケース
上記ができると何がうれしいのか?
例えば
とか。
アプローチ
具体的な手順
冒頭の「何をやりたいのか」の例を当てはめつつ説明します。
1. 移行先ホストで、移行先ストレージを用意する
例では以下になります。
- HB上で/path/to/gx2.imgを用意する
2. 移行元ホストで移行対象の仮想マシン定義を出力、移行先用に書き換える
例では以下になります。
- HA上でGAの仮想マシン定義をdumpする(virsh dumpxml 仮想マシン名 > ダンプ先ファイル名)
- 移行先用に仮想マシン定義を編集する(上記の「ダンプ先ファイル名」で指定したファイルを編集する)
- 編集内容は「ストレージパスの書き換え」
- 例えば以下のようなこと
(snip) <domain type='kvm' id='X'> (snip) <devices> (snip) <disk type='block' device='disk'> (snip) - <source dev='/path/to/ga.img'/> + <source dev='/path/to/ga2.img'/> (snip) </disk> (snip) </devices> (snip) <domain type='kvm' id='X'>
ここでは「ダンプ先ファイル名」をga.xmlとします。
3. マイグレーション!
例では以下になります。
コマンドにするならこんな感じ
HA# virsh migrate --live --persistent --copy-storage-all --verbose --xml ga.xml GuestA qemu+ssh://HB/system
これでライブマイグレーションできるはず。
注意点
いろいろ問題点があります。
- 長い時間、ストレージとネットワークに負荷がかかり続ける
- ストレージ内容をネットワーク経由で全部コピーすることになるので、シンプルにやるならこの特性はやむなし
こんなもんだろうか…。
しかしとりあえず、時間がかかっても「止めずに、別ストレージパスに移行できる」というのはかなりメリットな気がする。