CDC 2020 am 13. und 14.05.2020 in Hanau

Wieder Hanau?! Ja…ok…die Stadt mit einem kleinen Problem an verfügbaren Hotelzimmer…aber: Kleinigkeiten…das Conference Center ist wieder einmal die Städte der CDC Germany geworden…zum dritten Mal in Folge!

So langsam weiß man ja auch, dass man wenn man ein nettes Hotelzimmer haben will, eben frühzeitig buchen muss…

Btw: Auch wir haben es heute wieder getan…6 Mitarbeiter der TrinityComputer.de GmbH werden nächstes Jahre erneut an der CDC (und dem vermutlich wieder am Vortrag stattfindenden Hyper-V-Communitytreffen) teilnehmen!

Wir freuen uns! Smile

Highest Level technical Content von Top Speakern sind wieder einmal garantiert, wenn Carsten und seine Firma die MVP Kollegen aus der ganzen Welt nach Hanau einladen!

Hyper-V, Azure, HCI, AD, Server, Hardware Lösungen, Backup,…alle werden vermutlich wieder vertreten sein und wer nicht teilnimmt, egal ob als Teilnehmer oder Sponsor/Hersteller, macht was falsch! Definitiv!

cdc2020

Wer dabei sein will sollte sich beeilen, die SuperEarly Bird Phase für Wiederholungstäter läuft gerade noch, und die Tickets sind beliebt… 3 Tage “technische Schulung” für Geek/Nerd Mitarbeiter für unter 400 EUR zzgl. ggf. Hotelkosten sind für Systemhäuser mit Fokus auf Microsoft Infrastruktur geradezu ein Schnäppchen und daher ein “must-buy” oder “shutupandtakemymoney” Deal!!

Hier gehts zur CDC Webseite mit Ticketbuchung:

https://www.cdc-germany.de/#tickets

S2D Storagepool in Windows Server 2019 erweitern

Wir betreiben einige Server 2019 Storage Spaces Direct aka Azure Stack HCI Cluster und sind auf folgendes nicht ganz einfach zu findendes Thema gestoßen:

Erweiterung des StoragePools und letztlich Volumes in einem zwei Knoten Cluster mit Nested Mirrored Reciliency (NestedMirror, DoubleMirror, oder wie auch immer man es nennen mag).

Get-VirtualDisk | Get-StorageTier

Bzw eingeschränkter

Get-VirtualDisk -FriendlyName s2* | Get-StorageTier

clip_image001

Hat 10TB Kapazität aktuell, es sind, durch Tausch einiger SSDs durch welche desselben Typs, aber mit größerer Kapazität, (siehe andere zukünftiges Smile Posting) im Pool jetzt aber noch knapp 9TB (ohne Redundanzen) im Pool ungenutzt:

clip_image002

Die kann man aber nicht einfach grafisch über den Servermanager hinzufügen:

clip_image003

Auch über das AdminCenter habe ich keine Möglichkeit gefunden…

Mittels Powershell (über den aktuellen Besitzerknoten (!!!!), also den mit Schreibzugriff, des Pools) geht es aber:

Zuerst lassen wir uns mal die aktuelle Größe des StorageTiers im Pool Anzeigen:

Get-VirtualDisk -FriendlyName s2* | Get-StorageTier | ft FriendlyName, @{Label=’Freespace(GB)‘;Expression={$_.Size/1GB}} -AutoSize

(Wobei ‚Freespace(GB)‘ hier wohl besser ‚CurrentSize(GB)‘, also „aktuelle Größe“ heißen sollte…das war in der von mir genutzten englischsprachigen Referenz leider so angegeben)

Also besser:

Get-VirtualDisk -FriendlyName s2* | Get-StorageTier | ft FriendlyName, @{Label=’CurrentSize(GB)‘;Expression={$_.Size/1GB}} -AutoSize

clip_image004

Dann kann die Größe einfach erhöht werden:

Get-VirtualDisk -FriendlyName s2* | Get-StorageTier | Resize-StorageTier -Size 12TB

(hier muss die neue Komplettgröße (!!!) angeben werden, nicht die Menge um die erweitert werden soll!)

clip_image005

Eine weitere Abfrage mit:

Get-VirtualDisk | Get-StorageTier

