Ce laboratoire met en place un cluster Hyper-V avec Storage Spaces Direct (S2D) sans environnement Active Directory.
Les ressources et leurs caractéristiques sont les suivantes (à titre indicatif pour ce labo) :
Tous les serveurs (N1, N2, N3, QUORUM) sont reliés à un commutateur virtuel interne nommé COM_LAN. Le pare-feu IPFire est relié d'un côté à COM_EXT (vers l'extérieur) et de l'autre à COM_LAN (vers nos serveurs). Tous les serveurs (N1, N2, N3, QUORUM) sont installés en mode Core.
Quorum peut être un serveur Windows ou Linux, du moment que vous êtes en mesure de créer un partage SMB dessus.
Je vous fournis la totalité du code PowerShell nécessaire à la création du cluster de basculement Hyper-V avec S2D. Il s'agît de fonctions. Vous pouvez les copier/coller puis simplement appeler la fonction.
Vous retrouverez ci-dessous, à chaque grande étape, l'explication et/ou les scripts PowerShell nécessaires.
Sur l'hôte Hyper-V physique (ou l'hôte lab) où sont créées les VM N1, N2 et N3 :
function fACTIVER.VIRTUALISATION.IMBRIQUEE {
clear
Write-Host "##############################"
Write-Host "# ACTIVER LA VIRTUALISATION IMBRIQUEE POUR UN ORDINATEUR VIRTUEL"
Write-Host " "
# Obtenez la liste des ordinateurs virtuels disponibles
$vms = Get-VM
# Affichez les ordinateurs virtuels disponibles avec un numéro
Write-Host "--------------------------------------"
Write-Host "LISTE DES ORDINATEURS VIRTUELS DISPONIBLES"
Write-Host " "
for ($i = 0; $i -lt $vms.Count; $i++) {
Write-Host "$($i+1): $($vms[$i].Name)"
}
Write-Host " "
$selectedVMNumber = Read-Host "ENTRER LE NUMERO DE L'ORDINATEUR VIRTUEL POUR ACTIVER LA VIRTUALISATION IMBRIQUEE"
$VMName = $vms[$selectedVMNumber - 1].Name
# Vérifiez si l'ordinateur virtuel est éteint
$vmStatus = (Get-VM -Name $VMName).State
if ($vmStatus -eq "Off") {
Set-VMProcessor -VMName $VMName -ExposeVirtualizationExtensions $true
Write-Host " "
Write-Host "VIRTUALISATION IMBRIQUEE ACTIVEE AVEC SUCCES."
} else {
Write-Host "Erreur : L'ORDINATEUR VIRTUEL '$VMName' DOIT ETRE ETEINT POUR ACTIVER LA VIRTUALISATION IMBRIQUEE."
}
}
Répétez cette opération pour N1, N2 et N3.
Sur chaque serveur (N1, N2, N3, DC et QUORUM), vous pouvez soit :
function fCHANGER.NOM.ORDINATEUR {
########################################
# Changer le nom de l'ordinateur :
Clear-Host
Write-Host "########################"
Write-Host "# NOM DE L'ORDINATEUR"
Write-Host " "
$computerName = $env:COMPUTERNAME
Write-Host "NOM ACTUEL : $computerName"
Write-Host " "
$changeName = $null
while ($changeName -ne "O" -and $changeName -ne "N") {
$changeName = Read-Host "VOULEZ-VOUS LE CHANGER ? (O/N)"
Write-Host " "
}
if ($changeName -eq "O") {
$validName = $false
while (-not $validName) {
$newName = Read-Host "ENTRER LE NOUVEAU NOM"
if ($newName -match "^[a-zA-Z0-9-]{1,15}$") {
$validName = $true
Rename-Computer -NewName $newName -Force
Write-Host " "
$restart = $null
while ($restart -ne "O" -and $restart -ne "N") {
$restart = Read-Host "VOULEZ-VOUS REDEMARRER L'ORDINATEUR MAINTENANT ? (O/N)"
Write-Host " "
}
if ($restart -eq "O") {
Restart-Computer -Force
} else {
Write-Host "N'OUBLIEZ PAS DE REDEMARRER L'ORDINATEUR POUR PRENDRE EN COMPTE LE CHANGEMENT DE NOM."
}
} else {
Write-Host "NOM INVALIDE"
Write-Host " "
}
}
} else {
Write-Host "AUCUNE MODIFICATION APPORTEE."
}
}
Donnez-les noms exacts :
Redémarrez si nécessaire.
Toujours sur chaque serveur, en mode Core, vous pouvez utiliser sconfig, option Network Settings, ou utiliser la fonction :
function fCONFIGURATION.RESEAU {
Clear-Host
Write-Host "#########################"
Write-Host "# CONFIGURATION RESEAU"
Write-Host " "
$networkAdapters = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
$index = 0
$networkAdapters | ForEach-Object {
Write-Host "$index - $($_.Name)"
$index++
}
Write-Host " "
$selectedAdapterIndex = Read-Host "ENTRER LE NUMERO DE L'INTERFACE A CONFIGURER"
$selectedAdapter = $networkAdapters[$selectedAdapterIndex]
$newName = Read-Host "ENTRER LE NOUVEAU NOM DE L'INTERFACE (LAISSER VIDE POUR NE PAS CHANGER)"
if ($newName -ne "") {
Rename-NetAdapter -Name $selectedAdapter.Name -NewName $newName
$selectedAdapter = Get-NetAdapter | Where-Object { $_.Name -eq $newName }
}
$configurationChoice = Read-Host "TAPER 'DHCP' OU 'STATIQUE'"
if ($configurationChoice -eq "DHCP") {
Set-NetIPInterface -InterfaceAlias $selectedAdapter.Name -Dhcp Enabled
Clear
Write-Host "LA CARTE RESEAU A ETE CONFIGUREE VIA DHCP."
}
elseif ($configurationChoice -eq "STATIQUE") {
Write-Host
Write-Host "(IL VOUS FAUDRA ENTRER 2 FOIS VOTRE ADRESSE IP, C'EST NORMAL)"
Write-Host
$ipAddress = Read-Host "ENTRER L'IP (EX : 192.168.10.250)"
$subnetMask = Read-Host "ENTRER LE PREFIX (EX : 24)"
$gateway = Read-Host "ENTRER L'IP DE LA PASSERELLE (EX : 192.168.10.1)"
$dns1 = Read-Host "ENTRER L'IP DU DNS PRINCIPAL (LAISSER VIDE SI AUCUN)"
$dns2 = Read-Host "ENTRER L'IP DU DNS SECONDAIRE (LAISSER VIDE SI AUCUN)"
New-NetIPAddress -InterfaceAlias $selectedAdapter.Name -IPAddress $ipAddress -PrefixLength $subnetMask -DefaultGateway $gateway
if ($dns1 -ne "") {
Set-DnsClientServerAddress -InterfaceAlias $selectedAdapter.Name -ServerAddresses $dns1, $dns2
}
Clear
Write-Host "LA CARTE RESEAU A ETE CONFIGUREE."
}
}
Pour ce labo, vous avez indiqué :
Vérifiez la connectivité par ping sur votre réseau local.
Pour automatiser, vous pouvez utiliser la fonction suivante :
function fMAJ {
if (-not (Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue)) {
Write-Host "NuGet N'EST PAS INSTALLE. INSTALLATION EN COURS..."
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
}
if (-not (Get-PSRepository -Name PSGallery -ErrorAction SilentlyContinue)) {
Write-Host "LE REFERENTIEL PSGallery N'EST PAS CONFIGURE. CONFIGURATION EN COURS..."
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
}
if (-not (Get-Module -Name PSWindowsUpdate -ListAvailable -ErrorAction SilentlyContinue)) {
Write-Host "LE MODULE PSWindowsUpdate N'EST PAS ENCORE INSTALLE. INSTALLATION EN COURS..."
Install-Module -Name PSWindowsUpdate
}
Import-Module PSWindowsUpdate
# Passe en mode manuel pour les mises à jour
$RegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
Set-ItemProperty -Path $RegPath -Name NoAutoUpdate -Type DWord -Value 1
Restart-Service -Name wuauserv -Force
Write-Host "LE MODE DE MISE-A-JOUR A ETE DEFINI SUR MANUEL"
# Installation des mises à jour trouvées
Install-WindowsUpdate -AcceptAll -AutoReboot
# Désactivation à la fin
Set-ItemProperty -Path $RegPath -Name NoAutoUpdate -Type DWord -Value 1
Set-ItemProperty -Path $RegPath -Name AUOptions -Type DWord -Value 1
Restart-Service -Name wuauserv -Force
Write-Host "LES MISES-A-JOUR ONT ETE DESACTIVEES"
Write-Host "RECHERCHE DES MISES-A-JOUR TERMINEE"
}
Exécutez fMAJ sur chaque serveur et redémarrez si nécessaire.
Sur chaque serveur (Core ou GUI) :
function fINSTALLER.ROLE.HYPERV {
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
}
Ce rôle est requis pour S2D (entre autres, car Storage Spaces Direct repose sur la couche fichiers, CSV, etc.) :
function fINSTALLER.SERVEUR.FICHIER {
Install-WindowsFeature -Name FS-FileServer -IncludeManagementTools
}
Faites-le sur N1, N2, N3, QUORUM.
function fINSTALLER.FONCTIONNALITE.CLUSTER.BASCULEMENT {
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
}
Faites-le sur N1, N2, N3.
Etant donné que nous n'utilisons pas d'environnement Active Directory, il est nécessaire que chaque nœud connaissance l'enregistrement DNS des autres noeuds, ainsi que du cluster.
Vous devez donc ajouter ces enregistrements au fichier hosts sur chaque noeud.
function fAJOUTER.HOSTS {
param (
[string]$IP,
[string]$Nom
)
# Vérifiez si le fichier hosts existe
$HostsFile = "C:\Windows\System32\drivers\etc\hosts"
if (Test-Path -Path $HostsFile) {
# Demandez à l'utilisateur d'entrer un nom d'hôte
$Nom = Read-Host "ENTRER UN NOM D'HOTE"
# Demandez à l'utilisateur d'entrer une adresse IP
$IP = Read-Host "ENTRER SON IP"
# Créez la ligne à ajouter dans le fichier hosts
$LineToAdd = "$IP`t$Nom"
# Ajoutez la ligne au fichier hosts
Add-Content -Path $HostsFile -Value $LineToAdd
Write-Host "HOTE AJOUTE."
} else {
Write-Host "FICHIER HOSTS NON TROUVE"
}
}
New-Alias -Name AJOUTER.HOSTS -Value fAJOUTER.HOSTS
Vous pouvez créer le cluster via l'interface graphique (Failover Cluster Manager) ou en PowerShell. Voici une fonction exemplaire :
function fCREER.CLUSTER.HYPERV {
Clear-Host
Write-Host "| ========= -------------------------------------- ========= |" -ForegroundColor Cyan
Write-Host "| ========= CREATION D'UN CLUSTER HYPER-V ========= |" -ForegroundColor Cyan
Write-Host
Write-Host "| CONFIRMEZ-VOUS LES PRE-REQUIS SUIVANTS ?"
Write-Host "| ---------------------------------------"
Write-Host "| - 2 SERVEURS (A MINIMA) DE CONFIGURATION IDENTIQUE"
Write-Host "| - LES SERVEURS ONT-ILS ETE CORRECTEMENT RENOMME ?"
Write-Host "| - LES MAJ ONT-ELLES ETE FAITE SUR CHAQUE NOEUD ?"
Write-Host "| - LE ROLE HYPER-V EST-IL INSTALLE SUR CHAQUE NOEUD ?"
Write-Host "| - LE ROLE SERVEUR DE FICHIERS EST-IL INSTALLE SUR CHAQUE NOEUD ?"
Write-Host "| - LA FONCTIONNALITE DE CLUSTERING DE BASCULEMENT EST-ELLE INSTALLEE SUR CHAQUE NOEUD ?"
Write-Host "| - TOUS LES NOEUDS ONT-ILS ETE JOINT A UN MEME DOMAINE ACTIVE DIRECTORY ?"
Write-Host "| (OU AVEZ-VOUS FAIT UN ENREGISTREMENT DNS DANS LE FICHIER HOSTS DE CHAQUE NOEUD ?)"
Write-Host "| (ET Y AVEZ-VOUS EGALEMENT PRECISE L'ENREGISTREMENT DNS DU FUTUR CLUSTER ?)"
Write-Host "| - VOUS NE DEVEZ EXECUTER CETTE FONCTION QUE SUR UN SEUL DES NOEUDS DU FUTUR CLUSTER."
Write-Host "| (DE PREFERENCE, LE NOEUD N1)"
Write-Host
Write-Host "| RAPPEL"
Write-Host "| ------"
Write-Host "| - CE SCRIPT NE GERE NI LA CONFIGURATION DU QUORUM, NI LE STOCKAGE DISTRIBUE"
Write-Host "| - SI VOUS DISPOSEZ D'INTERFACES INTER-NOEUDS (POUR S2D), VOUS DEVREZ INDIQUER LE RESEAU"
Write-Host "| DANS CETTE FONCTION AFIN DE L'EXCLURE DE L'ADMINISTRATION DU CLUSTER"
Write-Host
Write-Host "| ========= -------------------------------------- ========= |" -ForegroundColor Cyan
$confirm = Read-Host "| SI TOUT EST OK, VOUS POUVEZ CONTINUER (O/N)"
switch ($confirm) {
"O" { continue }
"N" { return }
default {
return
}
}
Write-Host
# Demander à l'utilisateur d'entrer les noms des serveurs à mettre en cluster, séparés par une virgule
$nodes = Read-Host "VEUILLEZ ENTRER LES NOMS DES SERVEURS A METTRE EN CLUSTER, SEPARES PAR UNE VIRGULE"
# Séparer les noms des noeuds
$nodesArray = $nodes.Split(',')
# vérifier que chaque noeud existe et est accessible
foreach ($node in $nodesArray) {
if (Test-Connection -ComputerName $node -Count 1 -Quiet) {
Write-Output "$node EST ACCESSIBLE."
} else {
Write-Error "$node N'EST PAS ACCESSIBLE. VEUILLEZ VERIFIER LE NOM ET LA CONNECTIVITE DU NOEUD."
return
}
}
# Installer les outils RSAT de gestion des clusters
Write-Host
try {
Install-WindowsFeature -Name RSAT-Clustering -IncludeAllSubFeature -Verbose
Write-Output "LES OUTILS RSAT DE GESTION DES CLUSTERS ONT ETE INSTALLES AVEC SUCCES."
} catch {
Write-Error "UNE ERREUR S'EST PRODUITE LORS DE L'INSTALLATION DES OUTILS RSAT DE GESTION DES CLUSTERS : $_"
return
}
# Lancer le test du cluster
try {
Test-Cluster -Node $nodesArray
Write-Output "LE TEST DU CLUSTER A ETE LANCE AVEC SUCCES."
} catch {
Write-Error "UNE ERREUR S'EST PRODUITE LORS DU TEST DU CLUSTER : $_"
return
}
Write-Host
# Demander à l'utilisateur d'entrer l'Adresse IP du futur cluster
$ClusterIPaddress = Read-Host "VEUILLEZ ENTRER L'ADRESSE IP STATIQUE DE GESTION DU FUTUR CLUSTER"
# Demander à l'utilisateur d'entrer un nom pour le futur cluster
$ClusterName = Read-Host "VEUILLEZ ENTRER UN NOM POUR LE FUTUR CLUSTER"
# Convertir l'adresse IP en une collection de chaînes
$ClusterIPaddressCollection = New-Object System.Collections.Specialized.StringCollection
$ClusterIPaddressCollection.Add($ClusterIPaddress)
# Demander à l'utilisateur s'il souhaite exclure un réseau
$excludeNetwork = Read-Host "SOUHAITEZ-VOUS EXCLURE UN RESEAU SPECIFIQUE DE LA GESTION DU CLUSTER (Ex : UN RESEAU INTER-NOEUDS) ? (O/N)"
if ($excludeNetwork -eq "O") {
# Demander à l'utilisateur quel réseau exclure
$networkToExclude = Read-Host "ENTREZ LE RESEAU A EXCLURE (ex : 10.172.172.0/29)"
# Conversion explicite en StringCollection
$NetworkToExcludeCollection = New-Object System.Collections.Specialized.StringCollection
$NetworkToExcludeCollection.Add($networkToExclude)
# EXCLUSION EXPLICITE DU RESEAU
try {
New-Cluster -Name $ClusterName `
-Node $nodesArray `
-StaticAddress $ClusterIPaddressCollection `
-IgnoreNetwork $NetworkToExcludeCollection `
-Verbose
Write-Output "Le cluster '$ClusterName' A ETE CREE AVEC SUCCES AVEC EXCLUSION DE RESEAU."
} catch {
Write-Error "UNE ERREUR S'EST PRODUITE LORS DE LA CREATION DU CLUSTER : $_"
return
}
} else {
# Création normale sans exclusion
try {
New-Cluster -Name $ClusterName `
-Node $nodesArray `
-StaticAddress $ClusterIPaddressCollection `
-Verbose
Write-Output "Le cluster '$ClusterName' A ETE CREE AVEC SUCCES SANS EXCLUSION DE RESEAU."
} catch {
Write-Error "UNE ERREUR S'EST PRODUITE LORS DE LA CREATION DU CLUSTER : $_"
return
}
}
Start-Sleep -Seconds 10
Get-ClusterNode -Cluster "$ClusterName"
$clusterIP = (Get-ClusterResource -Cluster $clusterName | Where-Object { $_.ResourceType -eq "IP Address" } | Get-ClusterParameter -Name "Address").Value
Write-Output "L'ADRESSE IP DU CLUSTER $clusterName EST : $clusterIP"
}
New-Alias -Name CREER.CLUSTER.HYPERV -Value fCREER.CLUSTER.HYPERV
Nommez le cluster : HCIcluster, et attribuez-lui une IP libre (ex: 10.10.10.40). Vous devez respecter ce que vous avez entré dans l'enregistrement DNS de chaque noeud à l'étape précédente surtout !
N'entrez pas de réseau à exclure de l'administration. La fonction vous le propose pour des configurations plus complexes. Nous n'en avons pas besoin ici.
Sur chaque hôte Hyper-V (N1, N2, N3), ouvrez une session PowerShell et exécutez :
New-VMSwitch -Name "COM_EXT" -NetAdapterName "<nom_de_votre_interface>" -AllowManagementOS $true
Dans un labo virtuel (virtualisation imbriquée), vous pouvez devoir sélectionner la carte réseau (ou l'interface) qui sort vers votre IPFire (COM_EXT). Vérifiez dans Get-NetAdapter quel est le nom de l'interface à utiliser.
Dans votre hôte physique ou sur votre application d'hypervision (Hyper-V Manager) :
Sur chaque noeud (N1, N2, N3), exécutez la fonction suivante après avoir vérifié que vos disques additionnels sont bien détectés (via Get-Disk ou Get-PhysicalDisk) :
function fPREPARER.DISQUES.S2D {
Clear-Host
Write-Host "| ========= -------------------------------------- ========= |" -ForegroundColor Cyan
Write-Host "| ========= PREPARER LES DISQUES POUR S2D ========= |" -ForegroundColor Cyan
Write-Host
Write-Host "| - Au moins un disque pour S2D sur chaque noeud"
Write-Host "| - Même nombre de disques identiques sur chaque noeud"
Write-Host "| - Cluster déjà opérationnel"
Write-Host " "
$confirm = Read-Host "| SI TOUT EST OK, VOUS POUVEZ CONTINUER (O/N)"
if ($confirm -ne "O") { return }
$computerName = $env:COMPUTERNAME
Invoke-Command ($computerName) {
Update-StorageProviderCache
Get-StoragePool | ? IsPrimordial -eq $false | Set-StoragePool -IsReadOnly:$false -ErrorAction SilentlyContinue
Get-StoragePool | ? IsPrimordial -eq $false | Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false -ErrorAction SilentlyContinue
Get-StoragePool | ? IsPrimordial -eq $false | Remove-StoragePool -Confirm:$false -ErrorAction SilentlyContinue
Get-PhysicalDisk | Reset-PhysicalDisk -ErrorAction SilentlyContinue
Get-Disk | ? Number -ne $null | ? IsBoot -ne $true | ? IsSystem -ne $true | ? PartitionStyle -ne RAW | % {
$_ | Set-Disk -isoffline:$false
$_ | Set-Disk -isreadonly:$false
$_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false
$_ | Set-Disk -isreadonly:$true
$_ | Set-Disk -isoffline:$true
}
Get-Disk | Where Number -Ne $Null | Where IsBoot -Ne $True | Where IsSystem -Ne $True | Where PartitionStyle -Eq RAW | Group -NoElement -Property FriendlyName
} | Sort -Property PsComputerName, Count
}
Répétez sur N1, N2 et N3.
Cette commande s'exécute une seule fois (typiquement sur le noeud 1, N1). Elle va scanner le cluster, trouver les disques en RAW non attribués et construire un pool S2D.
function fACTIVER.S2D {
Clear-Host
Write-Host "| ========= ACTIVER S2D ========= |"
$confirm = Read-Host "| SI TOUT EST OK, VOUS POUVEZ CONTINUER (O/N)"
if ($confirm -ne "O") { return }
Enable-ClusterS2D
Start-Sleep 10
$poolName = (Get-StoragePool | Where-Object FriendlyName -Like "S2D on *").FriendlyName
Write-Host "| LE POOL S2D CREE SE NOMME : $poolName"
Pause
}
Sur N1 (ou le noeud où vous administrez) :
function fCREER.VDISK.S2D {
Clear-Host
Write-Host "| ========= CREER UN DISQUE VIRTUEL POUR S2D ========= |"
$confirm = Read-Host "| SI TOUT EST OK, VOUS POUVEZ CONTINUER (O/N)"
if ($confirm -ne "O") { return }
$ndisk = Read-Host "| COMBIEN DE DISQUES DEVOLUS A S2D PAR NOEUD AVEZ-VOUS ?"
switch ($ndisk) {
"1" {
$poolName = (Get-StoragePool | Where-Object FriendlyName -Like "S2D on *").FriendlyName
Write-Host "| - CREATION D'UN VDISK MIROIR A RECOPIE DOUBLE"
New-VirtualDisk -StoragePoolFriendlyName $poolName `
-FriendlyName "S2D_VDISK" `
-ResiliencySettingName Mirror `
-NumberOfDataCopies 2 `
-UseMaximumSize `
-ProvisioningType Fixed
}
"2" {
$poolName = (Get-StoragePool | Where-Object FriendlyName -Like "S2D on *").FriendlyName
Write-Host "| - CREATION D'UN VDISK MIROIR A RECOPIE TRIPLE"
New-VirtualDisk -StoragePoolFriendlyName $poolName `
-FriendlyName "S2D_VDISK" `
-ResiliencySettingName Mirror `
-NumberOfDataCopies 3 `
-UseMaximumSize `
-ProvisioningType Fixed
}
default {
Write-Host "| CHOIX INVALIDE. VEUILLEZ REESSAYER." -ForegroundColor Yellow
Pause
}
}
Pause
}
Dans votre cas, vous avez 2 disques par noeud. Cela permettra du triple miroir (3 copies répliquées entre 3 noeuds).
Toujours depuis N1 :
function fCREER.VOLUME.VDISK.S2D {
$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*" }
if ($ClusterDisk) {
Suspend-ClusterResource -Name $ClusterDisk.Name
$partition = $disk | New-Partition -AssignDriveLetter -UseMaximumSize
$partition | Format-Volume -FileSystem ReFS -NewFileSystemLabel "$labelLecteur" -Confirm:$false
Resume-ClusterResource -Name $ClusterDisk.Name
} else {
Write-Error "Le disque de cluster n'a pas été trouvé."
}
Pause
}
Cela va créer un volume ReFS sur votre nouveau disque virtuel Storage Spaces Direct.
Votre volume S2D apparaît alors sur chacun de vos noeuds dans C:\ClusterStorage\S2D_VDISK Vous devrez donc stocker vos VM dans cet emplacement.
(Si vous choisissez de placer le partage SMB pour le quorum sur le contrôleur de domaine (ou sur un autre serveur Windows), faîtes attention aux autorisations (partage et droits NTFS). Si vous partagez directement un lecteur, vous devez uniquement ajouter le cluster "HCIcluster" (après avoir bien sélectionné le type d'objet 'Ordinateurs'). Si vous créez un partage sur un dossier à l'intérieur d'un volume, vous devrez également ajouter le groupe des Administrateurs.)
New-SmbShare -Name "QuorumShare" -Path "D:\QuorumShare" -FullAccess "TSSR\Administrators"
Le cluster va ainsi stocker les informations de quorum sur un partage SMB hébergé sur votre serveur QUORUM.
Sur un PC client distant, si vous souhaitez vous connectez aux noeuds du cluster via le Gestionnaire Hyper-V, vous devrez ajouter également les enregistrements DNS de chaque noeud dans votre fichier hosts.
Vous devrez également ajouter ces noeuds à la liste des hôtes de confiance, après avoir passé votre carte réseau en Profile Private (exemple de configuration ici) :
PS C:\Users\Administrateur> Get-NetConnectionProfile
Name : Réseau 2
InterfaceAlias : Ethernet
InterfaceIndex : 4
NetworkCategory : Public
DomainAuthenticationKind : None
IPv4Connectivity : Internet
IPv6Connectivity : NoTraffic
PS C:\Users\Administrateur> Set-NetConnectionProfile -InterfaceIndex 4 -NetworkCategory Private
PS C:\Users\Administrateur> Start-Service WinRM
PS C:\Users\Administrateur> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "CORE-1,CORE-2"
Validez (o). A présent, vous pouvez vous connecter aux noeuds via votre gestionnaire Hyper-V. N'oubliez pas de vous authentifier en tant qu'Administrateur de chaque noeud (N1\Administrateur etc.) lors de la connexion.
Vous disposez maintenant :
Vous pouvez désormais créer des machines virtuelles Hyper-V (en CSV) sur ce cluster et profiter de la résilience apportée par S2D et le Failover Clustering.
Bonne mise en pratique !