I recently learned from Hans Vredevoort that it is actually possible to define anti-affinity for Hyper-V virtual machines on a cluster. For example, you might want to force load-balanced virtual web servers to be on different nodes. You can do this by running commands such as:
cluster.exe group “VirtualWebServer1” /prop AntiAffinityClassNames="NLBCluster1"
cluster.exe group “VirtualWebServer2” /prop AntiAffinityClassNames="NLBCluster1"
This will create an anti-affinity object called NLBCluster1 and try to prevent both of the virtual web servers from being on the same Hyper-V host server in the same cluster. Sometimes a failover with reduced capacity will override this in order to keep the virtual machines running when there aren’t enough hosts left to meet demand.