Zeigt dann die neue Größe von hier 12TB an.

clip_image006

Anschließend zeigt z.B. der Servermanager, ggf. nach refresh, auch schon die neue Größe an:

clip_image007

Abschließend muss die Partition dann noch in der Datenträgerverwaltung erweitert werden:

(im Shot schon erfolgt)

clip_image008

Quelle/Inspiriert von: https://bcthomas.com/2016/10/expanding-storage-spaces-direct-volumes/

Clusternodes "online-Fehler beim Datenabruf" im Servermanager

eingetragen in: 2016, Clustering, Powershell, Windows

Windows Server 2019 Hyper-V Failover Clustering

Clusternodes nicht „abrufbar“ untereinander:

clip_image001

clip_image002

Troubleshooting:

winrm get winrm/config

Zeigt maxEnvelopeSizekb von 500 oder ähnlich…Fehlermeldung verweist auf 512kb Größe des WinRM Paketes, also zu klein!

clip_image003

Fix

(Nur unter Admin CMD.exe, nicht in der Powershell machbar!!)

winrm set winrm/config @{MaxEnvelopeSizekb=“8192″}

Größe von 8192kb hatte ich in einem Posting als Empfehlung gefunden, setzt hier ggf. andere Werte ein, welche für euch funktionieren/sinnvoll erscheinen…

clip_image004

Dann die Anzeige im Servermanager refreshen/aktualisieren und die Nodes können sich gegenseitig wieder als Online sehen und per winrm abfragen:

clip_image005

Hyper-V Cluster Replication Broker setup failed with IPv6 error 0x80071709

eingetragen in: Clustering, Hyper-V

Quick fix for an issue we recently had on a customers Windows 2012 R2 Hyper-V cluster

clip_image001

clip_image002

clip_image003

clip_image004

clip_image005

[Window Title] Fehler [Main Instruction] Vorgangsfehler [Content] Die Änderungen an der IPv6-Adresse „IP-Adresse: <nicht konfiguriert>“ konnte nicht gespeichert werden. [^] Details ausblenden [OK] [Expanded Information] Fehlercode: 0x80071709 Es stehen zwei oder mehr für eine Ressourceneigenschaft angegebene Parameterwerte in Widerspruch

Hyper-V-Replikatbroker

Netzwerkname:

RepBrokPSCL

Organisationseinheit:

CN=Computers,DC=ps,DC=local

IP-Adresse:

IPv6-Adresse auf 2003:a:117f:ad31::/64

IP-Adresse:

192.168.0.217

Gestartet

15.05.2019 18:21:22

Abgeschlossen

15.05.2019 18:21:26

Gruppe „RepBrokPSCL“ wird erstellt.

Hyper-V-Replikatbroker-Ressourcen werden erstellt.

Hyper-V-Replikatbroker Ressourcen werden konfiguriert.

Hyper-V-Replikatbroker-Netzwerk wird konfiguriert.

Gültigkeit der Clientzugriffspunkt-Einstellungen wird überprüft.

Netzwerknamenressource wird konfiguriert.

Neue IP-Adressressourcen werden konfiguriert.

Fehler beim Erstellen von „Hyper-V-Replikatbroker“.

Fehler beim Erstellen eines Clientzugriffspunkts für „RepBrokPSCL“.

Fehler beim Speichern der Änderungen am Clientzugriffspunkt.

Fehler beim Aktualisieren von IP-Adressressourcen.

Geänderte Eigenschaften für „IP-Adresse 2003:a:117f:ad31::“ können nicht gespeichert werden.

Es stehen zwei oder mehr für eine Ressourceneigenschaft angegebene Parameterwerte in Widerspruch

Vorheriger Clusterstatus wird wiederhergestellt.

clip_image006

Cause and Fix:

IPv6 is enabled on two internal NICs and Cluster Test reports IP adresses in same subnet on multiple Networkadapters:

Die Adapter „Heartbeat“ und „Ethernet 2“ auf dem Knoten „PSCN1.ps.local“ besitzen IP-Adressen im selben Subnetz.

