1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Hyper-VのNested VMを使ってkvmのLive Migration(移行)を試す。

Last updated at Posted at 2019-01-15

概要

わざわざ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から以下コマンドを実行する必要があります。
ここいら辺は公式マニュアルにも分かりやすく書いてあります。

PowerShell
>Set-VMProcessor -VMName <ゲストOS仮想マシン名> -ExposeVirtualizationExtensions $true

サーバ基本設定概要

OSの基本的な設定については詳しくは触れませんが、とりあえず各サーバ以下の状態で検証しています。

  • SE Linux オフ

  • firewalld 停止

ホスト名設定

kvmでの移行対象ノード指定はホスト名にする必要があるようです。IPアドレスではうまく行きませんでした。
ホスト名及び名前解決はきちんと設定しましょう。ここではhostsファイルで名前解決します。

/etc/hostname

各サーバそれぞれに「サーバ構成」の項目の通りホスト名を指定します。

/etc/hosts

自サーバ及び他サーバについて「サーバ構成」の項目の通り名前解決できるように設定します。
今回必要かどうかは分かりませんが、自サーバについてはループバックデバイスについても忘れずに名前解決できるようにしておきました。

sample
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の仮想環境保存デフォルトディレクトリを使用します。

command
# 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デーモン起動及び自動起動

command
# systemctl start nfs-server
# systemctl enable nfs-server

cent01/02構築

kvm環境をインストールします。

kvm関連パッケージのインストール

command
# yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer

kvm移行で必要になるパッケージのインストール

command
# yum install openssh-askpass

GUIで仮想マシンマネージャを起動して設定します。

[ファイル] > [接続を追加]
でQEMU/KVM接続を追加して双方向に環境の管理ができるようにします。

[QEMU/KVM] > [詳細]
から[ストレージ]を選択してNFS領域を追加します。
[ターゲットファイル][ソースパス]はHyper-Vデフォルトと同じ[/var/lib/libvirt/images]にしておきます。

cent01と02が同一クローンの場合はsystem-uuidが同じなので、libvirtのuuidを設定します。

そのままだと移行時に移行元と移行先でホストマシンが同じと判断されてエラーになります。

system-uuidを確認します。

command
# dmidecode -s system-uuid

同一の場合はUUIDを生成してlibvirtd.confのhost_uuidに記載します。

command
# cat /proc/sys/kernel/random/uuid
# vi /etc/libvirt/libvirtd.conf

※host_uuid に生成されたUUIDを記載する。

動作確認

NFSのストレージ領域にゲストOSを作成して起動。[移行]を実行して別ノードへのライブマイグレーションを確認します。

※ゲストOSの仮想ディスク[パフォーマンスオプション][キャッシュモデル]はデフォルトから[none]に変更しておく必要があります。
これをやらないと安全な移行が出来ない旨の警告が出て、安全でない移行を許可する設定にしないと移行できません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?