叢集同質

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016、Azure Stack HCI 21H2 和 20H2 版本

容錯移轉叢集可以保留可在節點與執行之間移動的許多角色。 某些角色 (即虛擬機器、資源群組等) 有時不應在相同節點上。 這可能是因為資源使用量、記憶體使用量等等所引起。 例如,有兩部記憶體和 CPU 密集的虛擬機器,且如果這兩部虛擬機器都在同一個節點上執行,那麼其中一部或這兩部虛擬機可能有影響效能的問題。 本文將說明叢集非同質層級及其使用方式。

什麼是同質和非同質?

同質是您可能會設定的規則,用於建立兩個或更多角色之間的關係 (即虛擬機器、資源群組等等),以便讓它們保持在一起。 非同質雖然是相同的概念,但卻是嘗試讓指定的角色彼此分開。 容錯移轉叢集會對其角色使用非同質規則。 更具體來說,AntiAffinityClassNames 參數於角色上定義,因此角色不會在相同節點上執行。

AntiAffinityClassnames

查看群組的屬性時,AntiAffinityClassNames 參數預設為空白。 在下列範例中,Group1 和 Group2 不應在相同節點上執行。 若要檢視屬性,PowerShell 命令和結果可能會是:

Get-ClusterGroup Group1 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

Get-ClusterGroup Group2 | fl AntiAffinityClassNames
    AntiAffinityClassNames : {}

由於 AntiAffinityClassNames 的預設設定並未定義,因此這些角色可以共同或分開執行。 目標為讓角色分開執行。 AntiAffinityClassNames 的值可以是您想要的任何值,但它們必須相同。 假設 Group1 和 Group2 是在虛擬機器中執行的網域控制器,且它們最好在不同的節點上執行。 由於這些是網域控制器,因此我會用 DC 做為類別名稱。 若要設定值,PowerShell 命令和結果可能會是:

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

現在值已經設定,因此容錯移轉叢集將嘗試把它們分開。

AntiAffinityClassName 參數是「軟性」區塊。 換言之,此參數會嘗試讓它們分開,但如果做不到,則仍會允許它們在相同節點上執行。 例如,群組正在兩個節點的容錯移轉叢集上執行。 如果一個節點需要關閉以進行維護,這表示這兩個群組都會在同一個節點上啟動並執行。 在此情況下,這樣做沒問題。 雖然可能不是最理想的狀態,但虛擬機器仍將在可接受的效能範圍內執行。

我需要更多

如之前所述,AntiAffinityClassNames 是軟性區塊。 但如果需要硬性區塊呢? 虛擬機器無法在同一節點上執行;否則效能會受到影響,並可能導致某些服務關閉。

在這些情況下,還有另一個叢集屬性 ClusterEnforcedAntiAffinity。 此非同質層級將盡全力防止任何相同的 AntiAffinityClassNames 值在相同節點上執行。

若要檢視屬性和值,PowerShell 命令 (和結果) 可能會是:

Get-Cluster | fl ClusterEnforcedAntiAffinity
    ClusterEnforcedAntiAffinity : 0

「0」的值表示已停用值,且不會強制執行。 「1」的值則會啟用該值,表示為硬性區塊。 若要啟用此應性區塊,命令 (和結果) 會是:

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

兩者全都設定時,將防止群組共同上線。 如果它們位於同一節點上,您可能會在容錯移轉叢集管理員看到這樣的內容。

Cluster Affinity

在群組的 PowerShell 清單中,您可能會看到:

Get-ClusterGroup

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

其他註解

  • 請確保您正根據需求使用正確的 AntiAffinity 設定。

  • 請記住,這是兩個節點的案例和 ClusterEnforcedAntiAffinity,如果一個節點關閉,這兩個群組都不會執行。

  • 在群組上使用慣用的擁有者的做法可以結合在三個或更多節點叢集上使用非同質規則。

  • AntiAffinityClassNames 和 ClusterEnforcedAntiAffinity 設定只會在資源回收後執行。 也就是說,雖然您可以設定它們,但如果這兩個群組都在設定時在相同節點上線,它們仍會繼續保持上線。