Introduzione ai Cluster Sets in Windows Server 2019

I Cluster Sets sono una funzionalità che sarà disponibile il prossimo autunno nella nuova versione di Windows che si chiamerà Windows Server 2019. Si tratta di una tecnologia pensata per poter gestire diversi cluster contemporaneamente, al fine di aumentare la scalabilità orizzontale e di permettere di avere un numero maggiore di nodi del cluster in un singolo Datacenter. Da molti anni si parla infatti di Software Defined Datacenter (SDDC), che altro non sono che una serie di tecnologie che permettono di ottenere prestazioni e configurazioni migliorate grazie al fatto di non dipendere dall’hardware che gestiscono.

Attualmente Windows Server 2019 è in Preview ed è possibile partecipare al programma Insider per poterlo provare in anteprima. Coloro che volessero cimentarsi possono collegarsi all’indirizzo https://insider.windows.com/en-us/for-business-getting-started-server/ e dopo essersi registrati possono scaricare una copia Insider di Windows Server 2019 e di Windows 10.

Dopo aver scaricato la versione più recente di Windows Server Insider Preview dal link https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewserver potete cominciare fin da subito a testarne le nuove funzionalità.

Io utilizzerò in questo articolo la Build 17709 di Windows Server 2019 che è stata rilasciata un paio di giorni fa e mi servirò, per configurare il mio laboratorio, di una serie di script presenti al link https://github.com/Microsoft/WSLab/tree/master/Scenarios/S2D%20and%20Cluster%20Sets

È presente su GitHub un progetto Microsoft che consiste in una serie di script utili a configurare dei laboratori di test basati su Hyper-V (io ho utilizzato la mia macchina con Windows 10 e con Client Hyper-V per i lab), partendo soltanto dalla ISO di Windows Server e di Windows 10 e creando decine di scenari diversi, alcuni anche complessi (come quello che descriverò in questo articolo).

Scenario

Poiché Windows Server 2019 Cluster Sets servirà a gestire diversi cluster di Windows Server e ad amministrare alcune VM che gireranno nei cluster, è necessario creare un ambiente di laboratorio complesso. In questo ambiente verranno creati tre cluster (Member Clusters) configurati con Storage Spaces Direct (S2D), di cui ho già parlato nell’articolo Implementare Storage Spaces Direct in Windows Server 2016 con Microsoft Azure, in cui verranno distribuite delle macchine virtuali ed un cluster di gestione (Management Cluster) che si occuperà di gestire il Cluster Set Namespace SOFS, uno Scale-Out File Server dove verranno ospitate le VM.

Figura 1: Schema di funzionamento di Windows Server 2019 Cluster Sets

Uno degli obiettivi di Windows Server 2019 Cluster Sets è infatti quello di aumentare la scalabilità dei cluster che ospitano le VM e di fare in modo che cluster piccoli vengano raggruppato in una infrastruttura più grande. Le VM potranno essere spostate da un cluster ad un altro se è necessario fare della manutenzione o addirittura dismettere alcuni cluster, perché alla fine del ciclo di vita dell’hardware.

Figura 2: Le VM vengono posizionate su uno dei nomi dei diversi cluster e vengono memorizzate in uno Scale-Out File Server

Figura 3: Effettuare la manutenzione e la rimozione di un intero cluster diventa un’operazione molto semplice

Creazione del laboratorio di test

Dopo aver scaricato l’ultima build di Windows Server 2019 da https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewserver (la funzionalità Cluster Sets funziona solo con Windows Server Insider Preview build 17650 e successive), collegatevi alla pagina https://github.com/Microsoft/WSLab e scaricate gli script per la creazione del lab. Seguite dettagliatamente tutte le istruzioni riportate (ci sono anche dei video esplicativi).

Estraete gli script in una cartella e procuratevi il file di configurazione che sarà necessario per il laboratorio dei Cluster Sets dal link https://github.com/Microsoft/WSLab/tree/master/Scenarios/S2D%20and%20Cluster%20Sets

Figura 4: File necessari alla realizzazione del laboratorio

Modificate il file Labconfig.ps1 con il contenuto dello scenario che volete realizzare, come mostrato in figura:

Figura 5: Modifica del file Labconfig.ps1 con le configurazioni dello scenario da realizzare

Eseguite quindi il file 1_Prereq.ps1 con privilegi amministrativi e scaricate i prerequisiti richiesti, come mostrato in figura:

Figura 6: Download dei prerequisiti

