概要
わざわざWindows10 Professionalライセンスを手に入れたのはVMネスト環境でKVMのライブマイグレーション(KVMでは移行と呼ぶらしい)を試してみたかったのもあります。
ということで試してみました。KVMの設定はGUIでやります。
環境情報
-
ホストOS: Windows10 バージョン1803
-
Hyper-VゲストOS: CentOS 7.6
-
KVMゲストOS: CentOS 7.6
サーバ構成
Hyper-VゲストOSはnfsサーバ1台とkvm管理サーバ2台の計3台を準備します。
-
1台目 IPアドレス: 10.0.12.31 ホスト名: nfs01
-
2台目 IPアドレス: 10.0.12.21 ホスト名: cent01
-
3台目 IPアドレス: 10.0.12.22 ホスト名: cent02
※nfsサーバは別途用意しなくてもcent01の/var/lib/libvirt/imagesをcent02からnfsマウントできるようにすればよいかな?などと横着しようとしてみたのですが・・
私の環境ではライブマイグレーションは出来るもののcent02に移行後のKVMゲストの挙動がおかしくなってまともに動きませんでした。
cent02で起動したKVMゲストをcent01に移行する分には動くのですが。
ちなみにその際のエラーメッセージは「blk_update_request: I/O error , dev vda, sector」とかでした。
KVMゲストOSは・・・特に何も考えず、デフォルトで1台用意しました。
※サーバ停止する際はnfs01を最後に停止するようにしてください。cent01/02からマウントしたままだと、cent01/02が停止できなくなります。
順序を誤ったとしても再度nfs01を起動すればcent01/02のシャットダウンシーケンスはnfs01起動後に正常に終了しますが。
Hyper-Vの設定
各ゲストOSに対してPowerShellから以下コマンドを実行する必要があります。
ここいら辺は公式マニュアルにも分かりやすく書いてあります。
>Set-VMProcessor -VMName <ゲストOS仮想マシン名> -ExposeVirtualizationExtensions $true
サーバ基本設定概要
OSの基本的な設定については詳しくは触れませんが、とりあえず各サーバ以下の状態で検証しています。
-
SE Linux オフ
-
firewalld 停止
ホスト名設定
kvmでの移行対象ノード指定はホスト名にする必要があるようです。IPアドレスではうまく行きませんでした。
ホスト名及び名前解決はきちんと設定しましょう。ここではhostsファイルで名前解決します。
/etc/hostname
各サーバそれぞれに「サーバ構成」の項目の通りホスト名を指定します。
/etc/hosts
自サーバ及び他サーバについて「サーバ構成」の項目の通り名前解決できるように設定します。
今回必要かどうかは分かりませんが、自サーバについてはループバックデバイスについても忘れずに名前解決できるようにしておきました。
127.0.0.1 cent01 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 cent01 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.12.21 cent01
10.0.12.22 cent02
10.0.12.31 nfs01
nfs01構築
基本的にnfsサーバの設定だけ実施すればOKです。
nfsマウント用ディレクトリの確認
nfsマウントするディレクトリが存在することを確認します。
今回はkvmの仮想環境保存デフォルトディレクトリを使用します。
# ll -d /var/lib/libvirt/images/
/etc/exportsファイル編集
以下の通り修正します。オプションについてはRHELのサポートページを参考にしています。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-kvm_live_migration-shared_storage_example_nfs_for_a_simple_migration
パス | オプション |
---|---|
/var/lib/libvirt/images | *(rw,no_root_squash,sync) |
nfsデーモン起動及び自動起動
# systemctl start nfs-server
# systemctl enable nfs-server
cent01/02構築
kvm環境をインストールします。
kvm関連パッケージのインストール
# yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer
kvm移行で必要になるパッケージのインストール
# yum install openssh-askpass
GUIで仮想マシンマネージャを起動して設定します。
[ファイル] > [接続を追加]
でQEMU/KVM接続を追加して双方向に環境の管理ができるようにします。
[QEMU/KVM] > [詳細]
から[ストレージ]を選択してNFS領域を追加します。
[ターゲットファイル][ソースパス]はHyper-Vデフォルトと同じ[/var/lib/libvirt/images]にしておきます。
cent01と02が同一クローンの場合はsystem-uuidが同じなので、libvirtのuuidを設定します。
そのままだと移行時に移行元と移行先でホストマシンが同じと判断されてエラーになります。
system-uuidを確認します。
# dmidecode -s system-uuid
同一の場合はUUIDを生成してlibvirtd.confのhost_uuidに記載します。
# cat /proc/sys/kernel/random/uuid
# vi /etc/libvirt/libvirtd.conf
※host_uuid に生成されたUUIDを記載する。
動作確認
NFSのストレージ領域にゲストOSを作成して起動。[移行]を実行して別ノードへのライブマイグレーションを確認します。
※ゲストOSの仮想ディスク[パフォーマンスオプション][キャッシュモデル]はデフォルトから[none]に変更しておく必要があります。
これをやらないと安全な移行が出来ない旨の警告が出て、安全でない移行を許可する設定にしないと移行できません。