Sdílet prostřednictvím


Spřažení clusteru

Cluster s podporou převzetí služeb při selhání může obsahovat mnoho rolí, které se můžou přesouvat mezi uzly a spouštět. V některých případech by určité role (tj. virtuální počítače, skupiny prostředků atd.) neměly běžet na stejném uzlu. Důvodem může být spotřeba prostředků, využití paměti atd. Existují například dva virtuální počítače, které jsou náročné na paměť a procesor a pokud jsou dva virtuální počítače spuštěné na stejném uzlu, jeden nebo oba virtuální počítače můžou mít problémy s výkonem. Tento článek vysvětluje úrovně antiaffinity clusteru a jejich použití.

Co je Spřažení a Anti-Spřažení?

Spřažení je pravidlo, které nastaví vztah mezi dvěma nebo více rolemi (tj. virtuálními počítači, skupinami prostředků atd.), aby byly vzájemně propojeny. AntiAffinity funguje podobně, ale používá se k tomu, aby se zadané role udržely odděleně. Clustery s podporou převzetí služeb při selhání používají pro své role koncept AntiAffinity. Konkrétně platí, že parametr AntiAffinityClassNames definovaný pro role, takže se nespustí na stejném uzlu.

AntiAffinityClassnames

Při pohledu na vlastnosti skupiny je parametr AntiAffinityClassNames prázdný jako výchozí. V následujících příkladech by měly být Group1 a Group2 odděleny, aby neběžely na stejném uzlu. Pokud chcete zobrazit vlastnost, příkaz PowerShellu a výsledek by byly:

Get-ClusterGroup Group1 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Get-ClusterGroup Group2 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Vzhledem k tomu, že AntiAffinityClassNames nejsou definovány jako výchozí, můžou se tyto role spouštět společně nebo od sebe. Cílem je je zachovat oddělené. Hodnota AntiAffinityClassNames může být cokoli, co chcete, aby byly, jen musí být stejné. Řekněme, že Group1 a Group2 jsou řadiče domény běžící na virtuálních počítačích a nejlépe by fungovaly na různých uzlech. Vzhledem k tomu, že se jedná o řadiče domény, použiji DC pro název třídy. Pokud chcete nastavit hodnotu, příkaz PowerShellu a výsledky by byly:

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

Nyní, když jsou nastaveny, clusterový systém s podporou převzetí služeb při selhání se pokusí je udržet oddělené.

Parametr AntiAffinityClassName je blok "soft". To znamená, že se je pokusí zachovat od sebe, ale pokud to nejde, umožní jim to běžet na stejném uzlu. Skupiny například běží v dvouuzlovém clusteru pro převzetí služeb při selhání. Pokud je nutné odstavit jeden uzel kvůli údržbě, to by znamenalo, že obě skupiny by byly spuštěny na stejném uzlu. V tomto případě by to bylo v pořádku. Nemusí to být ideální, ale oba virtuální počítače budou stále běžet v přijatelném rozsahu výkonu.

Potřebuji víc

Jak už bylo zmíněno, AntiAffinityClassNames je měkký blok. Ale co když je potřeba pevný blok? Virtuální počítače nelze spustit na stejném uzlu; jinak dojde k dopadu na výkon a dojde k výpadku některých služeb.

V těchto případech existuje další vlastnost clusteru ClusterEnforcedAntiAffinity. Tato úroveň antiafinitnosti všemi způsoby zabrání tomu, aby jakákoli ze stejných hodnot AntiAffinityClassNames běžela na stejném uzlu.

Pokud chcete zobrazit vlastnost a hodnotu, příkaz PowerShellu (a výsledek) by byl:

Get-Cluster | fl ClusterEnforcedAntiAffinity
    ClusterEnforcedAntiAffinity : 0

Hodnota 0 znamená, že je zakázaná a nevynucuje se. Hodnota "1" to umožňuje a představuje pevný blok. Chcete-li povolit tento pevný blok, příkaz (a výsledek) je:

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

Pokud jsou obě tyto sady nastavené, zabrání se tomu, aby se skupina spojila do online režimu. Pokud jsou na stejném uzlu, zobrazí se to ve Správci převzetí služeb při selhání clusteru.

Spřažení clusteru

V powershellovém výpisu skupin by se zobrazilo toto:

Get-ClusterGroup

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

Další komentáře

  • Ujistěte se, že používáte správné nastavení AntiAffinity v závislosti na potřebách.

  • Mějte na paměti, že ve scénáři se dvěma uzly a nastavením "ClusterEnforcedAntiAffinity", pokud je jeden uzel nefunkční, nebudou se spouštět obě skupiny.

  • Použití upřednostňovaných vlastníků ve skupinách lze kombinovat s AntiAffinity v clusteru se třemi nebo více uzly.

  • Nastavení AntiAffinityClassNames a ClusterEnforcedAntiAffinity se provede pouze po recyklaci prostředků. To znamená, že je můžete nastavit, ale pokud jsou obě skupiny online na stejném uzlu při nastavení, budou oba nadále online.