Al termine del download dei prerequisiti eseguite con privilegi amministrativi il file 2_CreateParentDisks.ps1. Vi verrà richiesta la ISO di Windows Server 2019 e verranno creati due VHDX, uno con l’installazione di Windows Server 2019 Datacenter Full ed uno con l’installazione di Windows 2019 Datacenter Core. L’operazione dura diversi minuti e i due dischi si troveranno nella sottocartella ParentDisks, che verrà creata dallo script.

Figura 7: Esecuzione dello script 2_CreateParentDisks.ps1

Figura 8: Creazione dei due VHDX completata

Dopo la creazione dei VHDX, in automatico verrà creata una macchina virtuale dentro la quale verranno installati i ruoli di Domain Controller e di DHCP. L’operazione dura diversi minuti.

Figura 9: Creazione e configurazione della macchina virtuale che farà da Domain Controller

Alla fine della configurazione del Domain Controller sarà presente una cartella con la macchina virtuale creata. Il Domain controller potrà essere riutilizzato tutte le volte che volete, se desiderate provare scenari di laboratorio diversi, disponibili al link https://github.com/Microsoft/WSLab/tree/master/Scenarios .

Figura 10: Esecuzione dello script 2_CreateParentDisks.ps1 completata

Figura 11: Creazione del Domain Controller completata

Creazione delle VM da utilizzare nel laboratorio per Cluster Sets

Terminati i prerequisiti è ora possibile passare alla creazione delle VM che saranno utilizzate nel laboratorio. Eseguite lo script Deploy.ps1, che utilizzerà le configurazioni presenti nel file Labconfig.ps1. Modificate il file Labconfig.ps1 con il contenuto dello scenario che volete realizzare. Trovate lo scenario per la creazione e configurazione dei Cluster Sets al link https://github.com/Microsoft/WSLab/tree/master/Scenarios/S2D%20and%20Cluster%20Sets

Figura 12: Esecuzione dello Script Deploy.ps1

Dopo qualche minuto, saranno automaticamente create le 10 VM necessarie al nostro lab! Avviatele e aspettale il completamento della prima accensione. Le macchine sono state aggiunte al dominio corp.contoso.com, creato dal lab.

Figura 13: Esecuzione dello Script Deploy.ps1 completata

Figura 14: Creazione delle VM necessarie al lab di Windows Server 2019 Cluster Sets

Collegatevi ora alla macchina WSLabInsider17709-DC (il Domain Controller del laboratorio) con le credenziali che si trovano nel file Labconfig.ps1 (corp\LabAdmin con relativa password LS1setup!) e dall’interno della VM eseguite lo script PowerShell che si trova alla pagina https://github.com/Microsoft/WSLab/tree/master/Scenarios/S2D%20and%20Cluster%20Sets

Lo script provvederà ad installare sulle VM tutte le funzionalità richieste. Procuratevi un VHDX che verrà utilizzato per creare le macchine virtuali che gireranno nel Cluster (sotto forma di Nested VMs). Io ho usato Windows 2016 Nano Server, che non richiede troppe risorse. Durante l’esecuzione dello script vi verrà chiesto di fornire il percorso dove avete copiato il VHDX da usare come immagine master per le Nested VM e poi proseguirà tutto in maniera automatica. Verranno così creati i quattro Cluster richiesti dal nostro scenario (3 Member Cluster ed un Management Cluster). Fantastico!

Figura 15: Creazione dei Cluster dall’interno della VM WSLabInsider17709-DC

La creazione dei 3 cluster (Cluster1, Cluster2 e Cluster3) richiede diversi minuti e qualche riavvio, soprattutto a causa dell’installazione di Hyper-V all’interno delle VM del lab. Il quarto cluster, quello di Management, verrà creato in seguito.

Se dal Domain Controller lanciate la console del Failover Cluster Manager potrete amministrare i tre Cluster creati. Un avviso però vi consiglia di utilizzare Windows Admin Center, la console di management gratuita che è stata rilasciata qualche mese fa e di cui abbiamo parlato nell’articolo Windows Server 2019 e Windows Admin Center: le novità previste per il prossimo autunno

Figura 16: Console di Failover Cluster Manager e Windows Admin Center

Figura 17: Cluster creati dallo script di configurazione

Figura 18: Macchine virtuali creati nei nodi del Cluster

Potete scaricare Windows Admin Center dal link https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-center/understand/windows-admin-center. Io ho scaricato la versione Windows Admin Center Preview 1806, ma ho dovuto installarla su un’altra macchina perché non è possibile installarla su un Domain Controller.

Figura 19: Gestione del cluster effettuata dal Windows Admin Center

Creazione del Management Cluster

