Building a Windows Server Failover Cluster (WSFC) that spans two geographically separate datacenters is one of the more demanding infrastructure exercises you will face. Done right, it delivers synchronous replication with zero data loss (RPO = 0) and automatic failover. Done wrong, you get split-brain, stale quorum, and storage that disappears at the worst possible moment.
This guide walks through the complete architecture and deployment of a two-site WSFC on Nutanix AHV, using Nutanix Volume Groups over iSCSI as shared storage and Nutanix Metro Availability for synchronous replication between sites. Every step is production-tested, including the gotchas.
Architecture Overview
The topology is two Nutanix AHV clusters in separate datacenters, four Windows Server 2022 nodes (two per site), and a single logical failover cluster spanning both. Shared storage is provided by Nutanix Volume Groups (VGs) exposed over iSCSI — not Nutanix Files, which lacks SCSI-3 Persistent Reservation support required by WSFC.
Site A (Primary DC) Site B (Secondary DC)┌──────────────────────────┐ ┌──────────────────────────┐│ Nutanix Cluster A │◄──Sync────►│ Nutanix Cluster B ││ │ Metro │ ││ WSFC Node A1 │ │ WSFC Node B1 ││ WSFC Node A2 │ │ WSFC Node B2 ││ iSCSI Data Svc IP (A) │ │ iSCSI Data Svc IP (B) │└──────────────────────────┘ └──────────────────────────┘ │ │ └─────────────┬──────────────────────────┘ │ Nutanix Witness VM (Metro split-brain arbiter)WSFC Quorum: Disk Witness (quorum VG disk)
Why Volume Groups over iSCSI?
- SCSI-3 Persistent Reservations: Required by WSFC for shared disk access control. Nutanix VGs support this; Nutanix Files (SMB/NFS) does not.
- Metro Availability support: VGs can be included in a Metro protection domain for synchronous replication.
- Shared access mode: A single VG can be attached to multiple initiators simultaneously — essential for WSFC.
Key Components
| Component | Site A | Site B | Notes |
|---|---|---|---|
| Nutanix Cluster | Cluster A — AHV | Cluster B — AHV | Both managed by Prism Central |
| WSFC Nodes | Node-A1, Node-A2 | Node-B1, Node-B2 | Windows Server 2022 |
| Volume Groups | VG-WSFC-Quorum (2 GB), VG-WSFC-Data | Metro replica | Shared access enabled |
| Metro Availability | Active site | Passive replica | Synchronous — RPO = 0 |
| Witness VM | Deployed on Site A CVM VLAN | — | Dedicated Nutanix Witness Appliance OVA |
| WSFC Quorum | Disk Witness (quorum VG) | — | Node and Disk Majority |
Network Requirements
- Inter-site latency: RTT ≤ 5ms. Metro Availability is synchronous — every write must be acknowledged by both sites before completing.
- Replication VLAN: Dedicated VLAN between sites for Metro replication traffic, separate from VM and management traffic.
- iSCSI network: Separate from VM traffic. MTU 9000 (jumbo frames) recommended.
- WSFC heartbeat: Dedicated NIC or VLAN for node-to-node cluster communication.
- Witness VM connectivity: Must reach both clusters on port 2020.
Phase 1 — Nutanix Storage Preparation
Step 1.1 — Configure iSCSI Data Services IP
Each Nutanix cluster needs a dedicated iSCSI Data Services IP — a virtual IP shared across all CVMs that Windows nodes use as the iSCSI portal address. Configure in Prism Element on each site:
PE → Settings → Cluster Details → iSCSI Data Services IP → Save
Verify via CVM CLI:
ncli cluster info | grep -i iscsi
Step 1.2 — Create Volume Groups
Create two VGs in Prism Element → Storage → Volume Groups: a quorum disk (2 GB) and a data disk sized for your workload. Enable Shared Access and SCSI-3 Persistent Reservations on both. Note the IQN for each:
ncli vg ls | grep -A 15 'WSFC'
Step 1.3 — Register Windows Node IQNs on VGs
Get the initiator IQN from each Windows node:
(Get-InitiatorPort).NodeAddress
Register all four node IQNs on both VGs:
ncli vg attach-iscsi-client vg-name=VG-WSFC-Quorum client-address=<NODE-IQN>ncli vg attach-iscsi-client vg-name=VG-WSFC-Data client-address=<NODE-IQN>
Phase 2 — Metro Availability Configuration
Step 2.1 — Create Metro Protection Domain
In Prism Central → Data Protection → Metro Availability → Create Protection Domain. Set primary cluster to Site A, secondary to Site B, preferred site to Site A. Add both VGs under Entities → Add Volume Groups.
Step 2.2 — Deploy and Register the Witness VM
Use the dedicated Nutanix Witness Appliance OVA — not a standard AOS image. Deploy with Legacy BIOS (not UEFI). The Witness appliance is BIOS-based; using UEFI causes boot failure.
VM → Update → Boot Configuration → Legacy BIOS → Save → Power On
Register in Prism Central → Data Protection → Witness. The Witness VM must reach both clusters on port 2020. If you have no third site, deploying the Witness VM on the Site A CVM VLAN works — it provides arbitration for link failures while remaining reachable from Site B.
Step 2.3 — Verify Metro Status
Wait for status to reach In-sync before proceeding. Large VGs may take several hours to complete initial seeding. Do not attach WSFC nodes until confirmed.
Phase 3 — Windows iSCSI Connectivity
Step 3.1 — Enable MSiSCSI Service (all four nodes)
Start-Service MSiSCSISet-Service MSiSCSI -StartupType Automatic
Step 3.2 — Add Portals and Connect
# Site A nodes → Site A iSCSI Data Services IPNew-IscsiTargetPortal -TargetPortalAddress <SITE-A-ISCSI-IP> -TargetPortalPortNumber 3260# Site B nodes → Site B iSCSI Data Services IPNew-IscsiTargetPortal -TargetPortalAddress <SITE-B-ISCSI-IP> -TargetPortalPortNumber 3260Update-IscsiTargetGet-IscsiTarget # Both VG IQNs must appearConnect-IscsiTarget -NodeAddress <VG-WSFC-QUORUM-IQN> -IsPersistent $trueConnect-IscsiTarget -NodeAddress <VG-WSFC-DATA-IQN> -IsPersistent $trueGet-IscsiSession | Select TargetNodeAddress, IsConnected
Common issue: If Get-IscsiTarget returns no output, the iSCSI Data Services IP is most likely not configured on the target cluster. Verify with ncli cluster info | grep -i iscsi on the CVM.
Phase 4 — WSFC Cluster Creation
Step 4.1 — Initialize Disks (Site A, Node 1 only)
Get-Disk | Where-Object {$_.PartitionStyle -eq 'RAW'} | Initialize-Disk -PartitionStyle GPTNew-Partition -DiskNumber <QUORUM-DISK-NUM> -UseMaximumSize -AssignDriveLetterFormat-Volume -DriveLetter Q -FileSystem NTFS -NewFileSystemLabel 'WSFC-Quorum' -Confirm:$falseNew-Partition -DiskNumber <DATA-DISK-NUM> -UseMaximumSize -AssignDriveLetterFormat-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel 'WSFC-Data' -Confirm:$false
Step 4.2 — Create the Cluster
Test-Cluster -Node Node-A1,Node-A2,Node-B1,Node-B2 -Include "Storage","Network","Inventory"New-Cluster -Name WSFC-PROD ` -Node Node-A1,Node-A2,Node-B1,Node-B2 ` -StaticAddress <CLUSTER-IP> ` -NoStorageGet-ClusterAvailableDisk | Add-ClusterDisk
Step 4.3 — Configure Quorum and Node Weights
Set-ClusterQuorum -DiskWitness 'Cluster Disk 1'Get-ClusterQuorum # Expect: NodeAndDiskMajority# Verify all nodes have NodeWeight = 1Get-ClusterNode | Select Name, NodeWeight, State# Correct if any show 0(Get-ClusterNode 'Node-B1').NodeWeight = 1(Get-ClusterNode 'Node-B2').NodeWeight = 1
With four nodes (×1 vote each) + disk witness = 5 total votes. Majority = 3. Either site can independently maintain quorum with the disk witness.
Post-Deployment Validation Checklist
# Cluster healthGet-ClusterNode | Select Name, State, NodeWeightGet-ClusterResource | Select Name, State, ResourceTypeGet-IscsiSession | Select TargetNodeAddress, IsConnectedGet-ClusterNetwork | Select Name, State, Role
| Metro Check | Expected |
|---|---|
| Replication status | In-sync |
| Witness status | Connected |
| Active site | Site A |
| Both VGs in protection domain | Yes |
| Last sync time | < 30 seconds ago |
Mandatory planned failover test: Before production sign-off, execute a planned Metro failover via Prism Central → Protection Domain → Migrate. Confirm WSFC cluster roles move to Site B, then fail back. Only sign off after both directions are validated.
Common Issues and Resolutions
| Issue | Root Cause | Resolution |
|---|---|---|
| Witness VM fails to register — “Cannot reach remote service” | Wrong OVA image or UEFI boot mode | Use dedicated Nutanix Witness Appliance OVA. Set VM to Legacy BIOS in Prism. |
| Get-IscsiTarget returns no output | iSCSI Data Services IP not configured on cluster | Configure in PE → Settings → Cluster Details → iSCSI Data Services IP |
| Metro shows “Synchronizing” indefinitely | Initial seeding or bandwidth constraint | Wait for In-sync. Do not connect WSFC nodes until complete. |
| Prism Central Metro UI grey warning | PC UI cosmetic issue (PC 7.5) | Verify with ncli vg ls on Site B CVM. Functional if VG present and In-sync. |
| NetworkManager not running on Witness VM | Witness VM build does not use NetworkManager | Edit ifcfg files directly in /etc/sysconfig/network-scripts/ |
| WSFC split-brain after link failure | Incorrect NodeWeight or Witness VM unreachable | Verify NodeWeight = 1 on all nodes. Restore Witness VM connectivity. |
Steady-State Operations
Daily Health Check
# Quick cluster healthGet-ClusterNode | Select Name, StateGet-ClusterResource | Where-Object {$_.State -ne 'Online'}Get-IscsiSession | Where-Object {$_.IsConnected -eq $false}
In Prism Central, verify Metro protection domain shows In-sync and Witness Connected daily.
Monitoring Thresholds
| Metric | Alert Threshold | Action |
|---|---|---|
| Inter-site RTT latency | > 4ms | Investigate network immediately |
| Metro replication lag | > 10 seconds | Investigate bandwidth |
| Metro status | Not In-sync | Halt workload changes — escalate immediately |
| Witness VM status | Disconnected | Restore within 1 hour |
| iSCSI session dropped | Any disconnected | Reconnect immediately |
| VG free space | < 20% remaining | Expand VG in Prism |
Planned Maintenance Sequence
- Confirm Metro replication is In-sync
- Migrate WSFC cluster roles to the non-maintenance site
- Place Nutanix node(s) into maintenance mode in Prism
- Perform maintenance
- Exit maintenance mode
- Verify Metro returns to In-sync
- Fail back cluster roles to primary site
Summary
A two-site WSFC on Nutanix AHV with Metro Availability delivers enterprise-grade HA with RPO = 0 using native Nutanix capabilities — no external SAN required. The five decisions that make it work reliably:
- Nutanix Volume Groups over iSCSI (not Files) for SCSI-3 PR compliance
- Dedicated Nutanix Witness Appliance OVA with Legacy BIOS
- iSCSI Data Services IP on both clusters before any Windows connectivity
- Metro In-sync confirmed before WSFC node attachment
- Disk Witness quorum with NodeWeight = 1 on all nodes
With these in place, the cluster withstands site failures, link failures, and planned maintenance windows without data loss and with minimal manual intervention.


Leave a comment