CentOS Stream 10
Sponsored Link

KVM : ライブマイグレーション2025/01/17

 

仮想マシンのライブマイグレーション機能の利用です。

ある KVM ホスト上で稼動している仮想マシンを、稼動させたまま別の KVM ホストに移動できます。
システムメンテナンス等で片方の KVM ホストを停止したい場合に、その上で稼動している仮想マシンを別の KVM ホストに移動させ、仮想マシンを常に稼働させたまま 片側のシステムのメンテナンスをするといったことが可能になります。

前提として、2 台の KVM ホストサーバー、および、 仮想マシンイメージを格納するストレージサーバーの、計 3 台のサーバーが必要となります。
当例では以下のような環境でライブマイグレーションを実行します。
前提として、DNS または hosts 等で名前解決が正常にできるようにしておく必要があります。

                      +----------------------+
                      |   [  NFS Servver  ]  |
                      |     nfs.srv.world    |
                      |                      |
                      +-----------+----------+
                                  |10.0.0.35
                                  |
+----------------------+          |          +----------------------+
|  [   KVM Host #1  ]  |10.0.0.30 | 10.0.0.51|  [  KVM Host #2   ]  |
|                      +----------+----------+                      |
|    kvm01.srv.world   |                     |    kvm02.srv.world   |
+----------------------+                     +----------------------+

[1]

仮想マシンイメージ格納用のストレージサーバーを構築しておきます。
ストレージサーバーには NFS, iSCSI, GlusterFS など、ネットワーク共有できる仕組みであれば何でも OK です。
当例では NFS によるストレージサーバーを構築します。

[2]

2 台の KVM ホストサーバーを準備し、両サーバーで同じディレクトリに NFS 共有ディレクトリをマウントしておきます。
当例では [/var/kvm/images] に NFS 共有ディレクトリをマウントします。

[3] KVM ホストで SELinux を有効にしている場合 且つ 当例のように NFS 共有ディレクトリを利用する場合はブール値の変更が必要です。
[root@kvm01 ~]#
setsebool -P virt_use_nfs on
[4] KVM ホストで Firewalld を有効にしている場合、必要なポートの許可が必要です。
[root@kvm01 ~]#
firewall-cmd --add-service={libvirt,libvirt-tls}

[root@kvm01 ~]#
firewall-cmd --add-port=49152-49215/tcp

[root@kvm01 ~]#
firewall-cmd --runtime-to-permanent

[5] いずれか一方の KVM ホストで任意の仮想マシンを作成し、他方の KVM ホストへライブマイグレーションを実行します。
成功すると、以下のように他方の KVM ホストサーバーに仮想マシンがマイグレートされます。
双方の KVM ホストで root ユーザーで SSH 接続するため、事前に SSH 鍵ペアを作成して設定しておくとよいでしょう。
# 事前にマイグレーションしたい仮想マシンの設定を調整

[root@kvm01 ~]#
virsh edit centos10
 <disk type='file' device='disk'>
      # 追記:キャッシュモードを [none] に変更
      <driver name='qemu' type='qcow2' cache='none' discard='unmap'/>
      <source file='/var/kvm/images/centos10.img'/>

[root@kvm01 ~]#
virsh start centos10

[root@kvm01 ~]#
virsh list

 Id   Name       State
--------------------------
 2    centos10   running

[root@kvm01 ~]#
virsh migrate --live centos10 qemu+ssh://kvm02.srv.world/system

[root@kvm01 ~]#
virsh list

 Id   Name   State
--------------------

# 稼働中の仮想マシンは移動した
### マイグレーション先の KVM ホスト ###

[root@kvm02 ~]#
virsh list

 Id   Name       State
--------------------------
 1    centos10   running

# 元に戻す場合は同じように 相手先 KVM ホストのホスト名 または IP アドレスを指定してマイグレーションを実行

[root@kvm02 ~]#
virsh migrate --live centos10 qemu+ssh://kvm01.srv.world/system

[root@kvm02 ~]#
virsh list

 Id   Name   State
--------------------

関連コンテンツ