Il Management Cluster in un Cluster Set si occupa di rendere altamente disponibili le funzionalità che servono a gestire l’intero Cluster Set e il referral SOFS per il Cluster Storage Namespace. In più è completamente distinto dai diversi Member Server che si occupano di far girare le macchine virtuali. Per creare il Management Cluster (che chiameremo MgmtCluster) nel nostro laboratorio è sufficiente lanciare dal Domain Controller i seguenti comandi PowerShell:

$ClusterName=“MgmtCluster”
$ClusterIP=“10.0.0.220”
$ClusterNodes=1..3% {“Mgmt$_}
Invoke-Command -ComputerName $ClusterNodes -ScriptBlock {
Install-WindowsFeature -Name “Failover-Clustering”
}
New-Cluster -Name $ClusterName -Node $ClusterNodes -StaticAddress $ClusterIP

Successivamente eseguite il comando New-ClusterSet -name “MyClusterSet” -NamespaceRoot “MC-SOFS” -CimSession “MgmtCluster” -StaticAddress “10.0.0.221” per creare il Cluster Set Master su “MgmtCluster”.

Il Cluster Set Master si occuperà di coordinare le comunicazioni tra i diversi Member Cluster ed è anch’esso un ruolo altamente disponibile. In più verrà creato il Root Namespace chiamato MC-SOFS che sarà poi utilizzato per puntare alle condivisioni di rete SOFS offerte dai diversi nodi dei Member Cluster.

Figura 20: Management Cluster e relativi ruoli installati

A questo punto è necessario aggiungere i Member Cluster da gestire (Cluster1, Cluster2 e Cluster3) utilizzando il comando PowerShell

Add-ClusterSetMember -ClusterName Cluster1 -CimSession MyClusterSet -InfraSOFSName CL1-SOFS
Add-ClusterSetMember -ClusterName Cluster2 -CimSession MyClusterSet -InfraSOFSName CL2-SOFS
Add-ClusterSetMember -ClusterName Cluster3 -CimSession MyClusterSet -InfraSOFSName CL3-SOFS

Figura 21: Ruoli aggiunti al Cluster1 relativi al Cluster Set

In questo modo le condivisioni di rete sono tutte visibili dal percorso \\MC-SOFS

Figura 22: Tutte le condivisioni di rete offerte dal Member Cluster sono visibili dal percorso \\MC-SOFS

Spostamento delle VM nel Root Namespace

Adesso che abbiamo creato il Cluster Set è necessario spostare le VM che erano già ospitate dai Member Cluster, utilizzando la Storage Live Migration. Potete spostare tutte le VM con un semplice script ma nel nostro laboratorio la partenza e la destinazione dei dischi delle VM coincidono e per questo motivo utilizzeremo un workaround che semplicemente spegnerà le macchine, le rimuoverà mantenendo le configurazioni, cambierà il percorso dei dischi e ri-registrerà le VM nel Cluster.

$ClusterSet=“MyClusterSet”
$ClusterSetSOFS=“\\MC-SOFS”

#Grab all VMs from all nodes
$VMs=Get-VM -CimSession (Get-ClusterSetNode -CimSession $ClusterSet).Name

<# does not work
#perform storage migration to \\MC-SOFS
foreach ($VM in $VMs){
$NewPath=($vm.path).Replace(“c:\ClusterStorage”,$ClusterSetSOFS)
$VM | Move-VMStorage -DestinationStoragePath $NewPath
}
#>

#remove VMs and import again, but from \\MC-SOFS
#Shut down VMs

$VMs Stop-VM

#Remove VMs from cluster resources

Foreach ($VM in $VMs){
Remove-ClusterGroup -Cluster $VM.ComputerName -Name $VM.name -RemoveResources -Force
}

#remove VMs and keep VM config

Foreach ($VM in $VMs){
invoke-command -computername $VM.ComputerName -scriptblock {
$path=$using:VM.Path
Copy-Item -Path $path\Virtual Machines” -Destination $path\Virtual Machines Bak” -recurse
Get-VM -Id $Using:VM.id Remove-VM -force
Copy-Item -Path $path\Virtual Machines Bak\*” -Destination $path\Virtual Machines” -recurse
Remove-Item -Path $path\Virtual Machines Bak” -recurse
}
}

#Import again, but replace path to \\MC-SOFS

Invoke-Command -ComputerName (get-clustersetmember -CimSession $ClusterSet).ClusterName -ScriptBlock{
get-childitem c:\ClusterStorage -Recurse Where-Object {($_.extension -eq ‘.vmcx’ -and $_.directory -like ‘*Virtual Machines*’) -or ($_.extension -eq ‘.xml’ -and $_.directory -like ‘*Virtual Machines*’)} ForEach-Object -Process {
$Path=$_.FullName.Replace(“C:\ClusterStorage”,$using:ClusterSetSOFS)
Import-VM -Path $Path
}
}