Mehrere Netzwerkadapter auf dem Knoten „PSCN1.ps.local“ haben Adressen im selben Subnetz. Vom Failoverclustering wird nur ein Netzwerkadapter pro Subnetz verwendet. Es wird empfohlen, dass Sie Adapter in unterschiedlichen Subnetzen konfigurieren oder einen NIC-Teamvorgang verwenden, um mehrere physikalische Adapter in einem einzelnen logischen Adapter zu kombinieren.

Die Adapter „Heartbeat“ und „Ethernet 2“ auf dem Knoten „PSCN2.ps.local“ besitzen IP-Adressen im selben Subnetz.

Mehrere Netzwerkadapter auf dem Knoten „PSCN2.ps.local“ haben Adressen im selben Subnetz. Vom Failoverclustering wird nur ein Netzwerkadapter pro Subnetz verwendet. Es wird empfohlen, dass Sie Adapter in unterschiedlichen Subnetzen konfigurieren oder einen NIC-Teamvorgang verwenden, um mehrere physikalische Adapter in einem einzelnen logischen Adapter zu kombinieren.

Quick Fix:

Disable IPv6 on one of the NICs in every node:

clip_image007

In our case we choose to disable IPv6 on the Heartbeat network the fomer IT supporter had setup for the cluster:

(although I generally don’t like disabling IPv6 at all, but for the matter of a migration off this cluster it was an acceptable, cause only short term lived, workaround for us)

clip_image008

clip_image009

After this, setup of replication broker role was successfully on the cluster:

clip_image010

Hope this helps others having the same issue to quick fix it.
We happily did fix this and could move on with migration of the VM to Server 2019 after this.

Powershell: Cluster-Test Automatisierung und Anlage einer Clustertest-Bericht-Historie auf SMB Share

eingetragen in: Clustering, Core, Powershell

Problemstellung: automatisierte Clustertests für alle Cluster in allen Domänen durchführen und die Reports auf einem Fileserver ablegen, um diese Berichte im Falle eines Supportcase direkt zugänglich zu haben und auch eine Historie der Berichte jedes Clusters einsehen zu können.

Eine Aufgabe für PowerShell:

test-cluster

Ist in der Lage den resultierenden Bericht mittels des Attributes –ReportName im Namen anzupassen

test-cluster –cluster Cluster10 –ReportName meinReport

z.B. erzeugt eine meinReport.mht Datei des Berichtes über den Cluster10.

Gut, aber kann test-cluster auch den Pfad des Berichtes verändern?
Jap, kein Problem:

test-cluster –cluster Cluster10 –ReportName c:\Temp\Reports\meinReport

Erzeugt eine meinReport.mht Datei im Verzeichnis C:\Temp\Reports.
Ok, dieser Pfad muss dafür existieren…das Prüfen und Korrigieren wir später mittels:

if( -not (Test-Path C:\Temp\Reports) )
{
    New-Item C:\Temp\Reports -type directory
}

den Bericht an einen anderen lokalen Pfad Umleiten geht also…aber evtl. ist das ja kein Laufwerksbuchstabe, auf dem die Reports abgelegt werden sollen, sondern ein UNC/SMB Pfad…
Aber, auch das geht mit test-cluster:

test-cluster –cluster Cluster10 –ReportName \\VMM\c$\Temp\Reports\meinReport

erstellt eine meinReport.mht auf dem VMM Server unter C:\Temp\Reports… fein fein 🙂

Da ja eine Historie, also ein Archiv mit Berichten aller Cluster vorgehalten werden soll, macht es Sinn, die Dateien nicht alle meinReport.mht zu nennen, sondern mit dem Clusternamen und Datum sowie u.U. auch dem Domainnamen zu versehen. Auf letzteres könnte ich hier bei dem Kunden verzichten, da ein Ablageort/Fileserver je Domain vorgesehen wurde, habe es aber trotzdem mit eingebaut, schadet ja nicht:

Dazu ersetzen wir zuerst die –cluster und –Reportname Attribute unseres PowerShell commandlets test-Cluster durch Variablen, die wir im Folgenden dann mit “Leben” füllen:

test-cluster -cluster $cluster -ReportName $reportname

Also brauchen wir aktuell $cluster und $reportname als Eingangsvariable für unser Skript.

Um die Berichte auf dem Fileserver später zuerst nach Clusternamen und dann nach Erstellungsdatum/Zeit sortiert zu bekommen, kann man den Reportnamen wie folgt u.A. mit der Datumfunktion anpassen:

