3-Node Hyper-V Failover Cluster with Shared SAN Storage
Project Type
Enterprise infrastructure project — production Hyper-V HA cluster with shared SAN storage, full network segmentation, and validated Live Migration.
Project Overview
This project covers the end-to-end design and implementation of a 3-node Microsoft Hyper-V failover cluster backed by a Dell PowerVault ME5084 SAN over iSCSI, running Windows Server 2022 on Dell PowerEdge R750 hosts.
Goals
- Provide high availability for VMs in the event of a host failure
- Enable Live Migration between nodes with minimal disruption
- Centralize storage using a shared SAN with dual-controller redundancy
- Implement full network traffic separation across management, live migration, cluster, storage, and production traffic
- Standardize compute, network, and storage configuration across all cluster nodes
Architecture
Logical Topology
+------------------------------------------+
| Dell PowerVault ME5084 |
| CTL-A: 10.20.0.11 / 10.20.0.12 |
| CTL-B: 10.20.0.13 / 10.20.0.14 |
| Dual-controller, dual iSCSI fabric |
+----+------------------+------------------+
| |
iSCSI-A iSCSI-B
(10.10.10.x) (10.10.20.x)
| |
+--------------+------------------+--------------+
| | |
+---------+--------+ +---------+--------+ +--------------+---+
| HPV-NODE-01 | | HPV-NODE-02 | | HPV-NODE-03 |
| iSCSI-A: .10.15 | | iSCSI-A: .10.17 | | iSCSI-A: .10.19 |
| iSCSI-B: .20.16 | | iSCSI-B: .20.18 | | iSCSI-B: .20.20 |
+------------------+ +------------------+ +------------------+
| | |
+-------------------+----------------------------+
|
+---------------+---------------+
| Windows Failover Cluster |
| Disk Witness / CSV / Live Mig |
+-------------------------------+
Network Segments
| Traffic Type | Subnet | Port |
|---|---|---|
| iSCSI-A (Fabric A) | 10.10.10.0/24 | Slot 1 Port 1 per host |
| iSCSI-B (Fabric B) | 10.10.20.0/24 | Slot 7 Port 1 per host |
| Host NIC-A (Mgmt/VM) | Production VLAN | Slot 1 Port 2 per host |
| Host NIC-B (Mgmt/VM) | Production VLAN | Slot 7 Port 2 per host |
| Live Migration | Dedicated LM subnet | Slot 1 Port 4 per host |
| iDRAC (OOB) | 10.30.0.43–45 | Dedicated per host |
| SAN Controller MGMT | 10.30.0.41–42 | CTL-A/B MGMT ports |
Switch Infrastructure
| Switch | Role |
|---|---|
| TOR-SW-01 | Primary ToR — iSCSI-B fabric, LM, host NICs |
| TOR-SW-02 | Secondary ToR — iSCSI-A fabric, host NICs |
| MGMT-SW-01 | Out-of-band — iDRAC + SAN management ports |
Each iSCSI fabric cross-connects to a separate ToR switch for path redundancy.
Environment
Compute
| Attribute | Value |
|---|---|
| Server Model | Dell PowerEdge R750 (×3) |
| CPU | 2× Intel Xeon Gold 5317 @ 3.00 GHz (12 cores each) |
| RAM | 192 GB per node |
| OS | Windows Server 2022 |
| NIC Teaming | LBFO |
| Out-of-band | Dell iDRAC |
Storage
| Attribute | Value |
|---|---|
| SAN Model | Dell PowerVault ME5084 |
| Controller A | CTL-A0: 10.20.0.11 / CTL-A1: 10.20.0.12 |
| Controller B | CTL-B0: 10.20.0.13 / CTL-B1: 10.20.0.14 |
| Protocol | iSCSI (10 GbE) |
| Redundancy | Dual fabric — each host has iSCSI-A and iSCSI-B paths |
| Pools | Pool A (CTL-A) / Pool B (CTL-B) |
Roles & Features (Per Node)
- Hyper-V
- Failover Clustering + Management Tools
- Hyper-V PowerShell Module
- Multipath I/O (MPIO)
- RSAT tools
Implementation
1. SAN Setup
The ME5084 was configured first to establish shared storage before any Windows cluster roles were installed.
- Configured dual storage pools (Pool A / Pool B per controller)
- Created LUNs: quorum disk, CSV volumes, large-capacity workload LUNs
- Created host group mappings for all 3 Hyper-V hosts
- Presented volumes to all hosts simultaneously
- Distributed large-volume LUNs across Pool A and Pool B to balance controller I/O
iSCSI fabric connections:
CTL-A0 (10.20.0.11) ←→ TOR-02 Port 20 ←→ HPV-NODE-01/02/03 iSCSI-A
CTL-A1 (10.20.0.12) ←→ TOR-01 Port 21 ←→ HPV-NODE-01/02/03 iSCSI-A
CTL-B0 (10.20.0.13) ←→ TOR-01 Port 20 ←→ HPV-NODE-01/02/03 iSCSI-B
CTL-B1 (10.20.0.14) ←→ TOR-02 Port 21 ←→ HPV-NODE-01/02/03 iSCSI-B
2. Hyper-V Role Installation
Installed identically on all three hosts.
- Installed Hyper-V role and PowerShell module
- Created external virtual switch with identical name on all nodes
- Confirmed NIC binding and switch visibility per host
Critical
Virtual switch naming must be identical across all cluster nodes. Mismatched names will silently block Live Migration.
3. Network Configuration
| Network | Purpose | NIC |
|---|---|---|
| iSCSI-A | Storage fabric A | Slot 1 Port 1 |
| iSCSI-B | Storage fabric B | Slot 7 Port 1 |
| NIC-A | Management + VM (LBFO pair) | Slot 1 Port 2 |
| NIC-B | Management + VM (LBFO pair) | Slot 7 Port 2 |
| Live Migration | Dedicated LM | Slot 1 Port 4 |
- Configured LBFO team (NIC-A + NIC-B) for management/VM traffic
- Assigned static IPs to all interfaces
- Verified reachability across all segments between nodes
- Confirmed iSCSI traffic is isolated from LM and management traffic
4. Failover Clustering Installation and Validation
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
Test-Cluster -Node HPV-NODE-01, HPV-NODE-02, HPV-NODE-03
Validation checks reviewed: storage visibility, network communication, OS compatibility, hardware supportability.
5. Cluster Creation and Quorum
New-Cluster -Name [CLUSTER-NAME] -Node HPV-NODE-01,HPV-NODE-02,HPV-NODE-03 -StaticAddress [CLUSTER-IP]
Set-ClusterQuorum -DiskWitness "Cluster Disk X"
- Disk witness selected (3-node cluster, odd-node quorum)
- CNO created in Active Directory
- Core cluster resources brought online
6. Cluster Shared Volumes (CSV)
Add-ClusterDisk -InputObject (Get-Disk | Where-Object PartitionStyle -eq "GPT")
Add-ClusterSharedVolume -Name "Cluster Disk X"
CSVs mount at:
7. Live Migration Configuration
Get-VMMigrationNetwork
Add-VMMigrationNetwork -Subnet [LM-SUBNET-CIDR] -Priority 1
Compare-VM -Name "[VMNAME]" -DestinationHost "[DESTINATION-HOST]"
| Setting | Value |
|---|---|
| Authentication | CredSSP |
| Performance Option | Compression |
| Migration Network | Dedicated LM subnet only |
| Storage NICs excluded | Yes |
8. VM Placement
VHDX naming convention:
Folder structure:
Troubleshooting
CNO Permissions — Cluster Creation Failed
Symptom: Cluster creation failed; could not register computer object in Active Directory.
Root Cause: The installing account lacked Create Computer Objects permission on the target OU in Active Directory.
Resolution: Granted the installing account Create Computer Objects on the target OU, then re-ran cluster creation successfully.
Best Practice
Pre-stage the CNO as a disabled computer account in the correct OU before running cluster creation. Grant the CNO account Full Control over its own object. This avoids permission issues entirely.
Live Migration Generic Failure
Symptom: Live Migration failed with a generic "Live migration failed" error. Compare-VM returned no incompatibilities.
Root Cause: Get-VMMigrationNetwork returned empty on all hosts — no Live Migration networks had been configured.
Resolution:
Diagnostic tip
If Compare-VM shows no issues but migration fails, always run Get-VMMigrationNetwork on the source host. An empty result means Hyper-V has no valid migration path.
VM Off-Critical: Cannot Connect to VM Configuration Storage
Symptom: VMs entered Off-Critical state with Cannot connect to virtual machine configuration storage.
Root Cause: VM config or VHDX files were deleted during initial setup iteration while Hyper-V and the cluster retained stale registrations.
Resolution:
Live Migration Network Scope Included Storage NICs
Symptom: Cluster showed iSCSI NICs listed as valid Live Migration paths.
Resolution: Removed iSCSI subnets from the Live Migration scope and restricted LM to the dedicated LM subnet exclusively.
LBFO Virtual Switch Deprecation Warning
Symptom: Hyper-V event logs warned about vSwitch attachment to LBFO team.
Context: LBFO is deprecated for Hyper-V vSwitch binding in favor of SET (Switch Embedded Teaming). The build proceeded with LBFO with consistent configuration. SET is the preferred design for future greenfield deployments.
SAN Pool Load Imbalance
Symptom: Large-capacity LUNs were unintentionally concentrated on one controller.
Resolution: Redistributed large-volume LUNs evenly across Pool A and Pool B to balance controller I/O.
Validation
| Test | Result |
|---|---|
Test-Cluster validation report |
Passed — no blocking errors |
| Shared storage visible from all 3 nodes | Confirmed |
| CSV mount paths accessible | Confirmed |
| Live Migration — all node pairs | Passed |
| Failover / planned node drain | Passed |
| Event log review post-build | Clean |
Key Learnings
- Designing and implementing Windows Server 2022 Hyper-V failover clusters
- Integrating Dell PowerVault ME5084 with Windows clustering over dual-fabric iSCSI
- Configuring Cluster Shared Volumes with dual-pool SAN storage layouts
- Implementing full network traffic separation across five logical networks
- Troubleshooting Live Migration failures, AD CNO permission issues, and stale VM registrations
- Using PowerShell for cluster validation, migration diagnostics, and cleanup
- Understanding LBFO vs SET NIC teaming implications in Hyper-V environments
Core principle: Successful Hyper-V clustering depends on consistency across every host — switch naming, storage presentation, cluster identity, migration networks, and AD permissions all need to align.
Tools & Technologies
| Category | Technology |
|---|---|
| Hypervisor | Microsoft Hyper-V (Windows Server 2022) |
| Clustering | Windows Failover Clustering |
| Shared Storage | Cluster Shared Volumes (CSV) |
| SAN | Dell PowerVault ME5084 |
| Protocol | iSCSI (10 GbE), dual fabric |
| NIC Teaming | LBFO |
| Diagnostics | PowerShell (FailoverClusters, Hyper-V modules) |
| Identity | Active Directory, DNS |
| OOB Management | Dell iDRAC |
| SAN Management | Dell PowerVault Manager |
| Event Diagnostics | Windows Event Viewer |
| Multipath I/O | MPIO |