Installation eines Hyper-V Failover Cluster unter Windows Server 2016 mit SMB3 Datastore

Der Windows Server 2016 steht seit kurzem final zur Verfügung. In den letzten Tagen habe ich sehr viele Anfragen zur Installation eines Hyper-V Failover-Clusters unter dem Windows Server 2016 bekommen. Ich habe mich somit entschieden einen Blog zu posten, wie die Installation eines Hyper-V Failover Cluster unter Windows Server 2016 mit einem SMB3 Datastore durchzuführen ist. Die Installation werde ich wie gewohnt beschreiben.

Bevor wir anfangen, möchte ich drauf hinweisen, dass die Anleitung nicht für einen Produktivbetrieb genutzt werden sollte. Der Einsatz erfolgt auf eigene Gefahr, ich übernehme keine Haftung für Schäden!

Voraussetzungen

1. Einen Windows Server 2012 R2 oder einen Windows Server 2016 der als Fileserver dient und Mitglied der Domäne ist, mit mindestens 2 Netzwerkkarten.
2. Eine lauffähige Domäne / einen Domänen Controller auf Basis Windows Sever 2012 R2 oder Windows Server 2016
3. Zwei Windows Server 2016 mit mindestens 4 Netzwerkkarten pro Host. Die Server sind bereits installiert und Mitglieder der Domäne. Die beiden Hosts sollten den selben Patchlevel haben!
4. Einen Switch der VLAN fähig ist und an dem die VLAN’s 11, 200 und 201 anliegen

Netzwerkaufteilung und IP-Adressen

In den nachfolgenden Abbildungen zeige ich, wie die Netzwerkkarten und die dazugehörigen IP-Adressen aufgeteilt sind.

Hyper-V Cluster Node1
Ich habe mich mal an den Standard gehalten und meine 4 Netzwerkkarten gemäß
„Best Practice“ aufgebaut. Hinzu kommt, dass meine Hyper-V Hosts auf 4 x 1Gbit NIC’s beschränkt sind.

Bei dieser Konfiguration sind die Netzwerkkarten ein „Singel Point of Failure“  somit sollte diese Konfiguration nicht produktiv eingesetzte werden. Schauen Sie sich Alternativen, wie 10Gbit, RMDA, RSS, SMB3 Multichannel, NIC-Teaming usw. an.

hyper-v_cluster_2016_smb3_001

Hyper-V Cluster Node2

hyper-v_cluster_2016_smb3_002

SMB3 FileServer

Da wir ja den Traffic über das SMB3 Interface ansprechen wollen, benötigen wir hierzu einen DNS Namen, den wir später in der Hyper-V Konfiguration eintragen. Bitte beachten Sie, dass der Fileserver einen DNS A-Record besitzt, der wie folgt lautet:
DNS-Name = filer-1SMB.dm-home.local 
IP = 192.168.200.120

hyper-v_cluster_2016_smb3_003

Domain Controller

hyper-v_cluster_2016_smb3_004

Vorbereitungen des Hyper-V Node1

Im nächsten Schritt geht es darum die Hyper-V Node1 netzwerkseitig vorzubereiten. Achten Sie drauf, dass alle Netzwerkadapter auf beiden Nodes gleichnamig sind.

1. Starten Sie den Hyper-V „Node1“ und melden Sie sich an der Domäne an.
2. Wenn noch nicht geschehen, dann installieren Sie die Microsoft Updates jetzt. Achten Sie drauf, dass beide Nodes den selben Patchlevel haben müssen.
3. Öffnen Sie die Netzwerkumgebung und benenn Sie die Netzwerkkarten genau wie im Screenshot.

hyper-v_cluster_2016_smb3_005

Anbei die IP Übersicht der Netzwerkkarten auf dem „Node1“

hyper-v_cluster_2016_smb3_006

