【Hyper-V/Windows Server 2025】 3Tier 構成:クラスタでの仮想マシンの作成と操作(ライブ マイグレーション・フェールオーバー)

フェールオーバー クラスタの上に高可用性の仮想マシンを作り、ライブ マイグレーション、ノード障害時のフェールオーバー、iSCSI の経路障害の動作を確認する手順です。

目次

この記事の前提

参照した公式ドキュメント

構成

項目内容
クラスタHVDOC-CL(DOC-HV1/DOC-HV2/DOC-HV3)。クラスタの作成手順で作成済み
仮想マシンの保存先CSV(C:\ClusterStorage\Volume1)
仮想マシンrocky-hv01(Rocky Linux 9.8、第 2 世代、2 vCPU、メモリ 2 GB、ディスク 20 GB、IP アドレス 192.168.1.127)
インストール メディアRocky-9.8-x86_64-minimal.iso を C:\ClusterStorage\Volume1\ISO にコピー済み

ISO を CSV に置くと、仮想マシンがどのノードに移動しても DVD ドライブの ISO を参照できます。ノードのローカル ディスクに置くと、ライブ マイグレーションができなくなることがあります。

高可用性の仮想マシンの作成

クラスタの仮想マシンは、フェールオーバー クラスター マネージャーから作ります。Hyper-V マネージャーで作った仮想マシンは、クラスタに登録するまで高可用性になりません。

(1) ツリーの [Roles] を選び、[Actions] の [Virtual Machines] → [New Virtual Machine] をクリックします。

新しい仮想マシン

(2) 仮想マシンを作るノードを選んで [OK] をクリックします。ここでは DOC-HV1 を選びました。新しい仮想マシン ウィザードが開くので、最初のページで [Next] をクリックします。

ノードの選択

(3) 名前を入力し、[Store the virtual machine in a different location] をオンにして、[Location] に CSV のパスを入力して [Next] をクリックします。

名前と場所
項目設定値
Namerocky-hv01
Store the virtual machine in a different locationオン
LocationC:\ClusterStorage\Volume1\(このフォルダーの下に、仮想マシン名のフォルダーが作られます)

(4) [Generation 2] を選んで [Next] をクリックします。

世代

(5) [Startup memory] に 2048 を入力して [Next] をクリックします。

メモリ
項目説明設定値
Startup memory起動時に割り当てるメモリ(MB)2048
Use Dynamic Memory for this virtual machine使用量に応じてメモリを増減しますオフ

(6) [Connection] で、仮想マシンをつなぐ仮想スイッチを選んで [Next] をクリックします。管理 LAN(192.168.1.0/24)につながる VMSwitch を選びました。

ネットワーク

仮想スイッチは、すべてのノードで同じ名前にしておきます。名前が違うと、ライブ マイグレーションやフェールオーバーで移動できません。

(7) [Create a virtual hard disk] を選び、[Size] に 20 を入力して [Next] をクリックします。保存先は手順 (3) の場所の下(C:\ClusterStorage\Volume1\rocky-hv01\Virtual Hard Disks\)になります。

仮想ハード ディスク

(8) [Install an operating system from a bootable CD/DVD-ROM] → [Image file (.iso)] を選び、ISO のパスを入力して [Next] をクリックします。

インストール オプション

(9) 設定を確認して [Finish] をクリックします。

設定の確認

(10) 仮想マシンが作られると、高可用性ウィザードが自動で実行され、仮想マシンがクラスタの役割として登録されます。[Success] を確認して [Finish] をクリックします。

高可用性ウィザード

PowerShell で作成する場合は、次のコマンドです(DOC-HV1 で実行)。

New-VM -Name rocky-hv01 -Generation 2 -MemoryStartupBytes 2GB -Path C:\ClusterStorage\Volume1 -NewVHDPath C:\ClusterStorage\Volume1\rocky-hv01\rocky-hv01.vhdx -NewVHDSizeBytes 20GB -SwitchName VMSwitch
Add-VMDvdDrive -VMName rocky-hv01 -Path C:\ClusterStorage\Volume1\ISO\Rocky-9.8-x86_64-minimal.iso
Set-VMFirmware -VMName rocky-hv01 -SecureBootTemplate MicrosoftUEFICertificateAuthority -FirstBootDevice (Get-VMDvdDrive -VMName rocky-hv01)
Add-ClusterVirtualMachineRole -VMName rocky-hv01

Linux 用のセキュア ブートの設定

第 2 世代の仮想マシンは、既定のセキュア ブートのテンプレートが [Microsoft Windows] で、このままでは Linux のインストーラーが起動しません。

(1) [Roles] で rocky-hv01 を右クリックして [Settings] をクリックします。

設定を開く

(2) [Security] を選び、[Template] を [Microsoft UEFI Certificate Authority] に変更して [OK] をクリックします。

セキュア ブート
項目説明設定値
Enable Secure Boot署名されたブート ローダーだけを起動しますオン
Template信頼する証明書。Linux は Microsoft UEFI Certificate Authority を使いますMicrosoft UEFI Certificate Authority

OS のインストール

(1) rocky-hv01 を右クリックして [Start] をクリックし、もう一度右クリックして [Connect] をクリックします。仮想マシン接続(VMConnect)のウィンドウに、インストーラーのメニュー(GRUB)が表示されます。

インストーラーのメニュー

(2) ここではキックスタートで自動インストールしました。[Install Rocky Linux Minimal 9.8] を選んで [e] キーを押し、linuxefi で始まる行の最後に inst.ks= を追加して、[Ctrl]+[X] で起動します。手動でインストールする場合は、そのまま [Enter] キーを押して、画面の指示に従います。

キックスタートの指定
inst.ks=http://192.168.1.182:8080/rocky-hv01.cfg

