Condividi tramite


Affinità del cluster

Un cluster di failover può contenere molti ruoli che possono spostarsi tra nodi ed eseguire. In alcuni casi, alcuni ruoli, ovvero macchine virtuali, gruppi di risorse e così via, non devono essere eseguiti nello stesso nodo. Ciò potrebbe essere dovuto all'utilizzo delle risorse, all'utilizzo della memoria e così via. Ad esempio, sono presenti due macchine virtuali che sono a elevato utilizzo di memoria e CPU e se le due macchine virtuali sono in esecuzione nello stesso nodo, una o entrambe le macchine virtuali potrebbero avere problemi di impatto sulle prestazioni. Questo articolo illustra i livelli di antiaffinità del cluster e come usarli.

Che cos'è Affinità e Antiaffinità?

L'affinità è una regola che consente di stabilire una relazione tra due o più ruoli (ad esempio macchine virtuali, gruppi di risorse e così via) per mantenerle insieme. Antiaffinità è lo stesso, ma viene usato per cercare di mantenere i ruoli specificati l'uno dall'altro. I cluster di failover usano Antiaffinità per i relativi ruoli. In particolare, il parametro AntiAffinityClassNames definito nei ruoli in modo che non vengano eseguiti nello stesso nodo.

AntiAffinityClassnames

Quando si esaminano le proprietà di un gruppo, il parametro AntiAffinityClassNames è vuoto come impostazione predefinita. Negli esempi seguenti, Group1 e Group2 devono essere separati dall'esecuzione nello stesso nodo. Per visualizzare la proprietà, il comando e il risultato di PowerShell sono i seguenti:

Get-ClusterGroup Group1 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Get-ClusterGroup Group2 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Poiché AntiAffinityClassNames non è definito come predefinito, questi ruoli possono essere eseguiti insieme o separati. L'obiettivo è mantenere separati. Il valore per AntiAffinityClassNames può essere quello che vuoi che siano, devono essere uguali. Si supponga che Group1 e Group2 siano controller di dominio in esecuzione nelle macchine virtuali e che siano in esecuzione in nodi diversi. Poiché si tratta di controller di dominio, userò DC per il nome della classe. Per impostare il valore, il comando e i risultati di PowerShell saranno:

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

Ora che sono impostati, il clustering di failover tenterà di separarli.

Il parametro AntiAffinityClassName è un blocco "soft". Ciò significa che cercherà di tenerli separati, ma se non riesce, consentirà comunque l'esecuzione nello stesso nodo. Ad esempio, i gruppi vengono eseguiti in un cluster di failover a due nodi. Se un nodo deve essere inattivo per la manutenzione, significa che entrambi i gruppi saranno operativi nello stesso nodo. In questo caso, sarebbe ok avere questo. Potrebbe non essere l'ideale, ma entrambe le macchine virtuali verranno comunque eseguite entro intervalli di prestazioni accettabili.

Ne servono di più

Come accennato, AntiAffinityClassNames è un blocco soft. Ma cosa succede se è necessario un blocco rigido? Le macchine virtuali non possono essere eseguite nello stesso nodo. in caso contrario, si verificherà un impatto sulle prestazioni e causerà un calo di alcuni servizi.

Per questi casi, esiste un'altra proprietà cluster di ClusterEnforcedAntiAffinity. Questo livello di antiaffinità impedirà a tutti i costi l'esecuzione di uno degli stessi valori AntiAffinityClassNames nello stesso nodo.

Per visualizzare la proprietà e il valore, il comando di PowerShell (e il risultato) saranno:

Get-Cluster | fl ClusterEnforcedAntiAffinity
    ClusterEnforcedAntiAffinity : 0

Il valore "0" indica che è disabilitato e non deve essere applicato. Il valore di "1" lo abilita ed è il blocco rigido. Per abilitare questo blocco rigido, il comando (e il risultato) è:

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

Quando vengono impostate entrambe queste impostazioni, il gruppo verrà impedito di venire online insieme. Se si trovano nello stesso nodo, si tratta di ciò che verrà visualizzato in Gestione cluster di failover.

Affinità cluster

In un elenco di PowerShell dei gruppi, si noterà quanto segue:

Get-ClusterGroup

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

Commenti aggiuntivi

  • Assicurarsi di usare l'impostazione di AntiAffinity appropriata in base alle esigenze.

  • Tenere presente che in uno scenario a due nodi e ClusterEnforcedAntiAffinity, se un nodo è inattivo, entrambi i gruppi non verranno eseguiti.

  • L'uso dei proprietari preferiti nei gruppi può essere combinato con AntiAffinity in un cluster a tre o più nodi.

  • Le impostazioni AntiAffinityClassNames e ClusterEnforcedAntiAffinity verranno eseguite solo dopo il riciclo delle risorse. Ciò significa che è possibile impostarli, ma se entrambi i gruppi sono online nello stesso nodo quando sono impostati, entrambi continueranno a rimanere online.