Clusteraffinität

Gilt für Windows Server 2022, Windows Server 2019, Windows Server 2016, Azure Stack HCI (Version 21H2 und 20H2)

Ein Failovercluster kann viele Rollen umfassen, die zwischen Knoten wechseln und ausgeführt werden können. Es gibt Fälle, in denen bestimmte Rollen (z. B. VMs oder Ressourcengruppen) nicht auf demselben Knoten ausgeführt werden sollten. Dies kann beispielsweise mit dem Ressourcenverbrauch oder der Speicherauslastung zusammenhängen. Beispiel: Sie verwenden zwei VMs, die Arbeitsspeicher- und CPU-intensiv sind. Wenn die beiden VMs auf demselben Knoten ausgeführt werden, ist die Leistung auf einer oder auf beiden VMs möglicherweise beeinträchtigt. In diesem Artikel werden Antiaffinitätsstufen von Clustern und deren Verwendung erläutert.

Was sind Affinität und Antiaffinität?

Affinität ist eine von Ihnen eingerichtete Regel, die eine Beziehung zwischen zwei oder mehr Rollen (z. B. VMs oder Ressourcengruppen) einrichtet, um diese zusammenzuhalten. Antiaffinität ist dasselbe, wird jedoch verwendet, um die angegebenen Rollen voneinander getrennt zu halten. Failovercluster verwenden Antiaffinität für ihre Rollen. Genauer gesagt, verwenden sie den Parameter AntiAffinityClassNames, der für die Rollen definiert ist, damit sie nicht auf demselben Knoten ausgeführt werden.

AntiAffinityClassnames

Wenn Sie die Eigenschaften einer Gruppe betrachten, ist der Parameter „AntiAffinityClassNames“ standardmäßig leer. In den folgenden Beispielen sollen „Group1“ und „Group2“ nicht auf demselben Knoten ausgeführt werden. Der PowerShell-Befehl zum Anzeigen der Eigenschaft und das Ergebnis lauten wie folgt:

Get-ClusterGroup Group1 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Get-ClusterGroup Group2 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Da „AntiAffinityClassNames“ standardmäßig nicht definiert ist, können diese Rollen zusammen oder getrennt ausgeführt werden. Das Ziel ist es, sie getrennt zu halten. Der Wert für „AntiAffinityClassNames“ kann beliebig lauten, er muss nur in beiden Fällen gleich sein. Angenommen, „Group1“ und „Group2“ sind Domänencontroller, die auf VMs ausgeführt werden und vorzugsweise auf verschiedenen Knoten ausgeführt werden sollen. Da es sich um Domänencontroller handelt, verwende ich „DC“ für den Klassennamen. Der PowerShell-Befehl zum Festlegen des Werts und die Ergebnisse lauten wie folgt:

$AntiAffinity = New-Object System.Collections.Specialized.StringCollection
$AntiAffinity.Add("DC")
(Get-ClusterGroup -Name "Group1").AntiAffinityClassNames = $AntiAffinity
(Get-ClusterGroup -Name "Group2").AntiAffinityClassNames = $AntiAffinity

$AntiAffinity = New-Object System.Collections.Specialized.StringCollection
$AntiAffinity.Add("DC")
(Get-ClusterGroup -Name "Group1").AntiAffinityClassNames = $AntiAffinity
(Get-ClusterGroup -Name "Group2").AntiAffinityClassNames = $AntiAffinity

Get-ClusterGroup "Group1" | fl AntiAffinityClassNames
    AntiAffinityClassNames : {DC}

Get-ClusterGroup "Group2" | fl AntiAffinityClassNames
    AntiAffinityClassNames : {DC}

Nachdem dies festgelegt wurde, wird beim Failoverclustering versucht, die Domänencontroller voneinander zu trennen.

Der Parameter „AntiAffinityClassName“ ist eine „weiche“ Sperre. Das bedeutet, dass sie nach Möglichkeit voneinander getrennt gehalten werden. Wenn dies aber nicht möglich ist, können sie trotzdem auf demselben Knoten ausgeführt werden. Beispielsweise werden die Gruppen in einem Failovercluster mit zwei Knoten ausgeführt. Wenn ein Knoten aus Wartungsgründen ausfallen muss, bedeutet dies, dass beide Gruppen auf demselben Knoten ausgeführt werden. In diesem Fall wäre dies in Ordnung. Diese Situation ist möglicherweise nicht ideal, aber beide VMs werden weiterhin innerhalb akzeptabler Leistungsbereiche ausgeführt.

Weitergehende Anforderungen

Wie bereits erwähnt, ist „AntiAffinityClassNames“ eine weiche Sperre. Wie geht man vor, wenn eine harte Sperre benötigt wird? Die VMs können nicht auf demselben Knoten ausgeführt werden. Andernfalls wird die Leistung so stark beeinträchtigt, dass einige Dienste möglicherweise ausfallen.

Für diese Fälle gibt es eine weitere Clustereigenschaft, „ClusterEnforcedAntiAffinity“. Diese Antiaffinitätsstufe verhindert um jeden Preis, dass dieselben AntiAffinityClassNames-Werte auf demselben Knoten ausgeführt werden.

Der PowerShell-Befehl zum Anzeigen der Eigenschaft und des Werts sowie das Ergebnis lauten wie folgt:

Get-Cluster | fl ClusterEnforcedAntiAffinity
    ClusterEnforcedAntiAffinity : 0

Der Wert „0“ bedeutet, dass sie deaktiviert ist und nicht erzwungen werden soll. Der Wert „1“ aktiviert diese harte Sperre. Der Befehl zum Aktivieren dieser harten Sperre und das Ergebnis lauten wie folgt:

(Get-Cluster).ClusterEnforcedAntiAffinity = 1
    ClusterEnforcedAntiAffinity : 1

Wenn beide festgelegt sind, wird verhindert, dass die Gruppen zusammen onlinegeschaltet werden. Wenn sie sich auf demselben Knoten befinden, wird im Failovercluster-Manager Folgendes angezeigt.

Cluster Affinity

In einer PowerShell-Liste der Gruppen wird Folgendes angezeigt:

Get-ClusterGroup

Name       State
----       -----
Group1     Offline(Anti-Affinity Conflict)
Group2     Online

Zusätzliche Kommentare

  • Stellen Sie sicher, dass Sie je nach Bedarf die richtige AntiAffinity-Einstellung verwenden.

  • Beachten Sie, dass in einem Szenario mit zwei Knoten und „ClusterEnforcedAntiAffinity“ bei Ausfall eines Knotens keine der beiden Gruppen ausgeführt wird.

  • Die Verwendung bevorzugter Besitzer für Gruppen kann mit AntiAffinity in einem Cluster mit drei oder mehr Knoten kombiniert werden.

  • Die Einstellungen „AntiAffinityClassNames“ und „ClusterEnforcedAntiAffinity“ werden erst nach dem Herunter- und erneuten Hochfahren der Ressourcen wirksam. Sie können sie zwar festlegen, aber wenn gerade beide Gruppen auf demselben Knoten online sind, bleiben beide weiterhin online.