GRUB のメニューは 60 秒で既定の項目(Test this media & install)が起動します。カーソル キーを押すと、カウントダウンが止まります。

(3) インストールが終わると再起動し、ログイン画面が表示されます。

(4) Hyper-V のゲスト サービス(KVP・VSS など)のデーモンを入れて、再起動します。KVP が動くと、フェールオーバー クラスター マネージャーの概要に、仮想マシンのコンピューター名や OS の名前(Computer Name・Operating System)が表示されるようになります。

dnf -y install hyperv-daemons
systemctl reboot
systemctl is-active hypervkvpd hypervvssd

hyperv-daemons は minimal の ISO には入っていないので、キックスタートの %packages に書くと、インストーラーが「missing packages」で止まります。インストール後にネットワーク経由で入れてください。インストール直後は依存するデバイスがまだないため、systemctl enable --now は失敗します。再起動すると自動で起動します。

ライブ マイグレーション

稼働中の仮想マシンを、止めずに別のノードへ移します。

(1) rocky-hv01 を右クリックして [Move] → [Live Migration] → [Select Node] をクリックします。[Best Possible Node] を選ぶと、クラスタが移動先を自動で選びます。

移動のメニュー

(2) 移動先のノード(DOC-HV2)を選んで [OK] をクリックします。

移動先の選択

(3) [Status] が [Live Migrating] になり、[Information] に進捗が表示されます。

ライブ マイグレーション中

(4) 完了すると [Owner Node] が DOC-HV2 に変わり、[Status] は [Running] のままです。

ライブ マイグレーションの完了

PowerShell で実行する場合は、次のコマンドです。

Move-ClusterVirtualMachineRole -Name rocky-hv01 -Node DOC-HV2 -MigrationType Live

画面下の [Up Time] は、ライブ マイグレーションのたびに 0 から数え直されます。ゲスト OS は再起動していません(ゲストの uptime は続いています)。

この検証環境での結果です(移動中、別のマシンから 0.2 秒間隔で ping を送り続けました)。

項目結果
所要時間約 70 秒(開始 7:19:02 → 完了 7:20:12。Hyper-V-VMMS のイベント 20413/20415)
停止時間(blackout time)1.5 秒(イベント 20415 の記録)
ping の欠落1,500 回中 7 回(約 1.4 秒)
使われたネットワークLiveMigration(10.20.85.0/24)。イベント 20418 の送信元 IP アドレスで確認

クラスタには、ノードの負荷の偏りを見て仮想マシンを自動でライブ マイグレーションする「仮想マシンの負荷分散」があり、既定で有効です(AutoBalancerMode=2、AutoBalancerLevel=1)。この検証でも、作成直後の仮想マシンが DOC-HV1 から DOC-HV3 へ自動で移動しました(イベント 1641 の Move reason が「LoadBalancer」)。意図しない移動を避けたいときは、(Get-Cluster).AutoBalancerMode = 0 で無効にできます。

ノード障害時のフェールオーバー

仮想マシンが動いているノード(DOC-HV2)の電源を強制的に切り、仮想マシンが別のノードで再起動されるかを確認しました。

(1) ノードが停止すると、ツリーの [Nodes] でそのノードが [Down] になります。仮想マシンは残りのノードで自動的に起動します。ここでは DOC-HV1 で起動し、[Up Time] が 0 から数え直されています(ライブ マイグレーションと違い、仮想マシンは再起動されます)。

フェールオーバー後

(2) この検証環境での結果です。

設定ノードの停止を検知仮想マシンがオンラインping が戻るまで
ResiliencyLevel=2(既定)約 1 秒約 254 秒後316 秒
ResiliencyLevel=1約 2 秒約 8 秒後70 秒

既定の設定では、応答しなくなったノードはすぐには「故障」と判定されず、まず [Isolated](分離)の状態になります。一時的なネットワークの断で仮想マシンを再起動しないように、最大 240 秒(ResiliencyDefaultPeriod)待ってからフェールオーバーします。この検証でも、イベント 1673(分離状態に入った)から 240 秒後にイベント 1682(フェールオーバーした)が記録されました。ping が戻るまでの残りの約 60 秒は、ゲスト OS の起動時間です。

電源断のような障害ですぐにフェールオーバーさせたい場合は、ResiliencyLevel を 1 にします(理由が通知された停止だけを分離状態として扱い、それ以外はすぐにフェールオーバーします)。待ち時間だけを短くする場合は、ResiliencyDefaultPeriod を変更します。

(Get-Cluster).ResiliencyLevel = 1
(Get-Cluster).ResiliencyDefaultPeriod = 60
Get-Cluster | Format-List ResiliencyLevel,ResiliencyDefaultPeriod

設定の意味と既定値は、マイクロソフトの Virtual Machine Compute Resiliency in Windows Server 2016(Microsoft Community Hub) で説明されています。この検証では試験の後に既定の 2 に戻しました。

iSCSI の経路障害

仮想マシンと CSV の両方を持っているノード(DOC-HV2)で、iSCSI-A の NIC のリンクを切りました。

確認したこと結果
MPIO の経路(mpclaim -s -d 0)2 本 → 1 本(iSCSI-B の経路だけが Active/Optimized)
仮想マシンのディスク書き込み(200 MB、dd oflag=direct)正常に完了(171 MB/s)
CSV と仮想マシンの状態どちらも Online のまま
リンクを戻した後60 秒以内に自動で 2 本の経路(どちらも Active/Optimized)に戻りました

経路の確認に使ったコマンドです(ノードの PowerShell で実行)。

mpclaim -s -d 0
Get-NetAdapter -Name iSCSI-A,iSCSI-B

次の手順

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次