適用於:Windows Server 2019
本文提供如何使用PowerShell為 Windows Server故障轉移叢集部署叢集的資訊。 叢集集合是由多個故障轉移叢集組成的群組。 藉由使用叢集集,您可以依大小順序增加單一軟體定義資料中心 (SDDC) 雲端中的伺服器節點數目。
叢集組已經過測試並支援高達64個叢集節點。 不過,叢集設定可以擴展到更大的範圍,且不會被指定固定的限制。
優點
叢集提供下列優點:
藉由將多個較小的叢集結合成單一大型網狀架構,同時將軟體容錯界限保持在單一叢集,大幅提升支援的 SDDC 雲端規模,以執行高可用性虛擬機(VM)。 您可以輕鬆地跨叢集移轉 VM。
增強復原能力。 在一組叢集中擁有四個包含 4 個節點的叢集,比單一 16 節點的叢集提供更高的彈性,因為多個計算節點失效時,生產環境的運行不受影響。
故障轉移叢集生命週期的管理,包括上線和淘汰叢集,而不會影響租使用者 VM 可用性。
跨個別叢集和呈現統一記憶體命名空間的 VM 彈性。
輕鬆變更超交集環境中的計算對記憶體工作負載比例。
利用 類似 Azure 的容錯網域及可用性設定組,在初始 VM 放置和後續遷移中獲益。
即使叢集節點之間的計算和記憶體硬體不相同,仍可使用。
叢集之間的 VM 實時移轉。
跨多個叢集的類似 Azure 的可用性設定組和容錯網域。
在叢集之間移動 SQL Server VM。
需求和限制
使用叢集有一些需求和限制:
叢集中的所有成員叢集都必須位於相同的 Active Directory (AD) 樹系中。
集合中的成員伺服器必須執行相同的作系統版本。 不同作系統之間無法即時移轉虛擬機。 您可以有叢集集,其中包含下列選項的任一個,但不能包含多個:
- Windows Server 2019 故障轉移叢集和 Windows Server 2019 故障轉移叢集
- Windows Server 2019 故障轉移叢集和 Windows Server 2019 直通儲存空間
- Windows Server 2019 儲存空間直接存取和 Windows Server 2019 儲存空間直接存取
所有成員伺服器都需要相同的處理器硬體,才能在成員叢集之間進行即時移轉;否則,您必須在虛擬機設定中選取 CPU 處理器相容性。
叢集中的 VM 必須手動跨叢集進行即時遷移,無法自動切換至其他叢集。
成員叢集之間必須使用儲存複本,才能實現對叢集故障的儲存復原能力。 使用記憶體複本時,請記住命名空間記憶體 UNC 路徑不會在記憶體複本故障轉移至複本目標叢集時自動變更。
Storage Spaces Direct 無法在叢集組合中的成員叢集之間運作。 相反地,儲存空間直接存取會套用至單一叢集,而每個叢集都有自己的存放集區。
建築
下圖說明高層次的叢集:
下列提供所顯示每個元素的摘要:
管理叢集
管理叢集承載高度可用的管理平面和叢集組的命名空間轉介向外延展檔案伺服器 (SOFS)。 管理叢集在邏輯上與執行 VM 工作負載的個別成員叢集分離。 這使得叢集管理層對於任何本地化的整體叢集故障具有復原能力,例如成員叢集失去電力供應。
叢集集區命名空間轉介SOFS
提供了一個供叢集集合使用的命名空間,該空間由管理叢集上的 SOFS 伺服器角色運行。 這類似於分散式檔系統命名空間 (DFSN)。 不過,不同於 DFSN,叢集集命名空間轉介元數據會在所有叢集節點上自動填入,而不需要任何介入,因此記憶體存取路徑幾乎沒有效能額外負荷。 這個輕量型轉介機制不會參與 I/O 路徑。
叢集命名空間轉介 SOFS 上的每一個伺服器訊息塊 (SMB) 轉介共用的類型為 SimpleReferral
。 此轉介可讓SMB用戶端存取裝載在成員叢集SOFS上的目標SMB共用。 轉介會在每個客戶端節點上永久快取,而叢集集命名空間會視需要動態更新轉介。 即使在重新啟動期間,每個叢集集節點仍會持續快取轉介資訊。
叢集主控
成員叢集之間的通訊會鬆散結合,並由叢集集主機 (CS-Master) 資源協調。 與其他叢集集資源一樣,CS-Master 具有高可用性,且可復原個別成員叢集失敗或管理叢集節點失敗。 透過叢集 WMI 提供者,CS-Master 提供所有叢集管理動作的管理端點。
成員叢集
成員叢集會執行 VM 和 Storage Spaces Direct(儲存空間直接存取)工作負載。 多個成員叢集會參與叢集部署,形成較大的 SDDC 雲端網狀架構。 成員叢集與管理叢集在兩個主要方面不同:成員叢集被納入容錯網域和可用性設定組,而成員叢集的規模則設計為可支援虛擬機器 (VM) 和 Storage Spaces Direct 工作負載。 由於這個原因,跨成員叢集移動的 VM 不會裝載於管理叢集上。
叢集設置工作者
CS-Master 會與成員叢集上的叢集資源互動,稱為叢集集合工作者(CS-Worker)。 CS-Worker 對 CS-Master 的要求作出回應,包括虛擬機 (VM) 的配置和資源清查。 每個成員叢集有一個 CS-Worker 實例。
故障網域
故障域是一個可能會一起故障的硬體和軟體組合。 雖然您可以將一或多個叢集指定為容錯網域,但每個節點都可以參與可用性設定組中的容錯網域。 容錯網域界限是以數據中心拓撲、網路架構和其他考慮為基礎。
可用性設定組
可用性設定組可用來藉由分組和部署工作負載,設定跨容錯網域的叢集工作負載所需的備援。 針對兩層式應用程式,您應該在每個層的可用性設定組中至少設定兩個 VM,這可確保當可用性設定組中的容錯網域關閉時,您的應用程式在每個層中至少有一個 VM 裝載在不同的容錯網域上。
建立叢集
在下列範例工作流程中使用PowerShell,以使用兩個叢集建立叢集集。 在此設定的叢集名稱是 CSMASTER。
叢集名稱 | 基礎設施SOFS名稱 |
---|---|
SET-CLUSTER | SOFS-CLUSTERSET |
CLUSTER1 | SOFS-CLUSTER1 |
CLUSTER2 | SOFS-CLUSTER2 |
使用執行 Windows Server 2022 或 Windows Server 2019 的管理客戶端電腦。
在管理叢集伺服器上安裝故障轉移叢集工具。
建立兩個叢集成員,並在每個叢集中建立至少兩個叢集共用磁碟區 (CSV)。
建立一個橫跨成員叢集的管理叢集(實體或虛擬)。 這確保即使發生可能的成員叢集失敗,也能繼續提供叢集集合的管理平面。
若要建立叢集:
New-ClusterSet -Name CSMASTER -NamespaceRoot SOFS-CLUSTERSET -CimSession SET-CLUSTER
備註
如果您使用靜態 IP 位址,則必須在 New-ClusterSet 命令中包含 -StaticAddress x.x.x.x。
若要將叢集成員新增至叢集:
Add-ClusterSetMember -ClusterName CLUSTER1 -CimSession CSMASTER -InfraSOFSName SOFS-CLUSTER1 Add-ClusterSetMember -ClusterName CLUSTER2 -CimSession CSMASTER -InfraSOFSName SOFS-CLUSTER2
若要列舉叢集中的所有成員叢集:
Get-ClusterSetMember -CimSession CSMASTER
若要列舉叢集中的所有成員叢集,包括管理叢集節點:
Get-ClusterSet -CimSession CSMASTER | Get-Cluster | Get-ClusterNode
若要列出所有成員叢集中的所有伺服器節點:
Get-ClusterSetNode -CimSession CSMASTER
若要列出叢集的所有資源群組:
Get-ClusterSet -CimSession CSMASTER | Get-Cluster | Get-ClusterGroup
若要確認叢集集包含每個叢集成員 CSV 磁碟區基礎結構 SOFS 上的一個 SMB 共用(
ScopeName
為基礎結構檔伺服器名稱):Get-SmbShare -CimSession CSMASTER
檢閱叢集組偵錯記錄檔,以檢查叢集組、管理叢集及每個叢集成員的記錄檔。
Get-ClusterSetLog -ClusterSetCimSession CSMASTER -IncludeClusterLog -IncludeManagementClusterLog -DestinationFolderPath <path>
設定 Kerberos ,在所有叢集成員之間進行限制委派。
在叢集的每個節點上,將跨叢集 VM 實時移轉驗證類型設定為 Kerberos:
foreach($h in $hosts){ Set-VMHost -VirtualMachineMigrationAuthenticationType Kerberos -ComputerName $h }
將管理叢集新增至叢集中每個叢集成員伺服器節點上的本機系統管理員群組:
foreach($h in $hosts){ Invoke-Command -ComputerName $h -ScriptBlock {Net localgroup administrators /add <management_cluster_name>$} }
建立叢集組的多台 VM
建立叢集集之後,下一個步驟是建立 VM。 您應該事先執行下列檢查:
- 檢查每個叢集伺服器節點上的可用記憶體
- 檢查每個叢集伺服器節點上的可用磁碟空間
- 在速度和效能方面,進行對任何特定的 VM 儲存需求的檢查。
Get-ClusterSetOptimalNodeForVM
命令會識別叢集中的最佳叢集和節點,然後將 VM 部署在它上。 在下列範例中,會建立新的 VM:
- 4 GB 可用
- 一個虛擬處理器
- 10% 可用的最小 CPU
# Identify the optimal node to create a new virtual machine
$memoryinMB=4096
$vpcount = 1
$targetnode = Get-ClusterSetOptimalNodeForVM -CimSession CSMASTER -VMMemory $memoryinMB -VMVirtualCoreCount $vpcount -VMCpuReservation 10
$secure_string_pwd = convertto-securestring "<password>" -asplaintext -force
$cred = new-object -typename System.Management.Automation.PSCredential ("<domain\account>",$secure_string_pwd)
# Deploy the virtual machine on the optimal node
Invoke-Command -ComputerName $targetnode.name -scriptblock { param([String]$storagepath); New-VM CSVM1 -MemoryStartupBytes 3072MB -path $storagepath -NewVHDPath CSVM.vhdx -NewVHDSizeBytes 4194304 } -ArgumentList @("\\SOFS-CLUSTER1\VOLUME1") -Credential $cred | Out-Null
Start-VM CSVM1 -ComputerName $targetnode.name | Out-Null
Get-VM CSVM1 -ComputerName $targetnode.name | fl State, ComputerName
完成時,會顯示 VM 部署所在的叢集節點。 針對上述範例,其會顯示為:
State : Running
ComputerName : 1-S2D2
如果記憶體、CPU 容量或磁碟空間不足,無法新增 VM,您將會收到下列錯誤:
Get-ClusterSetOptimalNodeForVM : A cluster node isn't available for this operation.
建立 VM 之後,它會顯示在指定之特定節點上 Hyper-V 管理員中。 若要將它新增為叢集 VM,並將其新增至叢集,請使用此命令:
Register-ClusterSetVM -CimSession CSMASTER -MemberName $targetnode.Member -VMName CSVM1
完成時,輸出為:
Id VMName State MemberName PSComputerName
-- ------ ----- ---------- --------------
1 CSVM1 On CLUSTER1 CSMASTER
如果您已使用現有的 VM 建立叢集,則必須向叢集註冊 VM。 若要一次註冊所有 VM,請使用:
Get-ClusterSetMember -Name CLUSTER3 -CimSession CSMASTER | Register-ClusterSetVM -RegisterAll -CimSession CSMASTER
接下來,將 VM 路徑新增至叢集集命名空間。
例如,假設將現有的叢集新增到叢集集合中,並且該叢集包含已預先配置、位於本機叢集共用磁碟區(CSV)的虛擬機器。 VHDX 的路徑與 C:\ClusterStorage\Volume1\MYVM\Virtual Hard Disks\MYVM.vhdx1
類似。
需要進行儲存空間移轉,因為 CSV 路徑根據設計僅限於單一成員叢集的本機使用,因而在 VM 實時移轉到其他成員叢集之後將無法存取。
在此範例中,新增 CLUSTER3 到叢集集合,使用 Add-ClusterSetMember
和向外延展檔伺服器 SOFS-CLUSTER3。 若要移動 VM 組態和記憶體,命令為:
Move-VMStorage -DestinationStoragePath \\SOFS-CLUSTER3\Volume1 -Name MyVM
完成後,您可能會收到警告:
WARNING: There were issues updating the virtual machine configuration that may prevent the virtual machine from running. For more information view the report file below.
WARNING: Report file location: C:\Windows\Cluster\Reports\Update-ClusterVirtualMachineConfiguration '' on date at time.htm.
因為虛擬機角色記憶體設定中沒有實體變更,因此可能會忽略此警告。 實際的物理位置不會變更,只有設定路徑會變更。
如需 Move-VMStorage
的詳細資訊,請參閱 Move-VMStorage。
即時移轉叢集內的 VM 牽涉到下列各項:
Set-VMHost -UseAnyNetworkForMigration $true
然後,若要將叢集設定 VM 從 CLUSTER1 移至 CLUSTER3 上的 NODE2-CL3,例如,命令會是:
Move-ClusterSetVM -CimSession CSMASTER -VMName CSVM1 -Node NODE2-CL3
此命令不會移動 VM 記憶體或組態檔,而且不需要,因為 VM 的路徑會維持為 \\SOFS-CLUSTER1\VOLUME1。 一旦 VM 向基礎結構檔伺服器共享路徑註冊,磁碟驅動器和 VM 就不需要位於與 VM 相同的節點上。
建立擴展型檔案伺服器基礎結構
叢集上有一個基礎結構SOFS叢集角色。 基礎結構 SOFS 角色的建立方式是將 -Infrastructure
switch 參數指定至 Add-ClusterScaleOutFileServerRole
Cmdlet。 例如:
Add-ClusterScaleoutFileServerRole -Name "my_infra_sofs_name" -Infrastructure
每個建立的 CSV 磁碟區都會根據 CSV 磁碟區名稱自動觸發 SMB 共用的建立。 除了使用 CSV 磁碟區建立和修改作業以外,您無法直接在 SOFS 角色下建立或修改 SMB 共用。
在超融合組態中,基礎結構SOFS可讓SMB用戶端(Hyper-V 主機)以持續可用性(CA)與基礎結構SOFS SMB伺服器進行通訊。 此超融合 SMB 環回憑證授權是透過虛擬機器(VM)存取其虛擬磁碟(VHDX)檔案來實現,其中,VM 的身份識別在用戶端與伺服器之間進行轉遞。 此身份轉發允許在標準超融合叢集組態中像以往一樣針對 VHDx 檔案使用 ACL。
建立叢集集合之後,叢集集合命名空間會依賴每個成員叢集上的基礎設施 SOFS,以及管理叢集中的基礎設施 SOFS。
當成員叢集新增至叢集時,如果叢集已經存在,您可以指定該叢集上的基礎結構 SOFS 名稱。 如果基礎結構 SOFS 不存在,則會建立新成員叢集上的新基礎結構 SOFS 角色。 如果成員叢集上已經有基礎結構SOFS角色,Add作業會視需要隱含地將它重新命名為指定的名稱。 集群集合不會使用任何現有的SMB伺服器或成員集群上的非基礎設施SOFS角色。
建立叢集集時,您可以選擇使用現有的 AD 計算機對象作為管理叢集上的命名空間根目錄。 叢集建立會在管理叢集上建立基礎結構SOFS叢集角色,或重新命名現有的基礎結構SOFS角色。 管理叢集上的基礎結構 SOFS 用作叢集集合命名空間參考 SOFS。
建立容錯網域和可用性設定組
您可以在叢集中設定類似 Azure 的容錯網域和可用性設定組。 這對 VM 的初始放置和叢集之間的遷移很有幫助。
下列範例中的叢集集合有四個叢集。 在集合中,會建立一個容錯網域,其中兩個叢集會建立一個容錯網域,另一個容錯網域會與其他兩個叢集一起建立。 這兩個容錯網域組成可用性設定組。
在下列範例中,CLUSTER1和CLUSTER2位於容錯網域 FD1,CLUSTER3和CLUSTER4位於容錯網域 FD2。 可用性設定群組 CSMASTER-AS。
若要建立容錯網域,命令如下:
New-ClusterSetFaultDomain -Name FD1 -FdType Logical -CimSession CSMASTER -MemberCluster CLUSTER1,CLUSTER2 -Description "First fault domain"
New-ClusterSetFaultDomain -Name FD2 -FdType Logical -CimSession CSMASTER -MemberCluster CLUSTER3,CLUSTER4 -Description "Second fault domain"
為了確保它們已成功建立,Get-ClusterSetFaultDomain
可以使用 FD1 顯示的輸出來執行:
PS C:\> Get-ClusterSetFaultDomain -CimSession CSMASTER -FdName FD1 | fl *
PSShowComputerName : True
FaultDomainType : Logical
ClusterName : {CLUSTER1, CLUSTER2}
Description : First fault domain
FDName : FD1
Id : 1
PSComputerName : CSMASTER
既然已建立容錯網域,就會建立可用性設定組:
New-ClusterSetAvailabilitySet -Name CSMASTER-AS -FdType Logical -CimSession CSMASTER -ParticipantName FD1,FD2
若要驗證它是否已建立,請使用:
Get-ClusterSetAvailabilitySet -AvailabilitySetName CSMASTER-AS -CimSession CSMASTER
建立新的 VM 時,請使用 -AvailabilitySet
參數來判斷放置的最佳節點。 以下為範例:
# Identify the optimal node to create a new VM
$memoryinMB=4096
$vpcount = 1
$av = Get-ClusterSetAvailabilitySet -Name CSMASTER-AS -CimSession CSMASTER
$targetnode = Get-ClusterSetOptimalNodeForVM -CimSession CSMASTER -VMMemory $memoryinMB -VMVirtualCoreCount $vpcount -VMCpuReservation 10 -AvailabilitySet $av
$secure_string_pwd = convertto-securestring "<password>" -asplaintext -force
$cred = new-object -typename System.Management.Automation.PSCredential ("<domain\account>",$secure_string_pwd)
從集合中移除叢集
有時候需要從叢集組移除叢集。 最佳做法是,所有叢集集 VM 都應該事先移出叢集。 這可以使用 Move-ClusterSetVM
和 Move-VMStorage
命令來完成。
如果 VM 未先移出叢集,則所有裝載於被移除叢集上的剩餘叢集設定 VM 將變成高可用性 VM 並與該叢集綁定,假設它們可以存取其儲存空間。 叢集集區也會自動更新其清單,方法是停止追蹤已移除叢集及其上運行的 VM 的健康狀況,並移除命名空間和所有對已移除叢集上托管的共用的引用。
例如,從叢集移除CLUSTER1叢集的命令如下:
Remove-ClusterSetMember -ClusterName CLUSTER1 -CimSession CSMASTER
系統狀態備份
系統狀態備份將會備份叢集狀態和元數據。 使用 Windows Server 備份,您可以視需要只還原節點的叢集資料庫,或執行授權還原,以在所有節點上復原整個叢集資料庫。 針對叢集集,建議您先對成員叢集執行授權還原,然後再針對管理叢集執行授權還原。 如需系統狀態備份的詳細資訊,請參閱 備份系統狀態和裸機。
後續步驟
- 了解更多儲存體複本。