群集操作系统滚动升级

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

通过群集操作系统 (OS) 滚动升级,管理员无需中断群集节点 Hyper-V 或横向扩展文件服务器工作负载即可升级其操作系统。 使用此功能可以避免服务级别协议 (SLA) 的停机时间损失。

群集 OS 滚动升级具有以下优势:

  • 运行 Hyper-V 虚拟机和横向扩展文件服务器 (SOFS) 工作负载的故障转移群集可以从 Windows Server 版本(从 Windows Server 2012 R2 开始)升级到更高版本的 Windows Server。 例如,无需停机就可将(在群集的所有群集节点上运行的)Windows Server 2016 升级到(在群集中的所有节点上运行的)Windows Server 2019。

  • 无需任何其他硬件。 在小型群集中,可临时添加其他群集节点,以提高群集 OS 滚动升级过程中的群集可用性。

  • 不需要停止或重启群集。

  • 不需要新群集。 现有群集会升级。 此外,会使用存储在 Active Directory 中的现有群集对象。

  • 升级过程在最后一步之前都是可逆的。最后一步之后,所有群集节点都运行更新版本的 Windows Server,并且会运行 Update-ClusterFunctionalLevel PowerShell cmdle。

  • 在混合 OS 模式下运行时,群集可支持修补和维护操作。

  • 它支持通过 PowerShell 和 WMI 实现自动化。

  • 群集公共属性 ClusterFunctionalLevel 指示 Windows Server 2016 及更高版本的群集节点上的群集状态。 可使用 PowerShell cmdlet 从故障转移群集中包含的群集节点查询此属性:

    Get-Cluster | Select ClusterFunctionalLevel
    

    下表显示了值及对应的每个功能级别:

    功能级别
    8 Windows Server 2012 R2
    9 Windows Server 2016
    10 Windows Server 2019

本指南介绍群集 OS 滚动升级过程的各个阶段、安装步骤、功能限制和常见问题解答 (FAQ),适用于 Windows Server 中的下列群集 OS 滚动升级方案:

  • Hyper-V 群集
  • 横向扩展文件服务器群集

不支持以下方案:

  • 将虚拟硬盘(.vhdx 文件)用作共享存储的来宾群集的群集 OS 滚动升级。

System Center Virtual Machine Manager (SCVMM) 完全支持群集 OS 滚动升级。 如果使用 SCVMM,请参阅在 VMM 中将 Hyper-V 主机群集滚动升级为 Windows Server 2016,获取有关升级群集和自动执行本文档中所述步骤的指导。

要求

在开始群集 OS 滚动升级过程之前,请满足以下要求:

  • 从运行 Windows Server 2012 R2 或更高版本的故障转移群集开始。 可升级到下一个版本,例如从 Windows Server 2016 升级到 Windows Server 2019。
  • 使用下列方法之一验证 Hyper-V 节点是否具有支持二级寻址表 (SLAT) 的 CPU:- 查看是否与 SLAT 兼容?- WP8 SDK 提示 01 一文,它介绍了检查 CPU 是否支持 SLAT 的两种方法;- 下载 Coreinfo v3.31 工具来确定 CPU 是否支持 SLAT。

群集 OS 滚动升级期间的群集过渡状态

本部分介绍使用群集 OS 滚动升级来升级到下一版本 Windows Server 的 Windows Server 群集的各种过渡状态。

为了使群集工作负载在群集 OS 滚动升级过程中保持运行,可使用兼容性模式将群集工作负载从运行较旧版本的 Windows Server 的节点移动到运行较新版本的 Windows Server 的节点。 在此兼容性模式下,运行较新版本的 Windows Server 的节点看起来就像在运行相同的较旧版本 Windows Server 一样。 例如,将 Windows Server 2016 群集升级到 Windows Server 2019 时,Windows Server 2019 节点在 Windows Server 2016 兼容性模式下运行,这是一种临时措施。 称为“混合 OS 模式”的新概念群集模式允许同一群集中存在不同版本的节点(见图 1)。

Illustration showing the three stages of a cluster OS rolling upgrade: all nodes Windows Server 2012 R2, mixed-OS mode, and all nodes Windows Server 2016图 1:群集操作系统状态转换