4. Da der „Node1“ bereits in der Domäne ist und ich davon ausgehe, dass
die IP-Einstellungen der Netzwerkkarte „MGMT“ korrekt sind, fahren wir nun mit den IP Einstellungen für die Adapter „Storage1“ und „Storage2“ fort. Sie können hierzu das nachfolgende Script benutzen.

  $NICName1 = "Storage1"
  $IP1 = "192.168.200.10"
  
  $NICName2 = "Storage2"
  $IP2 = "192.168.201.10" 
  #========================
  # DHCP wird deaktiviert
  #========================
  Set-NetIPInterface -InterfaceAlias $NICName1 -dhcp Disabled -verbose
  Set-NetIPInterface -InterfaceAlias $NICName2 -dhcp Disabled -verbose
  
  #========================
  # IP wird gesetzt
  #========================
  New-NetIPAddress -AddressFamily IPv4 -PrefixLength 24 -InterfaceAlias $NICName1 -IPAddress $IP1 -verbose
  New-NetIPAddress -AddressFamily IPv4 -PrefixLength 24 -InterfaceAlias $NICName2 -IPAddress $IP2 -verbose
  
  #========================
  # IPv6 wird deaktiviert
  #========================
  Set-NetAdapterBinding -Name $NICName1 -ComponentID ms_tcpip6 -Enabled $False
  Set-NetAdapterBinding -Name $NICName2 -ComponentID ms_tcpip6 -Enabled $False
  
  #========================
  # DNSreg wird deaktiviert
  #========================
  Set-DnsClient -InterfaceAlias $NICname1 -RegisterThisConnectionsAddress $false
  Set-DnsClient -InterfaceAlias $NICname2 -RegisterThisConnectionsAddress $false

5. Installieren Sie als nächstes die „Hype-V Rolle“ mit dem nachfolgende
Powershell Script.

Der Server rebootet zwei mal!
#=============================
# Hyper-V Rolle installieren
#=============================
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools –Restart -ComputerName Node1

6. Nach dem Reboot muss noch ein „virtual Switch“ auf dem Hyper-V angelegt werden. Bitte achten Sie drauf, dass der „virtual Switch“ auf allen Nodes gleicht lautet. Zum Anlegen benutzen Sie das nachfolgende Script

#==============================
# virual Switch wird erstellt
#==============================
New-VMSwitch -Name "vSwitch" -NetAdapterName VM -AllowManagementOS 0 -ComputerName Node1

7. Installieren Sie das Feature „Failover-Clustering“ mit dem nachfolgenden Powershell Befehl.

#======================================
#Failover-Clustering wird installiert
#======================================
Install-WindowsFeature Failover-Clustering –IncludeAllSubFeature –IncludeManagementTools -ComputerName Node1

8. Die Vorbereitungen für den „Node1“ sind abgeschlossen, fahren Sie mit „Node2“ fort.

Vorbereitungen des Hyper-V Node2

Im nächsten Schritt geht es darum die Hyper-V „Node2“ Netzwerkseitig vorzubereiten. Achten Sie drauf, dass alle Netzwerkadapter auf beiden Nodes gleichnamig sind.

  1. Starten Sie den Hyper-V „Node2“ und melden Sie sich an der Domäne an.
  2. Wenn noch nicht geschehen, dann installieren Sie die Microsoft Updates jetzt. Achten Sie drauf, dass beide Nodes den selben Patchlevel haben müssen.
  3. Öffnen Sie Die Netzwerkumgebung und benenn Sie die Netzwerkkarten genau wie im Screenshot.

hyper-v_cluster_2016_smb3_005

Anbei die IP Übersicht der Netzwerkkarten auf dem „Node2“

hyper-v_cluster_2016_smb3_007

4. Da der „Node2“ bereits in der Domäne ist und ich davon ausgehe, dass die
IP-Einstellungen der Netzwerkkarte „MGMT“ korrekt sind, fahren wir nun mit den
IP-Einstellungen für die Adapter „Storage1“ und „Storage2“ fort. Sie können hierzu das nachfolgende Script benutzen.

