Dela via


Klustertillhörighet

Ett redundanskluster kan innehålla många roller som kan flyttas mellan noder och köras. Det finns tillfällen då vissa roller (dvs. virtuella datorer, resursgrupper och så vidare) inte ska köras på samma nod. Detta kan bero på resursförbrukning, minnesanvändning och så vidare. Det finns till exempel två virtuella datorer som är minnes- och PROCESSORintensiva och om de två virtuella datorerna körs på samma nod kan en eller båda de virtuella datorerna ha prestandapåverkan. I den här artikeln beskrivs nivåerna för klusterantiaffinitet och hur du kan använda dem.

Vad är affinitet och antiaffinitet?

Tillhörighet är en regel som du konfigurerar som upprättar en relation mellan två eller flera roller (dvs. virtuella datorer, resursgrupper och så vidare) för att hålla ihop dem. AntiAffinitet är detsamma men används för att försöka hålla de angivna rollerna åtskilda från varandra. Redundanskluster använder AntiAffinity för sina olika roller. Mer specifikt definieras parametern AntiAffinityClassNames för rollerna så att de inte körs på samma nod.

AntiAffinityClassnames

När du tittar på egenskaperna för en grupp är parametern AntiAffinityClassNames tom som standard. I exemplen nedan ska Grupp1 och Grupp2 separeras från att köras på samma nod. Om du vill visa egenskapen skulle PowerShell-kommandot och resultatet vara:

Get-ClusterGroup Group1 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Get-ClusterGroup Group2 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Eftersom AntiAffinityClassNames inte definieras som standard kan dessa roller köras tillsammans eller isär. Målet är att hålla dem åtskilda. Värdet för AntiAffinityClassNames kan vara vad du vill att de ska vara, de måste bara vara desamma. Anta att Grupp1 och Grupp2 är domänkontrollanter som körs på virtuella datorer och att de bäst hanteras på olika noder. Eftersom det här är domänkontrollanter använder jag DC som klassnamn. För att ange värdet skulle PowerShell-kommandot och resultaten vara:

$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}

Nu när de har konfigurerats försöker failover-kluster hålla isär dem.

Parametern AntiAffinityClassName är ett "mjukt" block. Det innebär att den försöker hålla isär dem, men om den inte kan det kommer de fortfarande att kunna köras på samma nod. Grupperna körs till exempel på ett redundanskluster med två noder. Om en nod behöver gå ned för underhåll skulle det innebära att båda grupperna skulle vara igång på samma nod. I det här fallet skulle det vara okej att ha det här. Det kanske inte är det mest idealiska, men båda de virtuella datorerna körs fortfarande inom acceptabla prestandaintervall.

Jag behöver mer

Som nämnts är AntiAffinityClassNames ett mjukt block. Men vad händer om det behövs ett hårt block? Det går inte att köra de virtuella datorerna på samma nod. Annars uppstår prestandapåverkan och gör att vissa tjänster eventuellt slutar fungera.

I dessa fall finns det en annan klusteregenskap för ClusterEnforcedAntiAffinity. Den här antiaffinitetsnivån förhindrar till varje pris att samma AntiAffinityClassNames-värden körs på samma nod.

Om du vill visa egenskapen och värdet skulle PowerShell-kommandot (och resultatet) vara:

Get-Cluster | fl ClusterEnforcedAntiAffinity
    ClusterEnforcedAntiAffinity : 0

Värdet "0" innebär att det är inaktiverat och inte ska tillämpas. Värdet "1" aktiverar det och är den hårda spärren. För att aktivera det här hårda blocket är kommandot (och resultatet) följande:

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

När båda dessa är inställda hindras gruppen från att komma online tillsammans. Om de finns på samma nod är detta vad du skulle se i Failover Cluster Manager.

Klustertillhörighet

I en PowerShell-lista över grupperna skulle du se följande:

Get-ClusterGroup

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

Ytterligare kommentarer

  • Se till att du använder rätt antiAffinitetsinställning beroende på behoven.

  • Tänk på att i ett scenario med två noder och ClusterEnforcedAntiAffinity körs inte båda grupperna om en nod är nere.

  • Användningen av Prioriterade ägare i grupper kan kombineras med AntiAffinity i ett kluster med tre eller flera noder.

  • Inställningarna AntiAffinityClassNames och ClusterEnforcedAntiAffinity sker först efter en återvinning av resurserna. Du kan alltså ange dem, men om båda grupperna är online på samma nod när de anges fortsätter båda att vara online.