めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

RHEL6.1のKVMでストレージ・ライブマイグレーション

表題の動作確認が取れました。公式マニュアルには手順の記載はありませんが、virshコマンドから実行可能です。

2012/10/11追記
残念ながら、この機能はRHEL6では正式サポートされない事が決定しました。この記事ではRHEL6.1を使用していますが、RHEL6.2以降では、そもそもこの機能が利用できなくなっている可能性もあります。m(_ _)m

ここでいうストレージ・ライブマイグレーションとは

共有ディスクを持たない2台のKVMホスト間で、ゲストのライブマイグレーションを行う機能です。仮想マシンのメモリイメージに加えて、ローカルディスク上のディスイメージをネットワーク経由でコピーすることで、これを実現しています。

利用手順

RHEL6.1のKVMホストを2台用意します。物理CPUの互換性の確認、仮想マシンが接続する仮想ネットワークを共通に構成するなど、(共有ディスクを使用すること以外については)通常のライブマイグレーションと同等の事前準備をしてください。ここでは、2台のホストをkvmhost01, kvmhost02とします。

特に、iptablesによるフィルタリングを外しておくことを忘れないようにしてください。マイグレーションに使うポート番号の指定も可能ですが、ここでは、簡単のためにkvmhost01とkvmhost02の間では、フィルタリング行わない設定をしておきます。

targeted modeのSELinuxはEnableのままでOKです。

マイグレーションの手順は次のとおりです。

1. kvmhost01にゲストOSをインストールして起動しておきます。仮想マシン名はRHEL61、ディスクイメージは/var/lib/libvirt/images/rhel61.imgとします。

2. kvmhost02にコピー先となる空のディスクイメージを用意します。イメージサイズを事前に揃える必要があるので注意してください。

まずコピー元のイメージサイズを確認します。

[root@kvmhost01 ~]# ls -l /var/lib/libvirt/images/rhel61.img 
-rw-------. 1 qemu qemu 8589934592 11月 24 11:55 2011 /var/lib/libvirt/images/rhel61.img

同じサイズの空ファイルを同一のパスに作成して、ストレージプールに認識させます。

[root@kvmhost02 ~]# fallocate -l 8589934592 /var/lib/libvirt/images/rhel61.img
[root@kvmhost02 ~]# virsh pool-refresh default
プール default がリフレッシュされました

※この作業は初回のみ必要です。2回目以降は、両方のホストに同一サイズのイメージが残っているので、そのままでマイグレーションし放題です。

3. マイグレーション元のホストでvirshコマンドからマイグレーションを実行します。

オプション--copy-storage-allを指定する以外は、通常のライブマイグレーションと同じです。

[root@kvmhost01 ~]# virsh migrate --live --copy-storage-all RHEL61 qemu+ssh://kvmhost02/system
root@kvmhost02's password:   <--- kvmhost02のパスワード入力

1GbE直結の環境で8GBのディスクイメージを転送するのに4分程度の時間でした。ゲスト上で激しくI/Oしている場合は、当然、時間は長くなると予想されます。