$NICName1 = "Storage1"
  $IP1 = "192.168.200.20"
  
  $NICName2 = "Storage2"
  $IP2 = "192.168.201.20" 
  #========================
  # DHCP wird deaktiviert
  #========================
  Set-NetIPInterface -InterfaceAlias $NICName1 -dhcp Disabled -verbose
  Set-NetIPInterface -InterfaceAlias $NICName2 -dhcp Disabled -verbose
  
  #========================
  # IP wird gesetzt
  #========================
  New-NetIPAddress -AddressFamily IPv4 -PrefixLength 24 -InterfaceAlias $NICName1 -IPAddress $IP1 -verbose
  New-NetIPAddress -AddressFamily IPv4 -PrefixLength 24 -InterfaceAlias $NICName2 -IPAddress $IP2 -verbose
  
  #========================
  # IPv6 wird deaktiviert
  #========================
  Set-NetAdapterBinding -Name $NICName1 -ComponentID ms_tcpip6 -Enabled $False
  Set-NetAdapterBinding -Name $NICName2 -ComponentID ms_tcpip6 -Enabled $False
  
  #========================
  # DNSreg wird deaktiviert
  #========================
  Set-DnsClient -InterfaceAlias $NICname1 -RegisterThisConnectionsAddress $false
  Set-DnsClient -InterfaceAlias $NICname2 -RegisterThisConnectionsAddress $false

5. Installieren Sie als nächstes die „Hype-V Rolle“ mit dem nachfolgende
Powershell Script.

Der Server rebootet zwei mal!
#=============================
# Hyper-V Rolle installieren
#=============================
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools –Restart -ComputerName Node2

6. Nach dem Reboot muss noch ein „virtual Switch“ auf dem Hyper-V angelegt werden. Bitte achten Sie drauf, dass der „virtual Switch“ auf allen Nodes gleicht lautet. Zum Anlegen benutzen Sie das nachfolgende Script

#==============================
# virual Switch wird erstellt
#==============================
New-VMSwitch -Name "vSwitch" -NetAdapterName VM -AllowManagementOS 0 -ComputerName Node2

7. Installieren Sie das Feature „Failover-Clustering“ mit dem nachfolgenden Powershell Befehl.

#======================================
#Failover-Clustering wird installiert
#======================================
Install-WindowsFeature Failover-Clustering –IncludeAllSubFeature –IncludeManagementTools -ComputerName Node2

8. Die Vorbereitungen für „Node2“ sind abgeschlossen.

Installation und Konfiguration des Hyper-V Failover Cluster

Die Vorbereitungen für die Nodes sind abgeschlossen, nun widmen wir uns der Installation und Konfiguration des Hyper-V Failover Cluster.

1. Führen Sie den nachfolgenden Powershell Befehl aus, um den „Cluster Validation Test“ auszuführen. Der  Cluster Validation Test dient dazu um die Nodes zu prüfen. Fehler werden hier schon frühzeitig angezeigt.

Test-Cluster -Node "node1", "node2"

Der Cluster-Bericht wird unter dem nachfolgen Pfad abgelegt.

C:\Users\%USERNAME%\AppData\Local\Temp\Validation Report 2016.10.16 At 14.52.52.xml.htm
Für eine Produktivumgebung sollten keine Fehler/Wanings im „Validation Report“ angezeigt werden, da diese sich negativ auf die Stabilität des Clusters auswirken können.

2. Nachdem die Nodes erfolgreich getestet worden sind und der Bericht keine Fehler aufweist, ist es Zeit den Cluster zu erstellen. Führen Sie hierzu den nachfolgen Powershell Befehl aus.

New-Cluster –Name "HVCLUSTER-1" –Node "Node1","Node2" -StaticAddress "192.168.11.222"

3. Im nächsten Schritt werden die Netzwerk im „Failovercluster-Manager“ konfiguriert. Lassen Sie sich alle Netzwerke im Cluster mit dem nachfolgenden Powershell Befehl anzeigen

Get-ClusterNetwork |ft Name, Address

4. Vergeben Sie den Cluster Netzwerken mit dem nachfolgende Powershell Script sprechende Namen

$CN1 = "Cluster Network 1"
$CN2 = "Cluster Network 2"
$CN3 = "Cluster Network 3"

