Implementare Storage Spaces Direct in Windows Server 2016 con Microsoft Azure

In Windows Server 2016 verrà introdotta una nuova funzionalità relativa allo storage che si chiamerà Storage Spaces Direct (S2D). Questa funzionalità permetterà di creare sistemi di storage ad alta disponibilità utilizzando dischi locali e di fatto mostra il notevole investimento che Microsoft ha fatto per implementare il software-defined storage (SDS) utilizzando Windows Server.

La funzionalità sarà disponibile solo nella versione Datacenter, come già spiegato nell’articolo Windows Server 2016 – Quali sono le differenze tra la Standard Edition e la Datacenter Edition

Windows Server 2016 Technical Preview Storage Spaces Direct utilizza un minimo di 4 nodi a cui sono collegati solo dischi locali (SATA SSD e NVMe SSD) e non necessita di costoso storage condiviso. I diversi nodi sono semplicemente collegati tra di loro in rete ed utilizzando il protocollo SMB3 (servendosi anche di SMB Direct e SMB Multichannel) per scambiarsi i dati.

Figura 1: Storage Spaces Direct con dischi locali

In questa guida vi voglio mostrare come creare un Scale-Out File Server utilizzando Storage Spaces Direct (S2D), utilizzando macchine virtuali create su Microsoft Azure.

I passi che verranno descritti in questo articolo sono validi anche se volete testare la funzionalità su Hyper-V nel vostro laboratorio.

Il risultato finale del nostro laboratorio sarà quello mostrato in figura 2:

Figura 2: Scale Out File Server realizzato con Storage Spaces Direct

