VMマイグレーション

前提条件

  • マイグレーションの種類には、「通常?のライブマイグレーション」と「ストレージマイグレーション」がある
    • 通常のライブマイグレーションの場合、iSCSI や NFS などでディスク領域を母艦同士で共有しておく必要がある
    • ストレージマイグレーションの場合は、母艦同士でストレージを共有しておく必要はない
  • 母艦が Ubuntu 12.04 から Ubuntu 14.04, Ubuntu 16.04 に移行する場合、バグで移行できないので、「仮想 HDD の dd マイグレーション後、移行先母艦で新たに VM を定義する」という方法を取る
  • 移行元ホストから移行先ホストに ssh 接続できること(virsh で ssh 接続するため)

ストレージマイグレーション全体の流れ

  1. 移行先母艦上で、移行元母艦と同じサイズのディスクを移行先母艦に用意
  2. 移行元母艦上で、移行元母艦にすでに定義されている VM 定義ファイルを移行用の VM 定義ファイルとして流用(virsh dumpxml <vm 名>)
  3. 移行元母艦上で、移行用の VM 定義ファイルを移行先ホストに合わせて、ディスクパスを合わせたりする
  4. 移行元母艦上で、virsh でストレージマイグレーションコマンドを発行

ストレージマイグレーション手順(コマンド例)

  • ここでは例として <A> から <B> に <VM> を移行する手順を示す
  1. 事前準備のため、移行先ホストに移行元ホストにあるディスクと同じサイズのディスクを準備する
    • webvirtmgr でディスクを用意
    • 作成した後に、 <B> 上で /dev/guest-vm/<VM> などディスクが作成済みであることを確認する
  2. 移行元ホストにログインして、仮想マシンの定義ファイルを移行先に合わせて編集する
    • <A> 上
      • 現状の定義をdump: virsh dumpxml <VM> > <VM>_<A>_to_<B>.xml
      • 移行先に合わせて、xml を編集する(主に disk のパス)
        • コマンド例) vim <VM>_<A>_to_<B>.xml
        • ファイル中の /dev/vg_kvm_guest/<VM> となっている箇所を 1. で作成したパスに合わせて編集する(編集例: /dev/guest-vm/<VM>)
  3. 移行元ホストで以下のコマンドを実行する
    • <A> 上
      • virsh migrate --live <VM> qemu+ssh://<B>/system --copy-storage-all --verbose --persistent --xml <VM>_<A>_to_<B>.xml
      • しばらく時間がかかるので、放置

dd による仮想マシンの移行

  • (あとで精査する)
  • 移行先ホストに同じ容量のディスクを用意(/dev/guest-vm/hogehoge を用意する前提として)
# 移行元ホストで当該 VM を停止 $ virsh stop hogehoge # ディスク移行 ## 移行先ホスト上でncコマンドで待ち受け $ nc -l 12345 | sudo dd of=/dev/guest-vm/hogehoge ## 移行元ホスト上でncコマンド経由でディスク内容を転送 $ dd if=/dev/sword/hogehoge | nc hogehoge 12345 # VM 定義ファイルの移行 ## 移行元ホストで VM 定義ファイルを dump $ virsh dumpxml hogehoge > hogehoge.xml ## 移行元ホストから移行先ホストへ xml を転送 $ scp hogehoge.xml (移行先ホスト):~/ ## 移行先ホストで xml をコピーして、define する $ sudo cp hgoehoge.xml /etc/libvirt/qemu $ sudo virsh define /etc/libvirt/qemu/hogehoge.xml ## VM が定義されていることを確認して、VM を start $ sudo virsh list --all $ sudo virsh start hogehoge