Search
Join the Technical Preview Program
See how NVMe-oF removes iSCSI
bottlenecks in your HCI
The Best Hyperconverged
Infrastructure
(HCI) for Enterprise
ROBO, SMB & Edge
The Best Virtual SAN
for Enterprise ROBO, SMB & Edge

Node Fairness in Hyper-V: Practical Load Balancing for Clusters

  • February 27, 2025
  • 10 min read
StarWind Storage and Virtualization Engineer. Volodymyr specializes in solution architecture and data protection. With a technical background in applied physics, he provides unique analytical leadership in building resilient IT infrastructure. Volodymyr delivers expert guidance on optimizing virtualized environments, disaster recovery, and enterprise-scale storage systems.
StarWind Storage and Virtualization Engineer. Volodymyr specializes in solution architecture and data protection. With a technical background in applied physics, he provides unique analytical leadership in building resilient IT infrastructure. Volodymyr delivers expert guidance on optimizing virtualized environments, disaster recovery, and enterprise-scale storage systems.

Node Fairness, technically known as “Virtual Machine Load Balancing,” is the native Windows Server feature designed to prevent specific cluster nodes from carrying too much weight.1 Think of it as a built-in, lightweight alternative to System Center Virtual Machine Manager (SCVMM) Dynamic Optimization.

While SCVMM offers granular control (like powering down nodes to save electricity), Node Fairness provides the essential functionality: monitoring host resources and Live Migrating VMs from overloaded nodes to idle ones. It serves as a critical “set and forget” feature for clusters that don’t utilize the full System Center stack.

How It Actually Works

Node Fairness runs directly inside the Failover Cluster service. It evaluates the load on each host using two specific heuristics:

  • Memory pressure: This is usually the primary trigger. Since Hyper-V hosts typically exhaust RAM long before they run out of CPU cycles, memory distribution is the main driver for balancing events.
  • CPU utilization: Averaged over a five-minute window.

If a node exceeds your configured threshold and another node has capacity, the cluster initiates a Live Migration. Crucially, this process respects your affinity rules, Fault Domains, and “Possible Owner” settings. It will not break anti-affinity rules just to balance RAM usage.

The 30-Minute Interval

By default, the cluster evaluates load every 30 minutes. This interval is hard-coded.

It is vital to understand that Node Fairness is not a real-time scheduler. It will not save you from a sudden CPU spike or a “noisy neighbor” VM that acts up for ten minutes. It is designed solely to correct long-term drift, such as the imbalance that occurs naturally as VMs grow over weeks, or the “morning after” scenario following a maintenance window.

Operating Modes (AutoBalancerMode)

You have two ways to run this, controlled by the AutoBalancerMode property.

Balance on node join (Mode 1)

The cluster only balances when a node joins (or rejoins) the cluster. This is specifically useful for patching cycles. If you reboot Node A for updates, it returns to the cluster empty. Mode 1 ensures Node A picks up its share of the work immediately, but the balancer goes dormant afterwards.

Always balance (Mode 2)

This is the default for Server 2022. The cluster checks on node join and runs the 30-minute timer continuously. If you have unpredictable workloads, this ensures the cluster self-corrects throughout the day.

Balancing Aggressiveness: Avoiding the “Ping-Pong” Effect

You can tune the balancer’s sensitivity via the AutoBalancerLevel. Choosing the right level is a trade-off between perfectly distributed resources and the performance penalty of Live Migrations.

  • Low (Level 1 – Default): Moves VMs only when a host is >80% utilized.
  • Medium (Level 2): Threshold is >70%.
  • High (Level 3): Moves VMs if a host is >5% above the cluster average.

Recommendation: Stick to Low or Medium.

Setting aggressiveness to High is a common issue. It often leads to “VM churn” or ping-ponging, where VMs constantly migrate to chase a perfect 5% balance. Live Migration is not free, it consumes significant network bandwidth and CPU cycles on both the source and target hosts. You do not want to burn resources just to balance resources.

Note: The threshold applies to either CPU or Memory. If a host has 10% CPU load but 85% RAM usage, a Low setting (80% threshold) will still trigger a migration.

Configuration: PowerShell vs. GUI

While you can configure this in Failover Cluster Manager (Right-click Cluster > Properties > Balancer), PowerShell provides a cleaner way to verify settings across the cluster instantly.

Check current status:

PowerShell

Get-Cluster | Format-List AutoBalancerMode, AutoBalancerLevel

Configure for “Always Balance” with “Medium” aggression:

PowerShell

(Get-Cluster).AutoBalancerMode = 2 
(Get-Cluster).AutoBalancerLevel = 2

To disable it completely:

PowerShell

(Get-Cluster).AutoBalancerMode = 0

Note on Windows Admin Center (WAC): You can also configure this in WAC under Cluster Settings > Virtual Machine Load Balancing. It simply writes to the same PowerShell properties in the background.

Operational Realities

The “Memory Bully” Problem

Real-world logs often show that if you have a single massive VM (e.g., a 128GB SQL server) on a host, Node Fairness often hesitates to move it. The “cost” calculation of live migrating such a large memory footprint is high. If you have “Monster VMs,” use Anti-Affinity rules to pin them to separate hosts rather than relying on the balancer to figure it out.

Don’t Confuse Balance with Capacity

A common mistake is assuming that a “balanced” cluster is a “safe” cluster. Node Fairness spreads the load, but it does not create extra RAM. If you have 3 nodes running at 80% load, your cluster is balanced, but it is not redundant. If one node fails, the remaining two cannot absorb the workload (you need 120% capacity). Use Node Fairness to optimize performance, but always calculate your N-1 capacity for failover manually.

Verdict

Node Fairness is a competent tool for maintaining cluster hygiene without manual intervention. For most environments, the default Always Balance mode with Low (80%) aggressiveness is the correct configuration. It keeps hosts from red-lining without causing unnecessary migration traffic. Just remember that it corrects drift on a delay—it is not a replacement for proper capacity planning.

Found Volodymyr’s article helpful? Looking for a reliable, high-performance, and cost-effective shared storage solution for your production cluster?
Dmytro Malynka
Dmytro Malynka StarWind Virtual SAN Product Manager
We’ve got you covered! StarWind Virtual SAN (VSAN) is specifically designed to provide highly-available shared storage for Hyper-V, vSphere, and KVM clusters. With StarWind VSAN, simplicity is key: utilize the local disks of your hypervisor hosts and create shared HA storage for your VMs. Interested in learning more? Book a short StarWind VSAN demo now and see it in action!