Cluster aggregated view in Windows Server 2012 R2 Storage Provider for an asymmetric storage configuration

Blog written by Sripresanna in the Storage, Network & Print Team.

 

Cluster aggregated view for Windows Storage Provider (Asymmetric storage configuration)

 

This is a continuation of previous blog, where I explained cluster aggregated view for Windows Storage Provider for symmetric storage configuration. We strongly encourage to use Symmetric storage configuration and this blog is just to illustrate how cluster aggregate feature (in Windows Server 2012 R2) will work for an Asymmetric storage configuration.

Consider the asymmetric storage configuration in the below cluster:

clip_image002

 

The cluster aggregated view for storage objects works the same way for symmetric and asymmetric storage (not fully shared storage across all cluster nodes) configurations. The two differences for asymmetric storage is that:

  1. All SAS based physical disks are shown in the cluster aggregated view though not all of them can be part of the same concrete storage pool, since there isn’t a common node where all are connected.
  • For example, if a SAS physical disk PD4 is connected only to cluster node N3, is not an OS disk, (what other criteria – size, no partitions) cluster UI will not show this disk as it cannot be added to the cluster (since it is not shared with any of the other cluster nodes). But the aggregated view (Get-PhysicalDisk) will show this disk.
  • This is because we cannot detect if the drive is truly intended to be connected just to that node or if the link from the drive to another cluster node is intermittently down.
  • The primordial pool of the cluster subsystem contains the aggregated set of drives with “CanPool” equals “true”. But creating a concrete pool from this may fail if just this criteria was used to pick the drives. Note that concrete pools can be formed only with drives that are
  • Physically connected to a given set of nodes.
  • All within the same storage subsystem

The cluster primordial pool will contain these Physical disks – {P1, P2, P3, P4}. To create a concrete pool on the cluster, the StorageNode  PhysicalDisk association should be used to determine the set of disks that are physically attached to a set of nodes (and CanPool = true) and then form the concrete pool with those Physical Disks. In this case such valid sets would be (Sample script in the last section )

N1-N2-N3/N1-N2/N2-N3/N1-N3/N1: {PD1, PD3}

N2: {PD1, PD2, PD3}, {PD1, PD2}, {PD2, PD3}, {PD1, PD3}, {PD1}, {PD2}, {PD3}

N3: {PD1, PD3, PD4}, {PD1, PD3}, {PD3, PD4}, {PD1, PD4}, {PD1}, {PD3}, {PD4}  

Here’s the asymmetric storage cluster which will be used to walkthrough the below workflow.

clip_image004

 

Two Storage Subsystems

 

This also has the local and cluster storage subsystems

clip_image006

clip_image008

PowerShell snippet to show the 2 Storage subsystem on each node

 

a. Enumerate physical disks in each subsystem

 

clip_image010

PowerShell snippet showing the Physical Disk in each Storage subsystem on node 1, 2, 3 and 4

 

b. Creating a Storage pool

 

The below two PowerShell snippet enumerates primordial pools in local and cluster Storage System. You will notice that primordial pool in cluster Storage System from all nodes show same output.

clip_image012

clip_image014

clip_image016

PowerShell snippet to create a pool on local storage system of node1 & enumerate

clip_image018

PowerShell snippet to create a pool on cluster subsystem from node1 & enumerate

 

Few things to note:

  • A pool can be created only using drives that belong to the same subsystem
  • A pool can be created using drives that are physically connected to a given set of nodes.
  • A pool created on a cluster subsystem is by default clustered (added to the cluster). To disable auto-clustering of a pool, the “EnableAutomaticClustering” flag needs to be set to “false” on the cluster subsystem

The below PowerShell snippet illustrates this.

clip_image020

Set-StorageSubsystem –EnableAutomaticClustering $false on the clustered subsystem

clip_image022

From then on, to add the pool to the cluster, the Add-ClusterResource cmdlet should be used.

 

c. Creating virtual disk

 

clip_image024

PowerShell snippet to enumerate pool in local Storage System, create Virtual Disk and enumerate it

clip_image026

PowerShell snippet to enumerate pool in local Storage System, create Virtual Disk and enumerate it

clip_image028

 

Script to generate sets

 

$count = Read-Host -Prompt "Enter number of nodes"
[String[]] $nodesarray = @()
For ($i=0; $i -lt $count; $i++)
{
  $nodesarray += Read-Host -Prompt "Enter node"
}
$temp = Get-StorageNode -name $nodesarray[0] | Get-PhysicalDisk | select UniqueId
$PD = $temp | select -expand UniqueId –Unique
$NPD = $PD
foreach ($element in $nodesarray)
{
  $temp = Get-StorageNode -name $element | Get-PhysicalDisk | select UniqueId
  $PD = $temp | select -expand UniqueId –Unique
  $NPD = $NPD | ?{$PD -contains $_}
}
$PD = @()
foreach ($element in $NPD)
{
  Write-Host $element
  $PD += Get-PhysicalDisk -UniqueId $element
}
$PD
Get-StorageSubSystem -FriendlyName "clu*" | New-StoragePool -FriendlyName "testpool" -PhysicalDisks $PD