KVMで仮想化を試してみる(後編)

やまもとやま
2026-05-13
2026-05-13

どうも、やまもとやまです。
前回はKVMのオフラインマイグレーションを試してみました。
今回はオンラインマイグレーションを実行してみます。

環境

前回利用したホストマシン(198.51.100.10および198.51.100.11)を引き続き利用します。
また、追加でストレージ用NFSサーバー(198.51.100.15)を準備します。
ホスト名はそれぞれ以下とします。

  • kvmtest01 (198.51.100.10)
  • kvmtest02 (198.51.100.11)
  • nfstest  (198.51.100.15)

共有ストレージの準備

KVMではオンラインマイグレーションが可能ですが、共有ストレージが必要となります。
そのため、今回はNFSを利用して共有ストレージを作成し、イメージファイルを保存します。

ストレージ用NFSサーバーで、nfsを導入します。

# dnf install nfs-utils

rpcbindパッケージも必要ですが、nfs-utilsを導入すれば依存性で一緒にインストールされます。
共有用にディレクトリを作成します。
どこでも良いですが、今回は以下にします。
パーミッションはホストマシンのイメージディレクトリにあわせておきます。

# mkdir /mnt/nfsroot
# chmod 711 /mnt/nfsroot

NFSのエクスポート用設定を行います。

# vi /etc/exports
/mnt/nfsroot 198.51.100.0/24(rw,sync,no_root_squash)

ではサービスを起動しましょう。

# systemctl start rpcbind.service
# systemctl enable nfs-server.service --now

ファイアウォール設定で許可されていない場合は、クライアントとなるホストマシンからの接続許可を行いましょう。
今回は許可されているので省略します。

ホストマシンでの設定

2つのホストマシン共通で設定します。
まずは、現在のイメージディレクトリを退避してマウントポイントを再作成します。
※仮想マシンは停止しておきます

# mv /var/lib/libvirt/images /var/lib/libvirt/images.bk
# mkdir /var/lib/libvirt/images

次にNFSサーバーの共有領域をマウントします。

# mount -t nfs -o rw,hard,intr 198.51.100.15:/mnt/nfsroot /var/lib/libvirt/images
# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
198.51.100.15:/mnt/nfsroot  99562240 3126528  96435712   4% /var/lib/libvirt/images

dfでもマウントされていることが確認できます。
必要に応じfstab等でも設定しましょう。
また、マウント先にファイルを作成することでNFSサーバーで作成され、両方のホストマシンから参照できることも確認できます。

# touch /var/lib/libvirt/images/test.txt

共有ストレージの準備ができたので、イメージファイルを退避したディレクトリからコピーします。

# cp -p /var/lib/libvirt/images.bk/al9test.qcow2 /var/lib/libvirt/images/

これで準備が完了しました。

オンラインマイグレーション実施

さて、共有ストレージへイメージを保存しました。
現在仮想マシンは各ホストで以下の状態とします。

kvmtest01 # virsh list --all
 Id   Name   State
--------------------

kvmtest02 # virsh list --all
 Id   Name      State
--------------------------
 -    al9test   shut off

kvmtest02のみ仮想マシンが停止状態で存在していますので、起動させます。

kvmtest02 # virsh start al9test

仮想マシンが正常に起動しました。
この状態でオンラインマイグレーションを実行します。
移行先ホスト(今回の場合はkvmtest01)が名前解決できない場合はhosts登録が必要なので事前に登録します。
また、kvmtest02からkvmtest01へrootでSSHできる必要もあります。

kvmtest02 # vi /etc/hosts
198.51.100.10 kvmtest01

kvmtest02 # virsh migrate --live al9test --verbose qemu+ssh://kvmtest01/system

verboseオプションを付けると、進行状態が%表示されます。
しばらくするとコマンド実行が終了し、無事完了するはずです。
さて、移行状態は・・・?

kvmtest01 # virsh list --all
 Id   Name      State
-------------------------
 1    al9test   running

kvmtest02 # virsh list --all
 Id   Name      State
--------------------------

無事マイグレーションされていますね!
また、仮想マシンも稼働したまま移行できていました!
※環境にもよりますが切り替わるタイミングで瞬断が発生したりはします

まとめ

KVMでのオンラインマイグレーションを試し、無事実行できることを確認できました。
ただし、実際には制限事項もあり、負荷状況にもよるため利用には十分な検証も必要そうです。
共有ストレージもNFSよりも高性能なストレージが望ましいところではあります。
とはいえ、クリティカルなシステムでなければお手軽に仮想化やオンラインマイグレーションが利用できるのは便利ですね。

それではまた!