$NewName1 = "MGMT"
$NewName2 = "Storage-1"
$NewName3 = "Storage-2"

(Get-ClusterNetwork -Name $CN1).Name = $NewName1
(Get-ClusterNetwork -Name $CN2).Name = $NewName2
(Get-ClusterNetwork -Name $CN3).Name = $NewName3

5. Als nächstes muss die „Live Migration“ konfiguriert werden, da nicht alle Netzwerke zur „Live Migration“ genutzt werden sollen, um Engpässen im Cluster Netzwerk zu vermeiden. Hierzu öffnen Sie den „Failover Cluster Manager“ und klicken mit der rechten Maustaste auf „Networks“ und selektieren aus dem Kontextmenü den Menüpunkt „Live Migrations Settings“

installation_hyper-v_cluster_2016_010

6. In meinem Fall nutze ich das sekundäre Cluster Netzwerk „Storage-2“ zur „Live Migration“ und dann erst das primäre Cluster Netzwerk „Storage-1“. Selektieren Sie die Netzwerke und bringen Sie diese in die gewünschte Reihenfolge. (siehe Screenshot)

Im Produktiv-Betrieb sollten Sie immer ein Netzwerk exklusiv zur Live Migration verwenden

 

installation_hyper-v_cluster_2016_011

7. Als nächstes geht es darum die „Metrik“ zu setzten, dieses geschieht von einem Knoten aus und greift sofort für den gesamten Cluster inkl. aller Knoten. Als erstes lesen wir die Metrik mit Hilfe des nachfolgenden Powershell Befehls aus.

#=========================
# Cluster Metrik auslesen
#=========================
Get-ClusterNetwork | ft Name, Metric, AutoMetric -AutoSize

Wir erhalten nachfolgendes Ergebenis.

installation_hyper-v_cluster_2016_012

Man kann hier ganz deutlich sehen, dass das Netzwerk „Storage-1“ als erstes genommen wird, denn die kleinste Metrik hat die größte Priorität. Ich möchte die Priorität wie folgt ändern:

Prio1 = Storage1
Prio2 = Storage2
Prio3 = MGMT

Somit setzte ich die Metrik wie folgt:
Prio1 = Storage1  = 100
Prio2 = Storage2 = 110
Prio3 = MGMT    = 120

Der Powershell Befehl sieht wie folgt dafür aus:

#======================================
#Metrik wird gesetzt
#======================================
(Get-ClusterNetwork "Storage-1").Metric = 100
(Get-ClusterNetwork "Storage-2").Metric = 110
(Get-ClusterNetwork "MGMT").Metric = 120

Prüfen Sie die Metrik mit „Get-ClusterNetwork“ erneut. Sie sollten das nachfolge Ergebnis erhalten. (siehe Screenshot)

installation_hyper-v_cluster_2016_013

8. Verbinden Sie sich via RDP mit ihrem SMB3 Fileserver und erstellen die zwei benötigten Shares mit dem Sharenamen Quorum und VMs. Sie können hierzu die nachfolgenden Powershell Scripte benutzen.

Share 1 = VMs ( für die VM’s)
Share 2 = Quorum ( wird benötig für das Cluster Quorum)

Die NTFS und Share Berechtigungen sollten auf „Full Access“ für die nachfolgenden Objekte gesetzte sein.
Hyper-V Admin oder wie in meinen Beispiel Domain Admin
Alle Computer Konten des Clusters inkl. der Nodes

Die Shares werden auf dem Laufwerk D:\ des Servers erstellt. Je nachdem wie ihre Umgebung ausschaut, müssen Sie den Laufwerksbuchstaben im Script ändern.
$myPath = 'D:\Ouorum'
$myShare = 'Ouorum'

New-Item $myPath -ItemType Directory

New-SmbShare -Name $myShare -Path $myPath -FullAccess 'DM-HOME\DomAdmin', 'DM-HOME\Node1$', 'DM-HOME\Node2$', 'DM-HOME\HVCLUSTER-1$' -CachingMode None
Set-SmbPathAcl -ShareName $myShare
$myPath = 'D:\VMs'
$myShare = 'VMs'

