本文介绍如何在不停止工作负荷的情况下在 Windows Server 故障转移群集上手动安装功能更新。 该过程在滚动升级中一次升级一个节点,通常称为滚动 OS 群集升级。
一次可以升级群集一个 OS 版本,例如从 Windows Server 2022 升级到 Windows Server 2025。 若要跨多个 OS 版本(例如从 Windows Server 2016 升级到 Windows Server 2025)进行升级,请再次执行本文中的步骤。
本文适用于运行 Hyper-V 虚拟机或横向扩展文件服务器(SOFS)工作负载的群集,升级一个 OS 版本,但不适用于使用虚拟硬盘(.vhdx 文件)作为共享存储的群集。 如果使用 System Center Virtual Machine Manager(VMM),请参阅 在 VMM 中执行 Hyper-V 主机群集的滚动升级。 Azure 本地客户应使用 “关于 Azure 本地升级”中所述的更新过程,但如果没有任何 Azure 本地更新方法适合你,则可以使用本文。
概述
将群集滚动升级到下一个较新版本的 Windows Server 具有以下优势:
- 将运行 Hyper-V 虚拟机或横向扩展文件服务器(SOFS)工作负载的群集升级到下一个较新版本的 Windows Server,而不会停机。
- 无需新硬件,不过可以选择暂时将群集节点添加到小型群集,以提高升级期间的可用性。
- 当群集中存在混合 OS 版本时,群集可以在升级期间支持修补和维护作。
- 在最后一步之前,当所有群集节点都运行较新版本的 Windows Server 并更新群集功能级别时,升级过程是可逆的。
- 它支持通过 PowerShell 和 WMI 实现自动化。
概括而言,滚动升级包括以下步骤:
- 为 OS 功能更新准备群集。
- 将工作负荷从第一个节点转移。
- 通过 升级 或 全新安装执行 Windows Server 功能更新。
- 对群集中的每个其他节点重复步骤 2 到 3。
- 将群集功能级别和存储池更新到新版本的 Windows Server。
- 恢复正常作并更新 VM 配置版本以启用新功能。
有关滚动升级过程的详细图示,请参阅图 1。
图 1:滚动升级过程示意图
要求和限制
在开始升级之前完成以下要求:
- 从运行 Windows Server 2012 R2 或更高版本的故障转移群集开始。
- 使用以下方法之一验证 Hyper-V 节点是否具有支持 Second-Level 寻址表(SLAT)的 CPU:
- 查看 Are you SLAT Compatible? WP8 SDK 提示 01 一文,其中介绍了两种检查 CPU 是否支持 SLAT 的方法
- 下载 Coreinfo v3.31 工具以确定 CPU 是否支持 SLAT。
以下是需要注意的一些限制:
- 建议在四周内完成群集升级过程,因为某些群集功能未针对运行两个不同的 OS 版本的群集进行优化。
- 管理混合 OS 模式群集时,始终从运行较新版本 Windows Server 的节点执行管理任务。 较旧版本的 Windows Server 通常无法使用 UI 或管理工具来管理较新版本。
- 避免在群集运行混合作系统版本时在较新的 Windows Server 节点上创建或调整存储大小。 这样做可能导致从较新的 Windows Server 节点切换到较旧的节点时出现不兼容问题。
- 只能升级到下一个较新版本的 OS,例如,从 Windows Server 2022 升级到 Windows Server 2025。
若要跨多个版本(例如从 Windows Server 2016 升级到 Windows Server 2025),请依次运行升级(首先运行到 Windows Server 2019、Windows Server 2022,最后升级到 Windows Server 2025),或迁移到新群集。 - 必须先升级旧 VM 的配置版本,然后才能在 Windows Server 2022 或更高版本的群集上运行,而不考虑升级方式。 低于 8.0(对应于 Windows Server 2016)的 VM 配置版本无法在 Windows Server 2022 上运行。
例如,如果在 Windows Server 2012 R2 系统上创建了 VM 并使用 VM 配置版本 5.0,并且将群集升级到 Windows Server 2022,则必须将 VM 配置版本升级到 8.0 或更高版本。 有关详细信息,请参阅 迁移和升级虚拟机。
步骤 1:为升级准备群集
在开始升级节点之前,请验证群集是否正常且已准备好升级:
检查群集是否具备足够的容量,以在移除一个节点的情况下维持适当的正常运行时间服务级别协议。
- 当从群集中删除一个节点时,群集是否有足够的存储、CPU 和网络资源来运行所需的工作负荷?
- 群集中是否有足够的节点在一个节点脱机的情况下保持所需的容错能力? 你可能希望暂时将节点添加到两个节点群集,以在升级期间保持容错。
对于 Hyper-V 工作负载,请检查所有 Windows Server Hyper-V 主机是否都对二级地址表 (SLAT) 提供 CPU 支持。 只有支持 SLAT 的计算机才能在 Windows Server 2016 及更高版本中使用 Hyper-V 角色。
在群集的所有节点上安装最新的软件更新。
检查任何工作负荷备份是否已完成,并考虑使用系统状态备份备份群集数据库。
检查是否使用 Get-ClusterNode cmdlet 启动所有群集节点。
Get-ClusterNode
下面是输出示例:
Name ID State ---- -- ----- Node1 1 Up Node2 2 Up Node3 3 Up
停止群集上运行的任何更新工具。 例如,如果您正在使用群集感知更新,请按照以下步骤操作:
使用 Cluster-Aware 更新 UI 或 Get-CauRun cmdlet 验证群集感知更新(CAU)当前是否正在执行运行。
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 中的节点,请导航到 群集管理器>服务器,选择该节点,然后选择 “暂停”。 若要使用故障转移群集管理器,请选择节点,然后选择 “暂停>清空”,如图 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、故障转移群集管理器或 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 2022 或更高版本并删除了 LBFO 团队,请创建一个新的 Hyper-V 虚拟交换机,该交换机使用较新的交换机嵌入式组合(SET)技术绑定到多个网络适配器。 可以使用 Windows Admin Center、Hyper-V Manager 或 New-VMSwitch PowerShell cmdlet。
如果执行了全新安装,请让节点准备好重新加入群集:
将节点加入相应的 Active Directory 域服务域。 如果群集使用存储空间直通,请确保使用相同的计算机名称。
将适当的用户添加到本地管理员组。
安装所需的任何服务器角色和功能,例如 Hyper-V、故障转移群集和 NetworkATC(在 Windows Server 2025 上可用)。 可以使用 Windows Admin Center、Server Manager 或 Install-WindowsFeature PowerShell cmdlet,如以下示例所示:
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 cmdlet。
连接到升级的节点,然后使用 Windows Admin Center、故障转移群集管理器或 Add-ClusterNode cmdlet 将升级的节点添加回群集。
Add-ClusterNode -Name clusternode1
下面是输出示例:
Waiting for notification that node clusternode1 is a fully functional member of the cluster.
注意
当第一个升级的节点加入群集时,群集进入“混合 OS”模式,群集核心资源将移动到较新的节点。 “混合 OS”模式群集是功能齐全的群集,其中新节点与旧节点在兼容性模式下运行。 “混合 OS”模式是群集的暂时模式,应在四周内更新群集的所有节点。
(可选)通过将工作负荷移动到新添加的节点来重新平衡群集。
若要在不停机的情况下移动正在运行的虚拟机,请使用 Windows Admin Center、故障转移群集管理器或 Move-ClusterVirtualMachineRole cmdlet 中的实时迁移。
Move-ClusterVirtualMachineRole -Name VM1 -Node node1
下面是输出示例:
Name OwnerNode State ---- --------- ----- VM1 node1 Online
若要移动其他群集工作负荷,请使用故障转移群集管理器或 Move-ClusterGroup cmdlet 中的 Move 命令。
步骤 4:对群集中的每个其他节点重复步骤 2 到 4
在下一步更新群集功能级别之前,升级过程是完全可逆的。 若要放弃升级,请添加运行原始版本的 Windows Server 的节点,然后删除运行较新版本作系统的任何节点。
步骤 5:更新群集功能级别和存储池版本
更新群集功能级别和存储池版本可以使用新功能。 它还改进了一些群集操作,例如将工作负荷排空出节点,这对于混合操作系统群集来说,执行时可能会导致节点在短时间内暂时隔离。
当每个节点都安装了较新的 OS 版本并将其添加回群集或永久删除时,请完成以下步骤以更新群集功能级别和存储池版本。
重要
更新群集功能级别和存储池版本后,无法返回到早期功能级别或存储池版本,并且无法将运行早期版本的 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、故障转移群集管理器或 Get-ClusterNode cmdlet 检查所有群集节点是否均在线且在运行中。
Get-ClusterNode
下面是输出示例:
Name ID State ---- -- ----- node1 1 Up node2 2 Up node3 3 Up
导航到群集管理器>设置>群集属性,在 Windows Admin Center 中查看群集>功能级别。 或使用 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 >群集管理器>设置>存储空间和池>存储池版本更新它们,而无需停机。 或使用 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 中执行此作,请导航到 群集管理器>虚拟机,选择 VM,然后选择“ 管理>升级配置版本”。
或使用 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"):
群集 OS 滚动升级期间的群集过渡状态
群集公共属性 ClusterFunctionalLevel 指示 Windows Server 2016 及更高版本的群集节点上的群集状态。 可使用 PowerShell cmdlet 从故障转移群集中包含的群集节点查询此属性:
Get-Cluster | Select ClusterFunctionalLevel
下表显示了值和每个相应的功能级别:
值 | 功能级别 |
---|---|
8 | Windows Server 2012 R2 |
9 | Windows Server 2016 |
10 | Windows Server 2019 |
11 | Windows Server 2022 |
12 | Windows Server 2025 |
常见问题
- 故障转移群集可以在混合 OS 模式下运行多长时间?
我们鼓励客户在 4 周内完成升级。 Hyper-V 和横向扩展文件服务器群集可以在总共不到 4 小时的时间内完成升级,无需停机。 - 当节点关闭或暂停时,是否可以运行 Update-ClusterFunctionalLevel cmdlet?
错误。 所有群集节点都必须处于打开状态并且其有效成员身份才能使 Update-ClusterFunctionalLevel cmdlet 正常工作。 - 群集 OS 滚动升级是否适用于任何群集工作负荷? 它是否适用于 SQL Server?
是的,群集 OS 滚动升级适用于任何群集工作负荷。 但是,对于 Hyper-V 和横向扩展文件服务器群集,这只会造成零停机时间。 其他大多数工作负载在故障转移时都会造成一些停机时间(通常是几分钟),而在群集 OS 滚动升级过程中,至少需要故障转移一次。 - 是否可以使用 PowerShell 自动执行此过程?
是的。 - 对于具有额外故障转移容量的大型群集,是否可以同时升级多个节点?
是的。 从群集中删除一个节点以升级 OS 时,群集的故障转移节点较少,因此故障转移容量会降低。 对于具有足够工作负载和故障转移容量的大型群集,可以同时升级多个节点。 - 如果在 Update-ClusterFunctionalLevel 成功运行后发现群集中的问题,该怎么办?
如果在运行 Update-ClusterFunctionalLevel 之前使用系统状态备份群集数据库,则应能够在运行以前版本的 Windows Server 的节点上执行权威还原,并还原原始群集数据库和配置。 - 是否可以通过重新格式化系统驱动器来为每个节点使用就地升级,而不是使用 clean-OS 安装?
是的。 过去,我们建议在每个节点上执行干净的 OS 安装。 但是,如果仔细阅读并解决任何警告消息,现在可以对群集节点执行就地升级。 - 如果我在 Hyper-V 群集上为 Hyper-V VM 使用 Hyper-V 复制,那么在群集操作系统滚动升级过程期间和之后,复制会保持完整吗?
是,在群集 OS 滚动升级过程期间和升级后,Hyper-V 副本保持完好无损。 - 是否可以使用 System Center Virtual Machine Manager(VMM)自动执行群集 OS 滚动升级过程? 是,可在 System Center 中使用 VMM 自动执行群集 OS 滚动升级过程。