Mettre en place un stockage distribué avec S2D et Cluster de basculement en Core

Introduction

L'idée ici, c'est de mettre en place un espace de stockage distribué avec S2D.
(un volume D: par exemple, qui hébergera des partages pour des utilisateurs, ou des VM ou autre...).
Les données sont ainsi recopiées sur plusieurs serveurs simultanément.

En plus de cela, nous allons mettre en place la tolérance aux pannes avec un cluster de basculement.
Si l'un des serveurs du cluster tombe, un autre noeud doit prendre le relai et les données doivent ainsi être automatiquement disponibles à nouveau. (En gros, le volume D: doit remonter sur un autre serveur).

Les usagers ne voient généralement rien (peut-être une coupure de quelques secondes... et encore).


Pré-requis matériels

Pour utiliser S2D, il faut 2 serveurs minimum, 16 au maximum.

Chaque serveur doit disposer d'au moins 3 supports de stockage :


Avertissements importants

S2D est relativement facile à mettre en place sur des VM sous Hyper-V (dans des conditions 'basiques' car on est vite bloqués côté perfs), mais est beaucoup plus complexe à mettre en place sur du matériel physique.

La liste des serveurs officiellement compatibles avec S2D peut être consultée sur le catalogue microsoft officiel, et il faut bien s'assurer que le matériel a en plus (des certifications microsoft) la certification SDDC (standard ou premium).

On peut toujours tricher si le matériel n'est pas compatible (faire passer des disques de montage RAID ou autre pour des SAS etc..), mais souvent au prix de nombreuses heures de recherche et de trituration du registre, et ce n'est pas garanti par microsoft en cas de pépin.

Techniquement, S2D n'est pas vraiment conçu pour du 'virtuel', mais bien pour du matériel physique... et c'est un petit problème.

Bien qu'il s'agisse d'une solution fiable et évolutive, elle soulève (tout du moins chez moi) des inquiétudes :

Restons simple donc pour cette première approche : au diable le quorum et le cache pour commencer !


Configuration des VM pour chaque nœud

POUR CHACUN DE NOS 3 SERVEURS (futurs nœuds de notre cluster) :

(Notez que sur du matériel physique, les supports de stockages dévolus à S2D doivent être les mêmes modèles, même marque ! ça évite quelques ennuis.)


Architecture du lab

Soient 6 ordinateurs : 'C1', 'C2', 'C3', 'DC', 'CLIENT' et 'PAREFEU'

Conditions et pré-requis réseau

Dans les paramètres des ordinateurs nœuds (C1, C2 et C3) vous devez désactiver la mémoire dynamique et attribuer au moins 2 cœurs CPU virtuels.

(Suivant la puissance de votre hôte, il faudra sûrement raquer un peu côté RAM sur les serveurs Windows... (Ou bien, faîtes des nœuds en Core !))

Un utilisateur Active Directory 'marcel.dublog' a été créé sur DC
'marcel.dublog' peut donc se connecter depuis l'ordinateur CLIENT.

A l'issue du tuto, je vous laisserai créer un partage SMB pour cet utilisateur, stocké sur le volume S2D créé, afin qu'il puisse stocker ses données, et vous pourrez alors bousiller un nœud pour voir ce qui se passe.


ETAPE 0 : Préparation des VM

La configuration d'S2D est particulièrement intolérante aux errements. Suivez chaque étape.

1) Activer l'usurpation d'adresses MAC

On active l'usurpation d'adresses MAC dans les paramètres des VM pour C1, C2 et C3.
Dans les paramètres des VM, déroulez les spécificités de la carte réseau, vous trouverez l'option à cocher.

2) Activer la virtualisation imbriquée

On active la virtualisation imbriquée pour C1, C2 et C3
Pour rappel, sur l'hôte Hyper-V, on éteint toutes les VM, on ouvre PowerShell en tant qu'Administrateur puis on recherche les VM et on applique :

Get-VM

$vmNames = @('C1', 'C2', 'C3')