将运行较新版本的 Windows Server 的节点添加到群集时,Windows Server 群集进入混合 OS 模式。 此时,该过程是完全可逆的 - 可以从群集中移除较新的 Windows Server 节点,并且可在此模式下将运行现有 Windows Server 版本的节点添加到群集。 在群集上运行 Update-ClusterFunctionalLevel PowerShell cmdlet 后,该过程不可逆。 为了使此 cmdlet 成功,所有节点都必须运行较新版本的 Windows Server,并且所有节点都必须处于联机状态。

执行滚动 OS 升级时,包含 4 个节点的群集的过渡状态

本部分说明并描述具有共享存储的群集的 4 个不同阶段,其节点从 Windows Server 2012 R2 升级到 Windows Server 2016。 对于更高版本的 Window Server,操作过程是相同的。

“阶段 1”是初始状态 - 我们从 Windows Server 2012 R2 群集开始。

Illustration showing the initial state: all nodes Windows Server 2012 R2图 2:初始状态:Windows Server 2012 R2 故障转移群集(阶段 1)

在“阶段 2”中,已暂停、清空、逐出两个节点,对其进行了重新格式化并安装了 Windows Server 2016。

Illustration showing the cluster in mixed-OS mode: out of the example 4-node cluster, two nodes are running Windows Server 2016, and two nodes are running Windows Server 2012 R2图 3:中间状态:混合 OS 模式:Windows Server 2012 R2 和 Windows Server 2016 故障转移群集(阶段 2)

在“阶段 3”中,群集中的所有节点都已升级到 Windows Server 2016,并且群集已准备好使用 Update-ClusterFunctionalLevel PowerShell cmdlet 进行升级。

注意

在此阶段,过程是完全可逆,并且可将 Windows Server 2012 R2 节点添加到此群集。

Illustration showing that the cluster has been fully upgraded to Windows Server 2016, and is ready for the Update-ClusterFunctionalLevel cmdlet to bring the cluster functional level up to Windows Server 2016图 4:中间状态:所有节点已升级到 Windows Server 2016,已准备好进行 Update-ClusterFunctionalLevel(阶段 3)

运行 Update-ClusterFunctionalLevel cmdlet 后,群集进入“阶段 4”,可在其中使用新的 Windows Server 2016 群集功能。

Illustration showing that the cluster rolling OS upgrade has been successfully completed; all nodes have been upgraded to Windows Server 2016, and the cluster is running at the Windows Server 2016 cluster functional level图 5:最终状态:Windows Server 2016 故障转移群集(阶段 4)

群集 OS 滚动升级过程

本部分介绍执行群集 OS 滚动升级的工作流。

Illustration showing the workflow for upgrading a cluster图 6:群集 OS 滚动升级过程工作流

