本文說明如何在 Windows Server 故障轉移叢集上手動安裝功能更新,且不會停止工作負載。 此程式會在滾動升級中一次升級一個節點,通常稱為「滾動OS叢集升級」。
你可以一次升級叢集一個作業系統版本,例如從Windows Server 2022升級到Windows Server 2025。 要跨多個作業系統版本升級,例如從 Windows Server 2016 升級到 Windows Server 2025,請依本篇文章中每個版本的步驟進行。
本文適用於運行 Hyper-V 虛擬機或擴展檔案伺服器(SOFS)工作負載升級單一作業系統版本的叢集,但不適用於使用虛擬硬碟(.vhdx 檔案)作為共享儲存的叢集。 如果您正在使用 System Center Virtual Machine Manager(VMM),請參考 在 VMM 中執行 Hyper-V 主機叢集的滾動升級。 Azure Local客戶應使用關於Azure Local升級所述的更新流程,但如果Azure Local更新方法對你無效,也可以使用這篇文章。
Overview
將叢集滾動升級到下一版本的 Windows Server 可帶來以下好處:
- 將運行 Hyper-V 虛擬機或擴展檔案伺服器(SOFS)工作負載的叢集升級到下一個更新版本的 Windows Server,且不會有停機時間。
- 雖然您可以選擇暫時將叢集節點新增至小型叢集,以改善升級期間的可用性,但不需要新的硬體。
- 當叢集中混合作系統版本時,叢集可以在升級期間支援修補和維護作業。
- 升級過程在最後階段是可逆的,當所有叢集節點都運行較新的 Windows Server 版本時,你才會更新叢集功能層級。
- 它透過 PowerShell 和 WMI 支援自動化。
概括而言,滾動升級包含下列步驟:
準備叢集以進行OS功能更新。
將工作負載從第一個節點移出。
請透過 upgrade 或 clean install 來執行 Windows Server 功能更新。
針對叢集中的任何其他節點重複步驟 2 到 3。
將叢集功能層級與儲存池更新為新版 Windows Server。
繼續正常作業並更新 VM 組態版本以開啟新功能。
如需滾動升級程序的詳細圖表,請參閱圖 1。
需求和限制
開始升級之前,請先完成下列需求:
- 先從執行 Windows Server 2012 R2 或更新版本的故障轉移叢集開始。
- 請使用以下方法之一確認 Hyper-V 節點的 CPU 是否支援第二級位址轉換表(SLAT):
- 檢閱Are you SLAT Compatible? WP8 SDK 提示 01 文章,說明兩種方法檢查 CPU 是否支援 SLAT
- 下載 Coreinfo v3.31 工具以判斷 CPU 是否支援 SLAT。
以下是一些要注意的限制:
- 建議您在四周內完成叢集升級程式,因為某些叢集功能並未針對執行兩個不同的OS版本的叢集進行優化。
- 管理混合作業系統模式叢集時,務必從執行較新版本 Windows Server 的節點執行管理任務。 舊版 Windows Server 通常無法使用介面或管理工具來管理新版本。
- 避免在叢集運行多種作業系統版本時,在較新的 Windows Server 節點上建立或調整儲存空間。 這樣做可能會導致從較新的 Windows Server 節點切換到舊節點時出現不相容的問題。
- 你只能升級到下一個更新版本的作業系統,例如從 Windows Server 2022 升級到 Windows Server 2025。
若要跨多個版本升級,例如從 Windows Server 2016 升級到 Windows Server 2025,請依序執行升級(先升級至 Windows Server 2019,再到 Windows Server 2022,最後 Windows Server2025 年),或遷移到新的叢集。 - 無論你怎麼升級,舊虛擬機的設定版本都必須先升級,才能在 Windows Server 2022 或更新叢集上運行。 VM 配置版本超過 8.0(對應於 Windows Server 2016)無法在 Windows Server 2022 上執行。
舉例來說,如果你的虛擬機是在 Windows Server 2012 R2 系統上建立,並且使用 VM 設定版本 5.0,而你將叢集升級到 Windows Server 2022,你必須將虛擬機設定版本升級到 8.0 或更新版本。 如需詳細資訊,請參閱 移轉和升級虛擬機。
步驟 1:準備叢集以進行升級
開始升級節點之前,請確認叢集狀況良好且已準備好進行升級:
檢查叢集在移除一個節點的情況下,是否有足夠的容量以維持適當的正常運行時間服務等級協定。
- 當一個節點從叢集移除時,叢集是否有足夠的記憶體、CPU 和網路資源來執行所需的工作負載?
- 叢集中是否有足夠的節點,即使一個節點脫機也能維持必要的容錯? 您可能想要暫時將節點新增至兩個節點叢集,以在升級期間維護容錯。
對於 Hyper-V 工作負載,請確認所有 Windows Server Hyper-V 主機的 CPU 支援第二級位址轉譯表 (SLAT)。 只有支援 SLAT 的機器能在 Windows Server 2016 及更新版本中使用 Hyper-V 角色。
在叢集的所有節點上安裝最新的軟體更新。
檢查是否有任何工作負載備份已完成,並考慮使用系統狀態備份來備份叢集資料庫。
檢查所有叢集節點是否已啟動,使用 Get-ClusterNode cmdlet。
Get-ClusterNode以下是輸出的範例:
Name ID State ---- -- ----- Node1 1 Up Node2 2 Up Node3 3 Up停止在叢集上執行的任何更新工具。 例如,如果您使用叢集感知更新,請使用下列步驟:
確認叢集感知更新(CAU)目前是否正在透過 Cluster-Aware Updating UI 或 Get-CauRun cmdlet 進行。
Get-CauRun以下是名為 「Cluster01」 之叢集上的輸出範例:
RunNotInProgress WARNING: No Updating Run is currently in progress on cluster Cluster01.使用 Disable-CauClusterRole Cmdlet 停止叢集感知更新,以防止任何節點在升級期間自動暫停和清空。
Disable-CauClusterRole以下是輸出的範例:
Are you sure? Do you want to disable the Cluster-Aware Updating clustered role on cluster "Cluster01"? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):
步驟 2:將工作負載從節點移出
在叢集中的一個節點上執行下列步驟(您一次針對叢集中的每個節點重複此程式):
要在Windows Admin Center中清空該節點,請進入 Cluster Manager>Servers,選擇節點,然後選擇 Pause。 若要使用容錯移轉叢集管理員,請選取節點,然後選取 [ 暫停>清空],如圖 2 所示。 或使用帶有
-Drain參數的 Suspend-ClusterNode cmdlet,如下所示。Suspend-ClusterNode -Name Node1 -Drain以下是輸出的範例,其中顯示叢集節點現在已暫停:
Name ID State ---- -- ----- Node1 1 Paused如果你使用 Hyper-V,虛擬交換器綁定在 LBFO 小組,並且正在進行就地升級至 Windows Server 2022 或更新版本,請在開始升級前移除該小組。 升級之後,您可以將網路適配器系結至使用較新SET交換器技術的虛擬交換器。
在 Windows Server 2022 及更新版本中,LBFO 團隊不再支援 Hyper-V。 欲了解更多移除功能資訊,請參閱已移除或不再開發的功能,Windows Server。此步驟是選擇性的,視您執行就地升級還是全新 OS 安裝而定。 如果你要在節點上執行乾淨的作業系統安裝,首先要用 Windows Admin Center、Failover Cluster Manager 或 Remove-ClusterNode cmdlet 移除(驅逐)暫停的節點。
Remove-ClusterNode -Name Node1以下是輸出的範例:
Are you sure you want to evict node Node1? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):
步驟 3:安裝新版 Windows Server
在節點上執行新版 Windows Server 的升級或全新安裝。
如果你升級到 Windows Server 2022 或更新版本,並在升級前移除了 LBFO 團隊,請建立一個新的 Hyper-V 虛擬交換器,使用較新的 Switch Embedded Teaming(SET)技術來綁定多個網路介面卡。 你可以使用 Windows Admin Center、Hyper-V Manager 或
New-VMSwitch PowerShell 指令程式。 如果您執行了全新安裝,請讓節點準備好重新加入叢集:
將節點加入相應的 Active Directory 網域服務 網域。 如果叢集使用 儲存空間直接存取,務必使用相同的電腦名稱。
將合適的使用者新增至本機管理員群組。
安裝所需的伺服器角色與功能,如 Hyper-V、故障轉移叢集及 NetworkATC(支援 Windows Server 2025)。 你可以使用 Windows Admin Center、伺服器管理員,或是 Install-WindowsFeaturePowerShell 指令檔,如下範例所示:
Install-WindowsFeature -Name "Hyper-V", "Failover-Clustering", "NetworkATC" -IncludeAllSubFeature -IncludeManagementTools檢查網路和記憶體連線設定。
如果使用了 Windows 防火牆,請確認防火牆設定是否適合叢集。 例如,叢集感知更新可能需要防火牆設定。
對於 Hyper-V 工作負載,建立與叢集節點其他節點相匹配的虛擬交換器(除非是替換網路介面卡團隊,否則 LBFO 配置就不適用)。 你可以使用 Windows Admin Center、Hyper-V Manager 或
Get-VMSwitch 以及 Add-VMSwitch PowerShell 指令。 如果你在該節點上執行了乾淨的作業系統安裝,請連接到升級後的節點,然後使用 Windows Admin Center、Failover Cluster Manager 或
Add-ClusterNode cmdlet 將升級後的節點重新加入叢集。 如果您執行就地升級,則不需要執行此步驟,因為節點仍是叢集的一部分。 Add-ClusterNode -Name clusternode1以下是輸出的範例:
Waiting for notification that node clusternode1 is a fully functional member of the cluster.Note
當第一個升級的節點加入叢集時,叢集會進入「混合OS」模式,並將叢集核心資源移至較新的節點。 「混合的作業系統」模式叢集是功能完整的叢集,其中新節點會在相容性模式下與舊節點一同執行。 「混合OS」模式是叢集的暫時模式,您應該在四周內更新叢集的所有節點。
如果您執行了原地升級,請使用 Windows Admin Center、容錯叢集管理員,或使用 Resume-ClusterNode cmdlet 來恢復節點。
Resume-ClusterNode -Name clusternode1 -Failback Immediate以下是顯示叢集節點現在已啟動的輸出範例:
Name State Type ---- ----- ---- clusternode1 Up Node選擇性地將工作負載移至新加入的節點,以重新平衡叢集。
若要在不停機的情況下移動正在執行的虛擬機器,請使用 Windows Admin Center
Live Migration 、故障轉移叢集管理器,或 Move-ClusterVirtualMachineRole cmdlet。Move-ClusterVirtualMachineRole -Name VM1 -Node node1以下是輸出的範例:
Name OwnerNode State ---- --------- ----- VM1 node1 Online若要移動其他叢集工作負載,請使用容錯移轉叢集管理員中的 Move 命令或 Move-ClusterGroup Cmdlet。
步驟 4:針對叢集中的每個其他節點重複步驟 2 到 4
升級程式完全可復原,直到您在下一個步驟中更新叢集功能等級為止。 要放棄升級,請新增執行原始 Windows Server 版本的節點,然後移除執行新版本作業系統的節點。
步驟 5:更新叢集功能等級和存放集區版本
更新叢集功能等級和存放集區版本,可讓您使用新功能。 它也會改善一些叢集作業,例如從節點清空工作負載,這可能會導致節點在混合OS叢集上執行時短暫隔離。
當每個節點已安裝較新的作系統版本並新增回叢集或永久移除時,請完成下列步驟來更新叢集功能等級和存放集區版本。
Important
在你更新叢集功能層級和儲存池版本後,你無法回到較早的功能層級或儲存池版本,也無法將執行較早版本 Windows Server 的節點加入叢集。
檢查所有叢集角色是否如預期般在叢集上執行。 你可以使用 Windows Admin Center、故障轉移叢集管理器,或是 Get-ClusterGroup cmdlet:
Get-ClusterGroup以下是顯示四部 VM 和叢集群組在線輸出的範例:
Name OwnerNode State ---- --------- ----- Available Storage node2 Offline VM1 node2 Online VM2 node1 Online VM3 node1 Online VM4 node3 Online Cluster Group node1 Online無法使用可用的記憶體群組,而且離線,因為此叢集會使用叢集共用磁碟區 (CSV) 進行儲存。 如果叢集使用從SAN上的LUNS指派給它的磁碟,則可用的記憶體會處於在線狀態,但我們建議改用 CSV。
請使用 Windows Admin Center、Failover Cluster Manager 或 Get-ClusterNode 指令,確認所有叢集節點都已在線並運行。
Get-ClusterNode以下是輸出的範例:
Name ID State ---- -- ----- node1 1 Up node2 2 Up node3 3 UpWindows Admin Center 中可透過 Cluster Manager>Settings>Cluster>Properties 查看叢集功能層級。 或使用 Get-Cluster cmdlet。
Get-Cluster | Select ClusterFunctionalLevel以下是輸出的範例:
ClusterFunctionalLevel ----------------------- 10在 Windows Admin Center 中選擇新的功能層級,或執行 Update-ClusterFunctionalLevel cmdlet——不會回傳錯誤。
Update-ClusterFunctionalLevel以下是輸出的範例:
Updating the Functional level for cluster cluster01. Warning: You cannot undo this operation. Do you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):確認叢集功能層級已使用 Get-Cluster Cmdlet 更新:
Get-Cluster | Select ClusterFunctionalLevel以下是輸出的範例:
ClusterFunctionalLevel ----------------------- 11如果你正在使用儲存池,可以透過使用 Windows Admin Center >Cluster Manager>Settings>Storage Spaces and Pools>Storage pool version 來無停機地更新。 或使用 Update-StoragePool PowerShell Cmdlet。
步驟 6:繼續正常叢集作業並開啟新功能
若要繼續正常叢集作業並開啟新功能,請執行下列步驟:
如果您停止更新工具,請再次啟動它們。 例如,若要啟動叢集感知更新,您可以使用叢集感知更新工具或 Enable-CauClusterRole Cmdlet。
Enable-CauClusterRole以下是輸出的範例:
Are you sure? Do you want to enable the Cluster-Aware Updating Clustered role on Cluster "cluster01"? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"):恢復您因升級而停止的任何備份作業。
若要開啟 VM 可用的新功能,請升級每個 VM 的組態版本。 關於新增Hyper-V功能清單,請參見 遷移與升級虛擬機。
使用 Get-VMHostSupportedVersion Cmdlet 檢視每個節點支援的 VM 版本。 此時,每個節點都應該有相同的支援版本。
Get-VMHostSupportedVersion -ComputerName node1以下是輸出的範例,其中顯示 VM 版本號碼和對應的作系統名稱:
Name Version IsDefault ---- ------- --------- Microsoft Windows 10 Anniversary Update/Server 2016 8.0 False Microsoft Windows 10 Creators Update 8.1 False Microsoft Windows 10 Fall Creators Update/Server 1709 8.2 False Microsoft Windows 10 April 2018 Update/Server 1803 8.3 False Microsoft Windows 10 October 2018 Update/Server 2019 9.0 False Microsoft Windows 10 May 2019 Update/Server 1903 9.1 False Microsoft Windows 10 May 2020 Update/Server 2004 9.2 False Microsoft Windows 10 (Manganese) 9.3 False Microsoft Windows Server 2022 10.0 False Microsoft Host OS (Cobalt+) 10.5 False Microsoft Windows 11 (22H2) 11.0 False Microsoft Windows 11 (Copper) 11.1 False Microsoft Windows 11 (Zinc) 11.2 False Microsoft Windows Server 2025 12.0 True使用 Get-VM Cmdlet 檢視叢集中每個節點上的 VM。
Get-VM -ComputerName node1以下是輸出的範例:
Name State CPUUsage(%) MemoryAssigned(M) Uptime Status Version ---- ----- ----------- ----------------- ------ ------ ------- VM1 Running 0 12288 2.20:28:49.6670000 Operating normally 8.0 VM2 Running 0 4096 14.23:13:12.7370000 Operating normally 8.0 VM3 Running 0 1216 2.20:09:38.9450000 Operating normally 8.0在排程維護期間,您可以讓 VM 離線、備份和升級每個節點上所有較舊的 VM。
要在Windows Admin Center中操作,請前往 Cluster Manager>Virtual Machines,選擇虛擬機,然後選擇 Manage>Upgrade configuration version。
或者使用 Update-VMVersion Cmdlet,如本範例所示,將一個節點上的所有 VM 更新為最新版本。Update-VMVersion -ComputerName node1 -Name * -WhatIf以下是輸出的範例:
Confirm Are you sure you want to perform this action? Performing a configuration version update of "dc1" will prevent it from being migrated to or imported on previous versions of Windows. This operation is not reversible. [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
叢集作業系統輪流升級期間的叢集轉換狀態
叢集公共屬性ClusterFunctionalLevel屬性表示叢集在Windows Server 2016及後續叢集節點上的狀態。 您可以從屬於容錯移轉叢集的叢集節點使用 PowerShell Cmdlet 來查詢此屬性:
Get-Cluster | Select ClusterFunctionalLevel
下表顯示值和每個對應的功能等級:
| Value | 功能層面 |
|---|---|
| 8 | Windows Server 2012 R2 |
| 9 | Windows Server 2016 |
| 10 | Windows Server 2019 |
| 11 | Windows Server 2022 |
| 12 | Windows Server 2025 |
常見問題集
-
故障轉移叢集可以在混合OS模式中執行多久?
我們鼓勵客戶在四週內完成升級。 Hyper-V 與擴展型檔案伺服器叢集可在總共不到四小時內無停機地升級。 -
節點關閉或暫停時,是否可以執行 Update-ClusterFunctionalLevel Cmdlet?
No. 所有叢集節點都必須處於啟用狀態並成為作用中成員,以便 Update-ClusterFunctionalLevel cmdlet 能正常運作。 - 叢集OS滾動升級是否適用於任何叢集工作負載? 它能在 SQL Server 上運作嗎?
是,叢集OS滾動升級適用於任何叢集工作負載。 不過,只有在 Hyper-V 和擴展型檔案伺服器叢集中,才實現零停機。 大部分的其他工作負載在容錯移轉時會產生一些停機時間(通常是幾分鐘),而且在叢集作業系統輪流升級過程中至少需要容錯移轉一次。 -
我可以使用PowerShell將此程式自動化嗎?
Yes. -
對於具有額外故障轉移容量的大型叢集,我可以同時升級多個節點嗎?
Yes. 從叢集中移除一個節點以升級OS時,叢集的故障轉移節點較少,因此故障轉移容量會降低。 如果是具有足夠工作負載和容錯移轉容量的大型叢集,則可以同時升級多個節點。 -
如果我在 Update-ClusterFunctionalLevel 成功執行之後,在叢集中發現問題該怎麼辦?
如果你在執行 Update-ClusterFunctionalLevel之前已經備份了叢集資料庫並備份系統狀態,你應該能對執行先前版本 Windows Server 的節點執行權威還原,並還原原始叢集資料庫和設定。 -
是否可以透過重新格式化系統磁碟驅動器,針對每個節點使用就地升級,而不是使用 clean-OS 安裝?
Yes. 過去,我們建議您在每個節點上執行全新的作業系統安裝。 不過,如果您仔細閱讀並解決任何警告訊息,您現在可以執行叢集節點的就地升級。 -
如果我在Hyper-V叢集上使用 Hyper-V 複寫來管理Hyper-V虛擬機,複寫會在叢集作業系統滾動升級過程中及之後保持完整嗎?
是的,Hyper-V 複本在叢集作業系統滾動升級過程中及之後都會保持完整。 - 我可以使用 System Center Virtual Machine Manager(VMM)來自動化叢集作業系統的滾動升級流程嗎? 是,您可以在 System Center 中使用 VMM 將叢集作業系統輪流升級程序自動化。