foreach ($vmName in $vmNames) {
    Set-VMProcessor -VMName $vmName -ExposeVirtualizationExtensions $true
}

3) Connexion en tant qu'Administrateur du domaine

Tout au long de la configuration, on se logue en tant qu'Administrateur du domaine sur toutes les machines pour plus de commodité : MONDOMAINE\Administrateur

Pour ceux qui feront la configuration via PowerShell, on le lance également en tant qu'Administrateur sur toutes les machines.

(Je considère que C1, C2, C3 et CLIENT sont déjà dans le domaine, que leurs noms d'hôtes sont bons, leur configuration IP aussi et que les disques supplémentaires pour S2D ont bien été créé et ajouté sur les nœuds Cx)


ETAPE 1 : Installation des rôles et fonctionnalités

Sur C1, C2 et C3, Installer :

En PowerShell, ça donne :

Install-WindowsFeature -Name Failover-Clustering, FS-FileServer -IncludeManagementTools

Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

ETAPE 2 : Création du cluster et activation de S2D

Création du cluster

Sur C1, Aller dans le gestionnaire de serveurs, Outils, gestionnaire de cluster de basculement :

En PowerShell, ça donne :

Test-Cluster -Node C1,C2,C3

New-Cluster -Name S2DCluster -Node C1,C2,C3 -NoStorage -StaticAddress 10.10.10.210

Activation de S2D

Sur C1, Activer S2D (pas le choix, c'est en PowerShell) :

Enable-ClusterS2D

(répondre 'O' - Oui)
Un message vous annonce qu'aucun disque pour le cache n'est trouvé sur aucun nœud, c'est normal, et on ne peut rien y faire avec des VM Hyper-V (à ma connaissance.. mais je serais ravi qu'on m'expliquer comment faire... ni le marquage comme disque Journal ou le forçage n'ont fonctionné chez moi)

Un pool S2D, regroupant tous nos supports de stockages dévolus à S2D a été créé.
Il faut maintenant créer un disque virtuel sur ce pool, puis un volume.

Création du disque virtuel

Sur C1, créer le disque virtuel sur le Pool créé.
Aller dans le gestionnaire de serveurs, cliquer sur Services de fichiers et de stockage, Pools de Stockage, Clic-droit sur notre pool S2D, Nouveau disque virtuel.

Parfois l'assistant de création d'un volume se lance, parfois pas, si ce n'est pas le cas, aller dans Disques, clic-droit sur le disque, Nouveau Volume, le nommer 'DATA_S2D' ou 'PARTAGES_S2D' ...
Le volume se monte.

En PowerShell, créer le disque virtuel S2D_VDISK :

New-VirtualDisk -StoragePoolFriendlyName 'S2D on S2DCluster' -FriendlyName 'S2D_VDISK' -ResiliencySettingName Mirror -NumberOfDataCopies 3 -UseMaximumSize -ProvisioningType Fixed

Créer le volume et le formater (il faut mettre le disque en mode maintenance etc..) :

$labelLecteur = 'DATA_S2D'
$VirtualDisk = Get-VirtualDisk -FriendlyName 'S2D_VDISK' -ErrorAction Stop
$disk = $VirtualDisk | Get-Disk
$ClusterDisk = Get-ClusterResource | Where-Object { $_.ResourceType -eq 'Physical Disk' -and $_.Name -like '*S2D_VDISK*' }

# Vérifier le disque de cluster trouvé
if ($ClusterDisk) {
    # Mettre le disque en mode de maintenance
    Suspend-ClusterResource -Name $ClusterDisk.Name
    # Formater le disque
    $partition = $disk | New-Partition -AssignDriveLetter -UseMaximumSize
    $partition | Format-Volume -FileSystem ReFS -NewFileSystemLabel '$labelLecteur' -Confirm:$false
    # Sortir le disque du mode de maintenance
    Resume-ClusterResource -Name $ClusterDisk.Name
} else {
    Write-Error 'Le disque de cluster n''a pas été trouvé.'
}

⬆️ Retour en haut de la page