群集 OS 滚动升级执行以下步骤来从 Windows Server 2012 R2 升级到 Windows Server 2016,不过对于更高版本的 Window Server,操作过程是相同的。

  1. 准备群集来进行操作系统升级,如下所示:

    1. 群集 OS 滚动升级要求从群集中一次移除一个节点。 检查在从群集中移除其中一个群集节点来进行操作系统升级时,群集上是否有足够的容量来维持 HA SLA。 换句话说,在群集 OS 滚动升级过程中从群集中移除一个节点时,是否需要具备用于将工作负载故障转移到另一个节点的容量? 在从群集中移除一个节点来进行群集 OS 滚动升级时,群集是否具有运行所需工作负载的容量?

    2. 对于 Hyper-V 工作负载,请检查所有 Windows Server Hyper-V 主机是否都对二级地址表 (SLAT) 提供 CPU 支持。 只有支持 SLAT 的计算机才能在 Windows Server 2016 及更高版本中使用 Hyper-V 角色。

    3. 检查是否已完成任何工作负载备份,并考虑备份群集。 在将节点添加到群集时停止备份操作。

    4. 使用 Get-ClusterNode cmdlet 检查所有群集节点是否都处于联机状态/正在运行/启动状态(见图 7)。

      Screencap showing the results of running the Get-ClusterNode cmdlet图 7:使用 Get-ClusterNode cmdlet 确定节点状态

    5. 如果正在运行群集感知更新 (CAU),请使用群集感知更新 UI 或 Get-CauRun cmdlet 验证 CAU 当前是否正在运行(见图 8)。 使用 Disable-CauClusterRole cmdlet 停止 CAU(见图 9),以防止在群集 OS 滚动升级过程中 CAU 暂停和清空任何节点。

      Screencap showing the output of the Get-CauRun cmdlet图 8:使用 Get-CauRun cmdlet 确定群集上是否正在运行群集感知更新

      Screencap showing the output of the Disable-CauClusterRole cmdlet图 9:使用 Disable-CauClusterRole cmdlet 禁用“群集感知更新”角色

  2. 对于群集中的每个节点,请完成以下各项:

    1. 使用群集管理器 UI 选择一个节点,并使用“暂停”|“清空”菜单选项来清空节点(见图 10),或者使用 Suspend-ClusterNode cmdlet(见图 11)。

      Screencap showing how to drain roles with the Cluster Manager UI图 10:使用故障转移群集管理器从节点中清空角色

      Screencap showing the output of the Suspend-ClusterNode cmdlet图 11:使用 Suspend-ClusterNode cmdlet 从节点中清空角色

    2. 使用群集管理器 UI 从群集中逐出暂停的节点,或者使用 Remove-ClusterNode cmdlet。

      Screencap showing the output of the Remove-ClusterNode cmdlet图 12:使用 Remove-ClusterNode cmdlet 从群集中移除节点

    3. 使用 setup.exe 中的“自定义: 仅安装 Windows (高级)”安装选项(见图 13),来重新格式化系统驱动器并在节点上执行 Windows Server 2016 的“干净操作系统安装”。 不要选择“升级: 安装 Windows 并保留文件、设置和应用程序”选项,因为群集 OS 滚动升级不支持就地升级。

      Screencap of the Windows Server 2016 installation wizard showing the custom install option selected图 13:Windows Server 2016 的可用安装选项

    4. 将节点添加到相应的 Active Directory 域。

    5. 将相应的用户添加到管理员组。

    6. 使用服务器管理器 UI 或 Install-WindowsFeature PowerShell cmdlet 安装所需的任何服务器角色,例如 Hyper-V。

      Install-WindowsFeature -Name Hyper-V
      
    7. 使用服务器管理器 UI 或 Install-WindowsFeature PowerShell cmdlet 安装故障转移群集功能。

      Install-WindowsFeature -Name Failover-Clustering
      
    8. 安装群集工作负载所需的任何其他功能。

    9. 使用故障转移群集管理器 UI 检查网络和存储连接设置。

    10. 如果使用 Windows 防火墙,请检查群集的防火墙设置是否正确。 例如,启用了群集感知更新 (CAU) 的群集可能需要防火墙配置。

    11. 对于 Hyper-V 工作负载,请使用 Hyper-V 管理器 UI 启动“虚拟交换机管理器”对话框(见图 14)。

      检查群集中所有 Hyper-V 主机节点使用的虚拟交换机的名称是否相同。

      Screencap showing the location of the Hyper-V Virtual Switch Manager dialog图 14:虚拟交换机管理器

    12. 在 Windows Server 2016 节点上(不使用 Windows Server 2012 R2 节点),请使用故障转移群集管理器(见图 15)连接到群集。

      Screencap showing the select cluster dialog图 15:使用故障转移群集管理器将节点添加到群集

    13. 使用故障转移群集管理器 UI 或 Add-ClusterNode cmdlet(见图 16)将节点添加到群集。

      Screencap showing the output of the Add-ClusterNode cmdlet图 16:使用 Add-ClusterNode cmdlet 将节点添加到群集

      注意

      当第一个 Windows Server 2016 节点加入群集时,群集进入“混合 OS”模式,并且群集核心资源移动到 Windows Server 2016 节点。 “混合 OS”模式群集是功能齐全的群集,其中新节点与旧节点在兼容性模式下运行。 “混合 OS”模式是群集的临时模式。 它不是永久的,客户应在 4 周内更新其群集的所有节点。

    14. 将 Windows Server 2016 节点成功添加到群集后,可根据需要将一些群集工作负载移动到新添加的节点,以便在群集中重新均衡工作负载,如下所示:

      Screencap showing the output of the Move-ClusterVirtualMachineRole cmdlet图 17:使用 Move-ClusterVirtualMachineRole cmdlet 移动群集工作负载(群集 VM 角色)

      1. 使用虚拟机的故障转移群集管理器中的“实时迁移”功能或 Move-ClusterVirtualMachineRole cmdlet(见图 17)来执行虚拟机的实时迁移。

        Move-ClusterVirtualMachineRole -Name VM1 -Node robhind-host3
        
      2. 对于其他群集工作负载,请使用故障转移群集管理器中的“移动”功能或 Move-ClusterGroup cmdlet。

  3. 如果每个节点都已升级到 Windows Server 2016 并重新添加到群集,或者已逐出所有剩余的 Windows Server 2012 R2 节点,请执行以下操作:

    重要

    • 更新群集功能级别后,无法返回到 Windows Server 2012 R2 功能级别,并且无法将 Windows Server 2012 R2 节点添加到群集。
    • 在运行 Update-ClusterFunctionalLevel cmdlet 之前,该过程是可逆的,可将 Windows Server 2012 R2 节点添加到次群集,并且可移除 Windows Server 2016 节点。
    • 某些群集操作(例如节点排空)可能导致节点被短时间隔离。 当 Update-ClusterFunctionalLevel 操作尚未运行时可能会发生此行为。
    • 运行 Update-ClusterFunctionalLevel cmdlet 后,将可使用新功能。
    1. 使用故障转移群集管理器 UI 或 Get-ClusterGroup cmdlet 检查所有群集角色是否都按预期在群集上运行。 在以下示例中,未使用可用存储,而是使用了 CSV,因此,可用存储显示脱机状态(见图 18)。

      Screencap showing the output of the Get-ClusterGroup cmdlet图 18:使用 Get-ClusterGroup cmdlet 验证所有群集组(群集角色)是否都在运行

    2. 使用 Get-ClusterNode cmdlet 检查所有群集节点是否都都处于联机状态且都在运行。

    3. 运行 Update-ClusterFunctionalLevel cmdlet - 不应返回任何错误(见图 19)。

      Screencap showing the output of the Update-ClusterFunctionalLevel cmdlet图 19:使用 PowerShell 更新群集的功能级别

    4. 运行 Update-ClusterFunctionalLevel cmdlet 后,可使用新功能。

  4. 恢复正常的群集更新和备份:

    1. 如果之前运行的是 CAU,请使用 CAU UI 重启它,或者使用 Enable-CauClusterRole cmdlet(见图 20)。

      Screencap showing the output of the Enable-CauClusterRole图 20:使用 Enable-CauClusterRole cmdlet 启用“群集感知更新”角色

    2. 恢复备份操作。

  5. 在 Hyper-V 虚拟机上启用和使用 Windows Server 2016 功能。

    1. 将群集升级到 Windows Server 2016 功能级别后,许多工作负载(如 Hyper-V VM)将具有新功能。 有关新 Hyper-V 功能的列表, 请参阅迁移和升级虚拟机

    2. 在群集中的每个 Hyper-V 主机节点上,使用 Get-VMHostSupportedVersion cmdlet 查看主机支持的 Hyper-V VM 配置版本。

      Screencap showing the output of the Get-VMHostSupportedVersion cmdlet图 21:查看主机支持的 Hyper-V VM 配置版本

    3. 在群集中的每个 Hyper-V 主机节点上,可通过与用户安排简短的维护时段、进行备份、关闭虚拟机和运行 Update-VMVersion cmdlet(见图 22)来升级 Hyper-V VM 配置版本。 这将更新虚拟机版本并启用新的 Hyper-V 功能,而无需将来的 Hyper-V 集成组件 (IC) 更新。 可以从托管 VM 的 Hyper-V 节点运行此 cmdlet,也可使用 -ComputerName 参数远程更新 VM 版本。 在此示例中,我们将 VM1 的配置版本从 5.0 升级到 7.0,以利用与此 VM 配置版本关联的许多新的 Hyper-V 功能,例如生产检查点(应用程序一致性备份)和二进制 VM 配置文件。

      Screencap showing the Update-VMVersion cmdlet in action图 22:使用 Update-VMVersion PowerShell cmdlet 升级 VM 版本

  6. 可使用 Update-StoragePool PowerShell cmdlet 升级存储池 - 这是一项联机操作。