$domain = $env:USERDOMAIN
$reportpath =
\\vmm\c$\Temp\Reports\
$date = get-date -Format yyyy.MM.dd.HH.mm.ss
$reportname = $reportpath+$domain+“_“+$cluster+“_“+$date

get-date liefert ohne weitere Parameter einen Wert, der nicht für Dateipfade verwendbar ist, da er ggf. / und : enthält. Auch der –Format s Parameter den ich zuerst verwendete weil er einen “sortierbare” Ausgabe erstellt, wurde aufgrund der Doppelpunkte nicht brauchbar.

Man kann die Rückgabe von get-date aber glücklicherweise sehr individuell anpassen und bekommt mit dem von mir verwendeten –Format yyyy.MM.dd.HH.mm.ss das Format Jahr.Monat.Tag.Stunde.Minute.Sekunde jeweils als Zahl und min. zweistellig zurück, so dass nachher Berichte schon aufgrund des Dateinamens auch chronologisch sortiert werden.

Um alle Cluster einer Domain zu verarbeiten, erstelle ich zuerst eine Liste aller Cluster in die Variable $clusters:

$clusters = get-cluster -Domain $domain

Diese wird dann einfach über eine ForEach Schleife unter jeweiligem Setzen des entsprechenden $reportname abgearbeitet:

ForEach ($cluster in $clusters)
     {
     $reportname = $reportpath+$domain+“_“+$cluster+“_“+$date
     test-cluster -cluster $cluster -ReportName $reportname
     }

Um (optionale) Parameterübergaben für die Domäne, den Reportpfad, sowie den Cluster erweitert sieht das vollständige Skript aktuell wie folgt aus:
(wird immer wieder mal erweitert/angepasst)

#########################################################################################
#### Cluster Validation Test Script for scheduled Testing of Clusters ####

#### Author: Oliver Sommer, TrinityComputer.de GmbH

#########################################################################################

param(
[string]$domain = $env:USERDOMAIN,
[string]$reportpath,
[string]$cluster
)

# Prüfung, ob $reportpath übergeben wurde (leer ist) und falls nicht:
# Entscheidung welcher domänenspezifische $reportpath (Fileshare) zu verwenden ist
If (!$reportpath)
{
     If ($domain –eq „Dom1“)
     {
         $reportpath = „\\fileserver1\Reportspfad\“
     }

    If ($domain -eq „Dom2“)
     {
         $reportpath = „\\Fileserver2\Reportspfad\“
     }

    If ($domain -eq „Dom3“)
     {
         $reportpath = „\\Fileserver3\Reportspfad\“
     }
     If ($domain -eq „3CAN“)
     {
         $reportpath = „\\vmm\c$\Temp\Reports\“
     }
}

Clear-Host

# Prüfung ob $reportpath existiert und ggf. Erstellen des Pfades
if( -not (Test-Path $reportpath) )
{
    New-Item $reportpath -type directory
    Write-Host
    Write-Host Verzeichnis $reportpath erstellt!
    Write-Host
}

#Alle Cluster der Domäne in $clusters schreiben:
$clusters = get-cluster -Domain $domain
Write-Host In der AD DS Domäne $domain sind folgende Cluster vorhanden:
Write-Host $clusters
Write-Host

#sortierbares Datum in $date schreiben
$date = get-date -Format yyyy.MM.dd/_HH.mm.ss

# Falls ein spezifischer Cluster beim Skriptaufruf übergeben wurde:
If ($cluster)
{
     Write-Host Starte Validationtest für Cluster $cluster…
     Write-Host
     $reportname = $reportpath+$domain+“_“+$cluster+“_“+$date
     test-cluster -cluster $cluster -ReportName $reportname
}

# Prüfen ob $cluster als Attribut beim Skriptaufruf übergeben wurde, also ob es leer ist oder nicht:
If (!$cluster)
{
Write-Host Starte Validationtests für alle Cluster der Domäne $domain…
Write-Host
# Clusterbericht für jeden Cluster der Domain ausführen und individuellen Report ablegen:
ForEach ($cluster in $clusters)
     {
     $reportname = $reportpath+$domain+“_“+$cluster+“_“+$date
     test-cluster -cluster $cluster -ReportName $reportname
     }

}