#Add VMs as Highly available and Start

$ClusterSetNodes=Get-ClusterSetNode -CimSession $ClusterSet
foreach ($ClusterSetNode in $ClusterSetNodes){
$VMs=Get-VM -CimSession $ClusterSetNode.Name
$VMs.Name ForEach-Object {Add-ClusterVirtualMachineRole -VMName $_ -Cluster $ClusterSetNode.Member}
$VMs 
Start-VM
}

Figura 23: Posizione del disco PRIMA della Storage Migration

Figura 24: Posizione del disco DOPO la Storage Migration

Abilitazione della Kerberos Authentication per permettere la Live Migration

Per far in modo tale che le VM possano essere spostate accese da un nodo ad un altro è necessario abilitare la Kerberos Authentication su tutti i nodi dei Member Cluster, come ben documentato dall’articolo Set up hosts for live migration without Failover Clustering. È possibile farlo in maniera molto semplice lanciando lo script PowerShell:



#configure kerberos for shared-nothing live migration between all clusters
# https://technet.microsoft.com/en-us/windows-server-docs/compute/hyper-v/deploy/set-up-hosts-for-live-migration-without-failover-clustering

$ClusterSet=“MyClusterSet”
$Clusters=(get-clustersetmember -CimSession $ClusterSet).ClusterName
$Nodes=Get-ClusterSetNode -CimSession $ClusterSet
foreach ($Cluster in $Clusters){
$SourceNodes=($nodes where member -eq $Cluster).Name
$DestinationNodes=($nodes where member -ne $Cluster).Name

Foreach ($DestinationNode in $DestinationNodes){
$HostName $DestinationNode

$HostFQDN = (Resolve-DnsName $HostName).name Select-Object -First 1
Foreach ($SourceNode in $SourceNodes){
Get-ADComputer $SourceNode Set-ADObject -Add @{“msDS-AllowedToDelegateTo”=“Microsoft Virtual System Migration Service/$HostFQDN, “Microsoft Virtual System Migration Service/$HostName, “cifs/$HostFQDN, “cifs/$HostName}
}
}
}

#Switch to any authentication protocol https://blogs.technet.microsoft.com/virtualization/2017/02/01/live-migration-via-constrained-delegation-with-kerberos-in-windows-server-2016/

Foreach ($Node in $Nodes){
$GUID=(Get-ADComputer $Node.Name).ObjectGUID
$comp=Get-ADObject -identity $Guid -Properties “userAccountControl”

#Flip the ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION bit using powershell bitwise OR operation (-bor)

$Comp.userAccountControl = $Comp.userAccountControl -bor 16777216
Set-ADObject -Instance $Comp
}

#Switch to kerberos authentication for live migration

Set-VMHost -CimSession $Nodes.Name -VirtualMachineMigrationAuthenticationType Kerberos

Figura 25: Abilitazione della Kerberos Trusted Delegation su tutti i nodi dei Member Cluster

Come ultima operazione aggiungiamo l’account macchina di MyClusterSet al gruppo amministratori locali dei singoli nodi dei Member Cluster con il comando PowerShell

$ClusterSet=“MyClusterSet”
$MgmtClusterterName=(Get-ClusterSet -CimSession $ClusterSet).ClusterName
Invoke-Command -ComputerName (Get-ClusterSetNode -CimSession $ClusterSet).Name -ScriptBlock {
Add-LocalGroupMember -Group Administrators -Member $using:MgmtClusterterName$”
}

Figura 26: L’account macchina di MyClusterSet è stato aggiunto al gruppo amministratori locali dei singoli nodi dei Member Cluster

Registrazione delle VM al Cluster Set

Adesso è possibile registrare tutte le VM all’interno del Cluster Set in modo tale che possano essere gestite centralmente, eseguendo il comando PowerShell

#Register all existing VMs

$ClusterSet=“MyClusterSet”
Get-ClusterSetMember -CimSession $ClusterSet Register-ClusterSetVM -RegisterAll

Figura 27: registrazione delle VM nel Cluster Set completata

Conclusioni

I Cluster Sets permettono di scalare orizzontalmente il numero di nodi gestibili da un singolo cluster e permettono ai Datacenter di poter utilizzare migliaia di nodi, riducendo di fatto i punti di rottura e portando ad un nuovo livello il Software Defined Datacenter (SDDC), ottimizzando le risorse hardware e semplificandone di molto la gestione.