尽管我们面向的是私有云方案,特别是 Hyper-V 和横向扩展文件服务器群集(无需停机即可升级),但群集 OS 滚动升级过程可用于任何群集角色。

限制/局限

  • 此功能仅适用于从 Windows Server 2012 R2 开始的 Windows Server 版本。 此功能无法升级更早版本的 Windows Server,例如 Windows Server 2008、Windows Server 2008 R2 或 Windows Server 2012。
  • 每个 Windows Server 2016 节点都应重新格式化/仅限新安装。 不建议使用“就地”或“升级”安装类型。
  • 必须使用运行较新版本的 Windows Server 的节点将新节点添加到群集。
  • 管理混合 OS 模式的群集时,请始终从运行 Windows Server 2016 的上层节点执行管理任务。 下层 Windows Server 节点不能针对较新版本的 Windows Server 使用 UI 或管理工具。
  • 我们鼓励客户快速完成群集升级过程,因为某些群集功能未针对混合 OS 模式进行优化。
  • 在群集以混合 OS 模式运行时,不要在较新的 Windows Server 节点上创建存储或调整其大小,因为从较新的 Windows Server 节点故障转移到下层 Windows Server 节点时可能存在不兼容的问题。

常见问题

故障转移群集可在混合 OS 模式下运行多长时间? 我们鼓励客户在 4 周内完成升级。 我们已在总共不到 4 小时的时间里,在未停机的情况下成功升级 Hyper-V 和横向扩展文件服务器群集。