Per realizzare il laboratorio di test abbiamo bisogno di creare dal portale di Microsoft Azure (https://portal.azure.com) 5 macchine virtuali di tipo DS1_v2. Una delle macchine sarà il domain controller (S2D-DC1), mentre le altre 4 saranno i nodi del cluster (S2D-NODO1, S2D-NODO2, S2D-NODO3, S2D-NODO4). Alle 4 macchine che saranno i nodi del cluster collegheremo anche dei dischi aggiuntivi che utilizzeremo per implementare la funzionalità di Storage Spaces Direct.

Figura 3: Scelta della versione del sistema operativo: Windows Server 2016 Technical Preview 5 (TP5)

Come prima operazione creiamo il domain controller, chiamato S2D-DC1. Configuriamo la dimensione della VM, lo storage account, il networking e il network security group. Come creare una macchina virtuale su Azure è fuori dello scopo di questo articolo. Per maggiori informazioni potete leggere https://azure.microsoft.com/it-it/documentation/articles/virtual-machines-windows-hero-tutorial/

Figura 4: Creazione del Domain controller

Terminata la creazione della VM potete procedere a configurare la macchina come Domain Controller. Create un dominio con un nome a vostro piacimento (nel mio caso ho utilizzato demo.lab).

Segnatevi l’indirizzo IP che è stato dato alla vostra macchina virtuale che fa da domain controller (nel mio caso è 10.3.0.4) e modificate la Azure Virtual Network in modo tale che alle macchine virtuali venga assegnato un Custom DNS. Questo permetterà alle nuove VM che creerete di poter identificare il dominio demo.lab

Figura 5: Modifica della Virtual Network per la configurazione del Custom DNS

Continuate la creazione delle altre 4 macchine virtuali (ricordandovi di aggiungerle allo stesso Resource Group del Domain controller). Al termine delle operazioni otterrete una situazione come quella in figura:

Figura 6: Macchine virtuali create

Aggiungete alle 4 macchine virtuali dei dischi della dimensione di 128 GB (più che sufficienti per il nostro laboratorio).

Figura 7: Aggiunta del disco ai nodi del cluster

Dopo aver aggiunto al dominio demo.lab le 4 macchine virtuali che saranno i nodi del nostro cluster Storage Spaces Direct avrete una situazione come quella in figura:

Figura 8: Nodi aggiunti al dominio demo.lab

Creazione del Cluster

A questo punto i nodi sono pronti per formare un cluster. Per brevità e per farlo comunque in maniera “advanced” potete utilizzare Powershell. Ho commentato le cmdlet per rendere il codice più leggibile. Eseguo gli script per comodità sul nodo S2D-DC1. Come prima operazione potete aggiungere i Remote Server Administration Tools (RSAT) per gestire la funzionalità del Failover Clustering, come mostrato in figura:

Figura 9: Aggiunta dei Failover Clustering Tools

Terminata l’installazione aprite Powershell ISE con privilegi elevati ed incollate le seguenti cmdlet:

#Definisco i nodi del cluster
$nodes = (“S2D-NODO1”, “S2D-NODO2”, “S2D-NODO3”, “S2D-NODO4”)

#Installo la feature di Failover Cluster
icm $nodes {Install-WindowsFeature Failover-Clustering -IncludeAllSubFeature -IncludeManagementTools}

#Controllo che i nodi possano formare un cluster
Test-Cluster –Node $nodes –Include “Storage Spaces Direct”Inventory, Network“System Configuration”

#Creo un nuovo cluster
New-Cluster -Name S2DCluster -Node $nodes –NoStorage –StaticAddress 10.3.0.100

Al termine delle operazioni avrete creato il cluster S2DCluster, come mostrato in figura:

Figura 10: Creazione del Cluster S2D

Storage Spaces Direct

Siamo pronti per abilitare la funzionalità di Storage Spaces Direct (S2D). Ho notato che sia in Hyper-V che in Microsoft Azure i dischi collegati alle macchine riportano come MediaType il valore Unspecified. Storage Spaces Direct utilizza invece i due valori BusType e MediaType per configurare automaticamente lo storage pool, lo storage tiering e la cache. Infatti lanciando la cmdlet su uno dei nodi del cluster

#Verifica dei dischi collegati
Get-PhysicalDisk CanPool -EQ FT FriendlyName, BusType, MediaType, Size

ottengo il seguente risultato:

Figura 11: Verifica dei dischi collegati alla VM

Per ovviare a questo problema abilitate Storage Spaces Direct lanciando la seguente cmdlet su uno dei nodi del cluster:

#Abilitazione di Storage Spaces Direct
Enable-ClusterS2D -CacheState Disabled -AutoConfig:0 -SkipEligibilityChecks

Confermate nel prompt che vi appare cliccando su Yes to All

Figura 12: Abilitazione dello Storage Spaces Direct Cluster

Dopo aver abilitato la funzionalità noterete che nella console del Failover Clustering sono apparsi 4 Enclosures, ognuno dei quali fa riferimento a ogni singolo nodo del cluster

Figura 13: Enclosures nel Failover Cluster Manager

A questo punto siete pronti per creare uno storage pool utilizzando i dischi disponibili. Potete farlo semplicemente lanciando la cmdlet su uno dei nodi del cluster

#Creazione dello storage pool
New-StoragePool -StorageSubSystemFriendlyName *Cluster* -FriendlyName S2D -ProvisioningTypeDefault Fixed -PhysicalDisk (Get-PhysicalDisk CanPool -eq $true)

Il risultato è quello mostrato in figura:

Figura 14: Creazione del Pool di dischi

Siamo pronti ora per creare un nuovo volume, formattarlo REFS e trasformarlo in un Cluster Shared Volume. Ancora una volta una semplice cmdlet ci torna utilissima per lo scopo. Basta eseguire  su uno dei nodi del cluster

#Creazione del nuovo volume
New-Volume -StoragePoolFriendlyName S2D* -FriendlyName VDisk01 -FileSystem CSVFS_REFS -Size 100GB

Il risultato è mostrato in figura:

Figura 15: Creazione del volume

Terminata questa procedura abbiamo realizzato un disco da 100 GB che è distribuito su un’infrastruttura basata su Storage Spaces Direct costituita da 4 nodi

Creazione dello Scale-Out File Server

Scale-Out File Server è una funzionalità introdotta in Windows Server 2012 progettata per poter rendere sempre disponibili le condivisioni di rete, senza nessun downtime. In particolar modo la condivisione è presentata contemporaneamente da più nodi del cluster e quindi se uno dei nodi smettesse di funzionare chi si sta servendo della share non se ne accorge. Questa funzionalità è utilissima per poter mettere i dati delle applicazioni, i database, le macchine virtuali e viene utilizzata nelle soluzioni di Microsoft Azure storage.

Per installare uno Scale-Out File Server nel nostro laboratorio possiamo usare le seguenti cmdlet:

#Definisco i nodi del cluster
$nodes = (“S2D-NODO1”, “S2D-NODO2”, “S2D-NODO3”, “S2D-NODO4”)

#Installo il ruolo di File Server sui nodi
icm $nodes {Install-WindowsFeature FS-FileServer}

#Creazione di uno Scale-Out File Server
Add-ClusterScaleOutFileServerRole -Name S2D-SOFS

Terminata la configurazione dobbiamo solo creare una cartella condivisa, da inserire nello Cluster Shared Volume. Potrete farlo dal Failover Cluster Manager oppure usando la cmdlet:

#Creazione e condivisione di una cartella
New-Item -Path C:\ClusterStorage\Volume1\Data -ItemType Directory

New-SmbShare -Name Share1 -Path C:\ClusterStorage\Volume1\Data -FullAccess demo\nicferr

Il risultato è quello mostrato in figura:

Figura 16: Creazione di una cartella condivisa nello Scale-Out FIle Server

Conclusioni

Storage Spaces Direct rappresenta una grossa novità nel panorama del Software-defined Storage implementato in Windows Server e sarà sicuramente una funzionalità molto utilizzata, che trova scopi di utilizzo sia nelle piccole che nelle grandi aziende.