RHEL6からストレージライブマイグレーションがサポートされたようです。CentOS6.3どうしで行いました。
OpenStackやらAWSなどの巷ではブロックマイグレーションとも言うらしいですね。
ホスト名の定義
- source.example.com: ライブマイグレーション元となるKVMホストOS
- dest.example.com: ライブマイグレーション先となるKVMホストOS
- virtual.example.com: ライブマイグレーションを行う仮想マシン
source#
をマイグレーション元、dest#
をマイグレーション先とします。
イメージサイズを調べる
source# cd /var/lib/libvirt/images/ source# ls -l | grep virtual -rw-r--r-- 1 qemu qemu 104857600000 6月 10 18:16 2012 virtual.example.com.img
ターゲットホストに寸分違わぬイメージファイル領域を確保します。
以下の例はext4ファイルシステムを採用している場合に限ります。
dest# cd /var/lib/libvirt/images/ dest# fallocate -l 104857600000 virtual.example.com.img dest# virsh pool-refresh default ← たぶんいらない プール default がリフレッシュされました
ext3等の古いファイルシステムを使用している場合は dd
コマンドで地道にイメージファイルを作成します。
ブロックサイズを小さくし過ぎるといつまでたっても終わらないのでなるべく大きめにとります。
dest# dd if=/dev/zero of=/var/lib/libvirt/images/virtual.example.com.img bs=10485760 count=10000 dest# virsh pool-refresh default ← たぶんいらない プール default がリフレッシュされました
iptablesの終了
dest# service iptables stop
ストレージライブマイグレーションの実行
一時的に/etc/hostsファイルに以下の記述を追加します。
source# vi /etc/hosts ... xxx.xxx.xxx.xxx dest.example.com
この記述を追加しない場合、以下のようなエラーが出る可能性があります。
エラー: unable to connect to server at 'dest.example.com:49152': Connection refused
ストレージライブマイグレーションを実行します。
source# virsh migrate --live --copy-storage-all --persistent --verbose virtual.example.com qemu+ssh://xxx.xxx.xxx.xxx/system root@xxx.xxx.xxx.xxx's password: ← rootパスワードをキーイン ...(しばらくかかる)...
オプションの説明をします。
- –live
- ライブマイグレーションします。
- –copy-storage-all
- ストレージをすべてまるまるコピーします。
- –persistent
- 転送先に自動的にxml定義ファイルを定義します。特に理由のない限りはこれを指定します。指定しないと仮想マシンを落とした時に立ちあげられなくなります。
- –verbose
- 現在のマイグレーション進捗状況を表示します。ディスクサイズが大きいのでこれがないとどれぐらい進んだのかわからなくて不安になります。
ローカルネットワーク内の転送で10GBのイメージファイルでおよそ5分といったところです。
マイグレーションが完了するとsourceのVMが停止し、自動的にdestのVMが開始されます。
ただし、インターネットを越えて転送すると10GBあたり1時間もかかります。
さらに、安いプロバイダ上でこのような巨大なトラフィックを流すと一瞬で警告のメールが来て最悪の場合には契約が解消されてしまうおそれがあるので、こういったクリティカルな用途には上位のプロバイダを契約されることを強く推奨します。
エラー: Unsafe migration: Migration may load to data corruption if disks use cache != noneと出る場合
- [VirtIO Disk1]->[Performance options]->[Advanced options]
- キャッシュモデル: none
- IO mode: default
に設定の上、再起動してください。
ライブマイグレーション後のXML生成
virsh migrate
時に --persistent
オプションをつけていれば以下の操作は必要ありません。
転送先に自動的にxml定義ファイルが作成されます。
ライブマイグレーションしただけだとXMLファイルがdestに配置されません。
何かの拍子にシャットダウンしてしまうと仮想マシンマネージャーのエントリから消滅します。
消滅させてしまった場合はsourceからdestにXMLファイルをコピーしてください。
source# scp /etc/libvirt/qemu/virtual.example.com.xml root@xxx.xxx.xxx.xxx:/etc/libvirt/qemu/ dest# cd /etc/libvirt/qemu/ dest# virsh define virtual.example.com.xml ドメイン virtual.example.com が virtual.example.com から定義されました
仮想マシンが生きているうちでしたら以下のコマンドでXMLファイルを生成することができます。
dest# cd /etc/libvirt/qemu/ dest# virsh dumpxml virtual.example.com > virtual.example.com.xml dest# virsh define virtual.example.com.xml ドメイン virtual.example.com が virtual.example.com から定義されました
参考
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート