Tuesday, 25 February 2020

Configuring Windows Server 2016 Storage Spaces Direct for SQL Server Failover Cluster


         Storage Spaces Direct is a new feature available in Windows 2016 Datacenter edition that enables to make a storage solution in High Availability with local storage of each node.

This article describes step-by-step procedure on how to configure Storage Spaces direct for Windows failover cluster.


Requirements to S2D cluster nodes:
  • Windows Server 2016 Datacenter edition;
  • At least two servers in a cluster;
  • In addition to the system drive, there must be at least three physical disks. All disks that you are going to add to the Storage Spaces Direct must be unformatted.

Preparing disks for Storage Spaces Direct:

Before we configure Storage Spaces Direct, we need to ensure the disks we are using are free of all partitions, otherwise they will not be included in the Storage Spaces Direct pool.


Servers: VM1 & VM2

Add empty volumes to each node:

VM1 

VM2



Now the new volumes will appear in the available disks in Storage Pool:


Note: PowerShell to find the Primordial pool (This is simply a holding pool for all unallocated disks that are connected to the server that you are currently managing. If you create a storage pool, you will be able to grab the disks from this pool to use in the new storage pool.)



Configure Storage Space Direct Cluster:

We have a functioning Windows cluster setup already, so now it’s time to setup Storage Spaces Direct.


Please note, this cmdlet will fail if you have less than 3 disks on the cluster nodes. In this scenario, there are two disks per node, a total of 4.


Creating Storage Pool in cluster via wizard:






Select the number of disks needed for pool creation. If you want to designate a physical disk as a hot spare, then select the “Hot Spare” allocation type instead of Automatic.


From above screenshots, we can see that we would not be able to proceed with config if selecting 2 disks, atleast 3 disks required to create a pool.


Note: Storage Space creation using PowerShell cmdlet

Below are a couple of PowerShell cmdlet examples that demonstrate the same provisioning action as described above using Server Manager. Create a storage pool using all the available physical disks. More information on pool creation using PowerShell cmdlet is here.

$PhysicalDisks = Get-StorageSubSystem -FriendlyName “Storage Spaces” | Get-PhysicalDisk -CanPool $True; 

New-StoragePool -FriendlyName CompanyData -StorageSubsystemFriendlyName “Storage Spaces*” -PhysicalDisks $PhysicalDisks;

From Failover Cluster Admin, we will now be able to see all the added physical disks from Storage Pool:


Create virtual disk (storage space):

Here, for testing environment, two volumes, one for data and one for logs have been created with 64KB allocation unit size, fixed provisioning and NTFS. SQL 2016 supports also using REFS however still don’t see any definitive documentation that recommends REFS over NTFS for SQL Server workloads.

New-Volume -StoragePoolFriendlyName "ClusterPool" -FriendlyName SQL17Data -FileSystem CSVFS_NTFS -AllocationUnitSize 65536 -Size 100GB -ProvisioningType Fixed -ResiliencySettingName Mirror

A small note on S2D storage options. It offers both two way and three-way mirror, by default two-way will be selected unless specified otherwise. This can be done through the PhysicalDiskRedundancy or the NumberofDataCopies parameters. A two-way mirror leaves more space available but can only sustain the loss of one disk, whereas 3-way can sustain the loss of two drives at the cost of more storage used.


You can also verify with PowerShell:

Get-ClusterSharedVolume

The CSV disks will show in Windows as two mountpoints under C:\ClusterStorage called Volume1 and Volume2. We can rename them to something more friendly:


We can verify the cluster shared volumes were created in the FCM GUI:


At this point, we’re good to go on the cluster and storage side. 

No comments:

Post a Comment