New-Item $myPath -ItemType Directory

New-SmbShare -Name $myShare -Path $myPath -FullAccess 'DM-HOME\DomAdmin', 'DM-HOME\Node1$', 'DM-HOME\Node2$', 'DM-HOME\HVCLUSTER-1$' -CachingMode None
Set-SmbPathAcl -ShareName $myShare

9. Verbinden Sie sich via RDP mit dem Cluster Node1 und weisen dem Cluster ein Quorum zu mit dem nachfolgende Powershell Befehl

Set-ClusterQuorum -FileShareWitness \\filer-1.dm-home.local\Ouorum

10. Als nächstes muss den Cluster Nodes noch mitgeteilt werden wo bzw. auf welchem Pfad die VM’s liegen. Die nachfolgende Konfiguration muss auf jedem Cluster Node einzeln durchgeführt werden, da sonst der Cluster/Node die „vhd/vhdx Files“ in der Standard Konfiguration unter „C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks“ speichern würde und die VM’s würden in der Standard Konfiguration unter „C:\ProgramData\Microsoft\Windows\Hyper-V“ gespeichert. Führen Sie das Script auf Node1 und Node2 aus!

An diese Stelle wird der DNS A-Record benötigt, da der gesamte SMB3 Netzwerkverkehr ja nicht über das MGMT Adpater laufen soll.
$myVMsShare = '\\filer-1SMB.dm-home.local\VMs'

Set-VMHost -ComputerName Node1 -VirtualHardDiskPath $myVMsSHare -VirtualMachinePath $myVMsShare

$myVMsShare = '\\filer-1SMB.dm-home.local\VMs'
Set-VMHost -ComputerName Node2 -VirtualHardDiskPath $myVMsSHare -VirtualMachinePath $myVMsShare

11. Verbinden Sie sich via RDP mit dem Domain Controller, da wir die
„Constraind Delegations“ setzten müssen. Hierzu rufen Sie die Eigenschaften von Computer-Objekt Node1 auf und selektieren „Kerberos only“ und fügen unter Services die Computer-Objekte mit dem dementsprechenden Service (cifs, Microsoft Virtual Console Service und Microsoft Virtual System Migration Services) hinzu. (siehe Screenshot)

installation_hyper-v_cluster_2016_016

12. Führen Sie das auch für das Computer-Objekt Node2 durch

installation_hyper-v_cluster_2016_017

13. Verbinden Sie sich via RDP mit Node1 und Node2 und führen den nachfolgenden Powershell Befehl aus, um die Authentifizierung für die Live Migration auf Kerberos einzustellen.

Set-VMHost –VirtualMachineMigrationAuthenticationType Kerberos

Die Installation und Konfiguration des Hyper-V Failover Cluster ist abgeschlossen. Dennoch gibt es noch einiges an Konfiguration/Optimierung, die durchgeführt werden sollten. Das hängt natürlich von ihrer Umgebung ab. Deshalb gehe ich hier nicht ins Detail.

Ich hoffe, ich konnte Ihnen einen kleinen Einblick geben. Sollten Sie Fragen haben, so scheuen Sie nicht, mich zu kontaktieren. Nutzen Sie hier die “Kommentar Funktion” des Blogs oder wenn es Ihnen lieber ist via E-Mail.

Weiter Blogs folgen in den nächsten Tagen. Ich würde mich sehr freuen, wenn Sie wieder vorbeischauen.

2 Gedanken zu „Installation eines Hyper-V Failover Cluster unter Windows Server 2016 mit SMB3 Datastore

  1. Lukas

    Sehr hilfreicher Beitrag! Gibt es bei dieser Konfigurationsvariante auch die Möglichkeit die Speicherorte in den Failovercluster-Manager, Reiter „Storage“ mit einzubinden wie es zum Beispiel bei einer DAS Konfiguration möglich ist?

    Vielen Dank!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

6 + 19 =