When using SCVMM with Windows Server 2016, the native Node Fairness is
automatically disabled. To view the current configuration for Node Fairness, examine
the cluster AutoBalancer properties. For example:
PS C:> Get‐Cluster | fl AutoBalancer*
AutoBalancerMode : 2
AutoBalancerLevel: 1
The other nice feature related to VM placement is Start Ordering. As the name
suggests, this capability enables VMs to be placed into sets and then dependencies to
be defined between sets of VMs. While my focus is on VMs, Start Ordering works with
any cluster resource group—for example, a SQL database. Once the dependencies are
defined, it allows an order to be determined for VMs. Consider a three-tiered
application with a web frontend, a middle layer, and then a database backend. The
database needs to start first, then the middle layer, and finally the web frontend. The
web frontend set would depend on the middle layer set, and the middle layer set
would depend on the database set. The database may also require AD, so the database
set would have a dependency on the domain controllers set. No special action is
needed when starting VMs. If you attempt to start a VM that is part of a dependency,
then the VMs upon which it is dependent (and those other dependent VMs required
by the dependent VMs, and so on) will all be started in the required order before the
VM you selected to start will actually attempt to start.
The first step is to create the sets:
New-ClusterGroupSet -Name <set name, e.g. WebServers>
Next add cluster resources (VMs in our case) to the set:
Add-ClusterGroupToSet -Name <set name, e.g. WebServers> ‐Group <name of
group, e.g. IISVM01>
Once all the sets are defined and resources added to the set, the dependencies are
defined. To make one set dependent on another set use the following:
Add-ClusterGroupSetDependency -Name <set name, e.g. WebServers> `
-Provider <set name, e.g. MiddleLayer>
To view the configuration of the sets and the dependencies, use the following
PowerShell:
Get-ClusterGroupSetDependency | ft Name, GroupNames, ProviderNames -AutoSize
You also can customize the delay between sets starting (which by default is 20
seconds) via the -StartDelay parameter and the Set-ClusterGroupSet cmdlet. It is
also possible to create a set as global, which means every other set is dependent upon
it without having to manually set a dependency. For example, consider your domain
controllers; these need to be started before any other set. The following code is an
example of setting a utility set as global. Note only VMs in a set will cause sets defined
as global to be started, and not VMs that are not in a set.