概要
これまでVMwareを愛用していたが、初めてHyper-Vも触ってみることにした。手元の環境でクラスター構築を試してみることでVMwareとの違いを理解できるようにしたい。
まずは MS Learn | HYPER-V テクノロジの概要 をひととおり読んだところ、vSphereクラスタに相当するものはHyper-Vでは「フェールオーバークラスター」と呼ばれるもののようだったのでこれを構築してみることにする。手順は基本的に公式ドキュメント MS Learn | フェールオーバー クラスターを作成する に沿って行った。
環境
- 物理:NUC 7i5BNH
- Hyper-Vホスト:Windows Server 2022
- ADサーバー:Windows Server 2022
- iSCSIサーバー:Rocky Linux9.3
①Windows Server 2022 インストール
Windows Server をダウンロードしてインストールする
Hyper-Vホスト用2台、ADサーバ用1台、計3台の Windows Server 2022 を用意
- 評価版をダウンロード
https://www.microsoft.com/ja-jp/evalcenter/download-windows-server-2022 - インストールするOSは、Datacenter Evaluation(デスクトップエクスペリエンス)を選択
- インストール完了後、ホスト名、IPアドレスを設定
②ADサーバー
前提条件として、クラスター ノードとして追加するすべてのサーバーが同じ Active Directory ドメインに参加していることが必要と書かれている。
ありがたいことにActive Directory環境構築について公開してくれている記事がたくさんあり、いろいろ読んだ結果ほぼこの記事を参考にさせていただいた。
https://zenn.dev/yud/articles/f47dddc3321fa8
- 「役割と機能の追加」から Active Directoryドメインサービス を役割追加してインストール
- インストール完了後に「このサーバをドメインコントローラに昇格する」をクリック
- ルートドメイン名:cluster.lab
- フォレストの機能レベル: Windows Server 2016(デフォルト)
- NetBIOS ドメイン名:cluster(自動的にルートドメイン名から作成される)
③iSCSI Target
//事前にiscsi用ディスクを作成してマウントしておく
$ df -h
Filesystem Size Used Avail Use% Mounted on
/snip/
/dev/sdb1 210G 1.5G 209G 1% /iscsi
//targetcliパッケージをインストール&起動
$ sudo dnf install -y targetcli
$ sudo systemctl start target
$ sudo systemctl enable target
//targetcliシェルを起動
$ sudo targetcli
//iscsiディスクイメージを作成
> cd backstores/fileio
> create disk0 /iscsi/disk0.img 1G
> create disk1 /iscsi/disk1.img 100G
> create disk2 /iscsi/disk2.img 100G
//icsiターゲットを作成
> cd /iscsi
> create iqn.2024-04.lab.cluster:target
//LUNを作成
> cd iqn.2024-04.lab.cluster:target/tpg1/luns
> create /backstores/fileio/disk0
> create /backstores/fileio/disk1
> create /backstores/fileio/disk2
//ACLを設定
> cd ../acls
> create iqn.2024-04.lab.cluster:hv-host01
> create iqn.2024-04.lab.cluster:hv-host02
④Hyper-Vホスト
この記事を参考にさせていただいた。
Hyper-V Mastery: A Step-by-Step Guide for Beginners to Elevate Your IT Skills and Boost Your Career
- iscsiターゲットへ接続
https://www.server-world.info/query?os=Windows_Server_2022&p=iscsi&f=3#google_vignette - ドメインに参加
https://learn.microsoft.com/ja-jp/windows-server/identity/ad-fs/deployment/join-a-computer-to-a-domain - Hyper-Vの役割をインストール
https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/get-started/install-the-hyper-v-role-on-windows-server - フェールオーバークラスターを作成
https://learn.microsoft.com/ja-jp/windows-server/failover-clustering/create-failover-cluster
動作確認
-
ライブマイグレーションの動作確認
このあとHA、DRS、Storage Live Migration、Snapshot、Resource Pool、RBAC、等についてもVMwareとの機能の違いを確認する。
今回初めて知ったこと
Hyper-Vの構成
Hyper-V は Windows Server にインストールされる役割であり、Windows クライアント オペレーティング システムで有効になる機能であるため、多くの人が誤って Hyper-V をタイプ 2 ハイパーバイザーと認識しています。
ただし、Windows Server および Windows クライアント オペレーティング システムで Hyper-V が有効になると、Microsoft はいくつかの「魔法」を実行します。Hyper-V は基盤となるオペレーティング システムとしてインスタンス化され、Windows よりも前に開始されます。Windows Server およびクライアント オペレーティング システムは、Hyper-V の管理オペレーティング システムになります。そのため、オペレーティング システムの「上」にインストールされるのではなく、Windows オペレーティング システムの「下」にインストールされ、ベアメタル パフォーマンスを実現できます。
Hyper-V Mastery: A Step-by-Step Guide for Beginners to Elevate Your IT Skills and Boost Your Career
Windows Server Core
Windows Server はGUI画面から操作するのがなんとなく嫌だなと思っていたが、Windows Server Core というコマンドラインのみのインストールオプションが使用できる。
Windows Server の Server Core インストール オプションとは
Server Core のインストールでは、一般的に使用される特定のサーバー ロールのサポートに不可欠ではないサービスや他の機能が排除されます。 たとえば、Hyper-V サーバーにはグラフィカル ユーザー インターフェイス (GUI) は必要ありません。これは、Windows PowerShell を使用してコマンド ラインから、または Hyper-V マネージャーを使用してリモートから Hyper-V の事実上すべての側面を管理できるからです。
今回はDatacenter Evaluation(デスクトップエクスペリエンス)を使用したが、次回はデスクトップエクスペリエンス無しのWindows Server Coreエディションを使ってGUIではなくすべてPowerShellで構築することを試したい。
追記)Windows Server Coreエディションを用いてCLIで構築する
Hyper-Vホスト用のWindows Server 2022インストール
デスクトップ無しのWindows Server Coreを使用。同様の手順でhv-host05、hv-host06の2台分をVM作成した。
初期設定
まず最初にネットワーク設定、ホスト名設定をコンソールから設定する。
WinRM設定
以降の設定はWinRMでリモート操作できるようにする。今回はADサーバをWinRM接続元として使用した。
//信頼済みホストを登録
$RemoteIP = "192.168.11.71"
Set-Item WSMan:\localhost\Client\TrustedHosts -Value ${RemoteIP}
//WinRM接続
$LoginName = "Administrator"
Enter-PSSession -ComputerName ${HVHOST05_IP} -Credential ${LoginName}
ADのドメインに参加
hv-host05、hv-host06それぞれで実施
//参照するDNSをAD DSへ変更
$InterfaceName1 = "Ethernet0"
$DNSServerAddress1 = "192.168.11.63"
Set-DnsClientServerAddress -InterfaceAlias ${InterfaceName1} -ServerAddresses ${DNSServerAddress1} -PassThru
//ドメイン参加
$Domain = "cluster.lab"
$Cred = Get-Credential
Add-Computer -DomainName ${Domain} -Credential ${Cred}
//再起動
Restart-Computer -Force
iSCSIターゲットに接続
hv-host05、hv-host06それぞれで実施
//iSCSIサービスを起動して、自動起動を有効にする
Start-Service -Name MSiSCSI
Set-Service -Name MSiSCSI -StartupType Automatic
//イニシエーター名を変更
$InitiatorNodeAddress = (Get-InitiatorPort).NodeAddress
Set-InitiatorPort -NodeAddress $InitiatorNodeAddress -NewNodeAddress iqn.2024-04.lab.cluster:hv-host05
//イニシエーター名が変更されたことを確認
Get-InitiatorPort
//iSCSIターゲットポータルを探索
$iscsi_target_ip = "192.168.11.65"
New-IscsiTargetPortal -TargetPortalAddress ${iscsi_target_ip}
//iSCSIターゲットに接続
$iscsi_initiator_ip = "192.168.11.71"
$TargetNodeAddress = (Get-IscsiTarget).NodeAddress
Connect-IscsiTarget -NodeAddress $TargetNodeAddress -TargetPortalAddress ${iscsi_target_ip} -InitiatorPortalAddress ${iscsi_initiator_ip} -IsPersistent $True -IsMultipathEnabled $True
//iSCSIターゲットに接続できたことを確認
Get-IscsiConnection
iSCSIディスクをオンライン化+GPTで初期化+NTFSでフォーマット
オンライン化はそれぞれのホストで実施するが、初期化+フォーマットはhv-host05のみで行う。
//iSCSIディスクを確認
Get-Disk | Format-Table -AutoSize -Wrap
Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Sty
le
------ ------------- ------------- ------------ ----------------- ---------- -------------
1 LIO-ORG disk0 5227045a-a551-4775-aed8-4118b740ce03 Healthy Offline 1 GB GPT
2 LIO-ORG disk1 206d181c-a544-449c-8f34-bf454a45f5bb Healthy Offline 100 GB GPT
3 LIO-ORG disk2 70d55255-b124-4aac-84f9-b7e944f320b8 Healthy Offline 100 GB GPT
4 LIO-ORG disk3 e9a712e5-9497-42a0-bccd-ef40bdb75026 Healthy Offline 1 GB RAW
5 LIO-ORG disk4 c55f0ac9-e14c-4b93-b108-d1609d52f4d9 Healthy Offline 100 GB RAW
0 VMware Virtual disk 6000c29cac1c027b3f8b6b4a88afd231 Healthy Online 90 GB GPT
//ディスクをオンラインにする(今回はdisk3, disk4を対象)
Set-Disk -Number 4 -IsOffline $False
Set-Disk -Number 5 -IsOffline $False
//ディスクをGPTで初期化する(今回はdisk3, disk4を対象)
Initialize-Disk -Number 4 -PartitionStyle GPT
Initialize-Disk -Number 5 -PartitionStyle GPT
//ドライブレターは割当てず、パーティションを作成(今回はdisk3, disk4を対象)
New-Partition -DiskNumber 4 -UseMaximumSize
New-Partition -DiskNumber 5 -UseMaximumSize
//NTFSでフォーマット
$Partition4_2 = Get-Partition -DiskNumber 4 -PartitionNumber 2
Format-Volume -Partition ${Partition4_2} -FileSystem NTFS -Force
$Partition5_2 = Get-Partition -DiskNumber 5 -PartitionNumber 2
Format-Volume -Partition ${Partition5_2} -FileSystem NTFS -Force
//ボリュームの情報を確認
Get-Volume | Format-Table -AutoSize -Wrap
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining Size
----------- ------------ -------------- --------- ------------ ----------------- ------------- ----
NTFS Fixed Healthy OK 115.21 MB 599 MB
NTFS Fixed Healthy OK 99.89 GB 99.98 GB
FAT32 Fixed Healthy OK 68.25 MB 96 MB
NTFS Fixed Healthy OK 991.06 MB 1007.93 MB
C NTFS Fixed Healthy OK 82.26 GB 89.3 GB
D SSS_X64FREE_JA-JP_DV9 Unknown CD-ROM Healthy OK 0 B 4.85 GB
Hyper-Vインストール・設定
hv-host05、hv-host06それぞれで実施
//Hyper-Vの役割をインストール
$ComputeName = $env:computername | Select-Object
Install-WindowsFeature -Name Hyper-V -ComputerName ${ComputeName} -IncludeManagementTools -Restart
//インストール後に再起動が行われるので、再起動後に改めてWinRMで接続して確認
$ComputeName = $env:computername | Select-Object
Get-WindowsFeature -ComputerName ${ComputeName}
//仮想スイッチ作成
$NetAdapterName = (Get-NetAdapter).Name
$VMSwitchName = "vsw"
New-VMSwitch -Name ${VMSwitchName} -NetAdapterName ${NetAdapterName}
//仮想スイッチを管理 OS と共有
Set-VMSwitch -Name ${VMSwitchName} -AllowManagementOS $true
フェールオーバークラスターを作成
インストールはそれぞれのホストで実施する。クラスタ検証テスト・作成はいずれかのホストで実施すればよい。
//インストール
Install-WindowsFeature Failover-Clustering -IncludeManagementTools
//クラスタ検証テストを実行 #クラスタの検証テスト・クラスタ作成はWinRMで実行しようとすると、直接コンソールで実行せよというエラーが出るので仕方なくコンソールで実施した
Test-Cluster -Node "hv-host05", "hv-host06"
//クラスタ作成
$ClusterVipAddress = "192.168.11.73"
New-Cluster –Name MyCluster –Node "hv-host05", "hv-host06" –StaticAddress ${ClusterVipAddress}
//クラスターノードの確認
Get-ClusterNode
Name State Type
---- ----- ----
hv-host05 Up Node
hv-host06 Up Node
//クラスターリソースの確認
Get-ClusterResource
Name State OwnerGroup ResourceType
---- ----- ---------- ------------
Virtual Machine Cluster WMI Online クラスター グループ Virtual Machine Cluster WMI
クラスター IP アドレス Online クラスター グループ IP Address
クラスター ディスク 1 Online クラスター グループ Physical Disk
クラスター ディスク 2 Online 使用可能記憶域 Physical Disk
クラスター名 Online クラスター グループ Network Name
クラスターディスクを「クラスターの共有ボリューム(CSV)」として構成する
いずれかのホストで実施
//クラスター共有ボリューム(CSV)へ
Add-ClusterSharedVolume -Name "クラスター ディスク 2"
//確認
Get-ClusterResource | where {$_.ResourceType -eq "Physical Disk"} | fl *
OperationalStatus : OK
HealthStatus : Healthy
DriveType : Fixed
FileSystemType : CSVFS_NTFS
DedupMode : NotAvailable
ObjectId : {1}\\Mycluster\root/Microsoft/Windows/Storage/Providers_v2\WSP_Volume.ObjectId="{8d1593d6-2f75-
4bba-b483-4f72f42354b9}:VO:\\?\Volume{82a9ad71-2a98-4efb-b6a3-4e7c36d79786}\"
PassThroughClass :
PassThroughIds :
PassThroughNamespace :
PassThroughServer :
UniqueId : \\?\Volume{82a9ad71-2a98-4efb-b6a3-4e7c36d79786}\
AllocationUnitSize : 4096
DriveLetter :
FileSystem : CSVFS
FileSystemLabel :
Path : \\?\Volume{82a9ad71-2a98-4efb-b6a3-4e7c36d79786}\
Size : 107356352512
SizeRemaining : 107239075840
PSComputerName :
CimClass : ROOT/Microsoft/Windows/Storage:MSFT_Volume
CimInstanceProperties : {ObjectId, PassThroughClass, PassThroughIds, PassThroughNamespace...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties
フェールオーバークラスターはこれで作成完了
Windows Admin Centerを使ってみる
Hyper-Vマネージャー、フェールオーバークラスタマネージャーは昔ながらの画面だったが、これから新たに使い始めるのならWindows Admin Centerのほうがモダンな画面で操作性も良さそうだった。
Windows Admin Centerインストール
今回はWindows10 PCへインストールすることとした。ダウンロードサイト からダウンロードしてインストール。