Introduction
I have presented many time over the past tears on the new and enhanced capabilities of Microsoft Failover Clustering in Windows Server 2016 (Experts Live, Cloud & Datacenter Conference Germany, MicroWarehouse’s Windows Server 2016 Launch Event etc.) Feedback has shown me that there is still a lot of need for good failover cluster design and implementation guidance.
One area of enhancement is that you now have site-aware failover clusters in Windows Server 2016. That helps optimize the, availability, behavior and performance of the workload. It leveraged cluster fault domains and in this case those fault domains are the sites where the cluster nodes reside.
Set the preferred site for a CSV in a site-aware stretched failover cluster
You can leverage the site awareness to do all kind of configuration optimizations. You can set a preferred site creating a primary and a DRC site. The cluster behavior will optimize for that scenario. It will also help with situation like quorum split more easily and elegantly. You can create an “Active-Active” site configuration because a cluster groups, such as virtual machines can have their own preferred site.
As you can see in the picture above there is a thing called Storage Affinity. That means that VMs follow storage and are placed in same site where their associated storage resides. As such VMs will begin live migrating to the same site as their associated CSV after 1 minute. The CSV load balancer will distribute within the preferred site. That’s cool. But when setting a preferred site at the cluster group level like for virtual machines, how does one do this for a CSV?
It’s actually quite simple. A CSV is a cluster group, just like a VM is. So, for every CSV you can set that preferred site. You just grab the cluster group a bit differently. Let’s look at an example.
For a VM you’d do this: (Get-ClusterGroup -Name DidierTest01).PreferredSite = ‘Dublin’
Now for a CSV we go about it as follows:
Get-ClusterSharedVolume “Cluster Disk 1” | Get-ClusterGroup | Fl *
The preferred site has not been set yet. To set the preferred site for a CSV you can do the following:
$NTFS01 = Get-ClusterSharedVolume “Cluster Disk 1” | Get-ClusterGroup $NTFS01.PreferredSite = “Dublin”
$NTFS01.PreferredSite
You can remove a preferred site by setting it to $Null:
$NTFS01.PreferredSite = $Null
That was not to hard was it? There is one other thing to keep in mind. Do not forget to set up your site fault domains first and set the site for your cluster nodes before you start configuring preferred sites at the cluster group level or it will throw an error. That’s the minimal setup of a site-aware cluster you need to have in place before you can do more fine-grained configurations.
New-ClusterFaultDomain –Name Dublin –Type Site –Description “Primary” –Location “Dublin DC1”
New-ClusterFaultDomain –Name Cork –Type Site –Description “Secondary” –Location “Cork DC2″
Set-ClusterFaultDomain –Name Node-A –Parent Dublin
Set-ClusterFaultDomain –Name Node-B –Parent Dublin
Set-ClusterFaultDomain –Name Node-C –Parent Cork
Set-ClusterFaultDomain –Name Node-D –Parent Cork
If you don’t do this and try to set preferred sites at the cluster group level you’ll get an error like:
Exception setting “PreferredSite”: “Unable to save property changes for ‘e95ad724-97d3-4848-91db-198ab8312737’.
The parameter is incorrect”
At line:1 char:1
+ $NTFS01.PreferredSite = “Dublin”
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting
There is a lot more to say about site-aware stretched clusters but how to deal with setting a preferred site for a CSV must be the most common question I get on this subject. Well, now it’s published to help you all out. I hope it helps.
Did you recommend to use stretch vlan for 2-site configuration, or multi-vlan is better for auto-recovery scenarios?
Nice can of worms to open on a Sunday. Layer 3 all the way if it’s up to me. But do consider access to the services: https://blog.workinghardinit.work/2016/04/25/client-access-windows-server-2016-site-aware-stretched-clusters/ Choose wisely, maybe some small down time is preferable over complexity? Etc. Many network people feel the same way but the pressure for layer 2 from an application point of view is huge. The thing is they don’t see the other issues with stretched layer 2.
$NTFS01 = Get-ClusterSharedVolume “Cluster Disk 1” | Get-ClusterGroup $NTFS01.PreferredSite = “Dublin” no working!!
Any ideas?
Bar typo’s: did you define your sites and is one of them Dublin, have the cluster nodes been assigned a site and are one or more in “Dublin”?
I have tried all kinds of ways and it does not work
Does this work for someone?
What kind of stuff “does not work”? Setting preferred site for CSV? Worked just fine for me. But I use it in Server 1709 cluster.
Yup, afaik it has worked since W2K16 RTM (where site wareness was introduced) and any SAC release afterwards.
Hi, the fail is:
PS C:\Windows\system32> $NTFS01 = Get-ClusterSharedVolume “esb01_hyper_v_vm01.lun” | Get-ClusterGroup $NTFS01.PreferredS
ite = “ESB” $NTFS01.PreferredSite Get-ClusterGroup : Cannot validate argument on parameter ‘Name’. The argument is null, empty, or an element of the
argument collection contains a null value. Supply a collection that does not contain any null values and then try the command again.
At line:1 char:79
+ … 01_hyper_v_vm01.lun” | Get-ClusterGroup $NTFS01.PreferredSite = “ESB” …
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-ClusterGroup], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.FailoverClusters.PowerShell.GetClusterGroupCommand
Any ideas?
Are you sure that’s not just line break issues/typos? That not just a on line command and as mention do make sure the fault domains have been set up and the cluster nodes are assigned to their sites.
does not have typographical errors
PS C:\Windows\system32> $NTFS01
Name OwnerNode State
—- ——— —–
8e218712-0d9c-48b1-9d28-4482d952a2cd STEF Online
S C:\Windows\system32> Get-ClusterSharedVolume “esb01_hyper_v_vm01.lun” | Get-ClusterGroup | Fl *
ntiAffinityClassNames : {}
utoFailbackType : 0
oldStartSetting : 0
luster : ASTORIA
efaultOwner : 4294967295
escription :
roupType : ClusterSharedVolume
ailoverPeriod : 600000
ailoverThreshold : 4294967295
ailbackWindowEnd : 4294967295
ailbackWindowStart : 4294967295
aultDomain : 0
sCoreGroup : False
ame : 8e218712-0d9c-48b1-9d28-4482d952a2cd
wnerNode : STEF
ersistentState : 0
referredSite : {}
riority : 11000
esiliencyPeriod : 0
tate : Online
tatusInformation : 0
pdateDomain : 0
d : 080a1872-71b2-48e8-8db8-43d75ddfb94c
I have tried everything and I do not get it. Any ideas?
thanks for helping
Post the PoSh you use to configure the fault domains & assign preferred sites for the nodes and the CSV(s) here, line per line.
Will be the windows version 2016
He looked at other websites and there are people with the same problem.
I’m going crazy:(
This works on Windows Server 2016 RTM and beyond. Over and out.
Hey,
yes, you need to use the Cluster group name of the corresponding CSV.
For your specific CSV it is:
Name : 8e218712-0d9c-48b1-9d28-4482d952a2cd
You can get this using the following command:
Get-ClusterSharedVolume | Get-ClusterGroup
It will give you the Cluster group names of your CSV-s.
Once you have it, follow the standard way assigning preferred Sites to Groups, eg ->
(Get-ClusterGroup -Name 8e218712-0d9c-48b1-9d28-4482d952a2cd).PreferredSite = ‘ESB’
Verify it
Get-ClusterSharedVolume “esb01_hyper_v_vm01.lun” | Get-ClusterGroup | Fl *
Over and out.
Has anyone tested this together with SCVMM 2016? Does dynamic optimization take site awareness into consideration?