是否将此功能移植回 Windows Server 2012、Windows Server 2008 R2 或 Windows Server 2008? 我们没有任何计划将此功能移植回之前的版本。 我们希望使用群集 OS 滚动升级来升级 Windows Server 群集。

在开始群集 OS 滚动升级过程之前,运行较旧版本的 Windows Server 的节点是否需要安装所有软件更新? 是,在开始群集 OS 滚动升级过程之前,请验证所有群集节点都更新了最新的软件更新。

是否可在节点处于关闭或暂停状态时运行 Update-ClusterFunctionalLevel cmdlet? 错误。 要使 Update-ClusterFunctionalLevel cmdlet 正常运行,所有群集节点都必须已打开且在有效成员身份下。

群集 OS 滚动升级是否适用于任何群集工作负载? 它是否适用于 SQL Server? 是,群集 OS 滚动升级适用于任何群集工作负载。 但是,只有 Hyper-V 和横向扩展文件服务器群集不会导致停机。 其他大多数工作负载在故障转移时都会造成一些停机时间(通常是几分钟),而在群集 OS 滚动升级过程中,至少需要故障转移一次。

是否可使用 PowerShell 自动执行此过程? 是,我们已将群集 OS 滚动升级设计为使用 PowerShell 实现自动化。

对于具有额外故障转移容量的大型群集,是否可同时升级多个节点? 是的。 从群集中移除一个节点来升级 OS 时,群集用于故障转移的节点将减少一个,因此故障转移容量会减少。 对于具有足够工作负载和故障转移容量的大型群集,可以同时升级多个节点。 你可以在群集 OS 滚动升级过程中向群集临时添加群集节点,来提供更佳的工作负载和故障转移容量。

如果成功运行 Update-ClusterFunctionalLevel 后在群集中发现问题,该怎么办? 如果在运行 Update-ClusterFunctionalLevel 之前已使用系统状态备份来备份群集数据库,那么你应该能够在运行先前版本的 Windows Server 的节点上执行授权还原,并还原原始群集数据库和配置。

是否可对每个节点使用就地升级,而不是通过重新格式化系统驱动器来使用干净 OS 安装? 我们不鼓励使用 Windows Server 的就地升级,但我们知道,它适用于某些使用默认驱动程序的情况。 请仔细阅读群集节点就地升级期间显示的所有警告消息。

如果对 Hyper-V 群集上的 Hyper-V VM 使用 Hyper-V 复制,那么在群集 OS 滚动升级过程期间和升级后,复制是否保持完好无损? 是,在群集 OS 滚动升级过程期间和升级后,Hyper-V 副本保持完好无损。

是否可使用 System Center Virtual Machine Manager (SCVMM) 自动执行群集 OS 滚动升级过程? 是,可在 System Center 中使用 VMM 自动执行群集 OS 滚动升级过程。