群集操作系统滚动升级

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

群集 OS 滚动升级使管理员无需停止即可升级群集节点 Hyper-V 或Scale-Out文件服务器工作负荷的操作系统。 使用此功能可以避免服务级别协议 (SLA) 的停机时间损失。

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

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

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

  • 无需停止或重启群集。

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

  • 升级过程是可逆的,直到最后一步,当所有群集节点都运行较新版本的 Windows 服务器和 Update-ClusterFunctionalLevel PowerShell cmdlet 运行时。

  • 群集可以在混合 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 滚动升级过程的各个阶段、安装步骤、功能限制和常见问题 (常见问题解答) ,适用于Windows服务器中的以下群集 OS 滚动升级方案:

  • Hyper-V 群集
  • Scale-Out文件服务器群集

不支持以下方案:

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

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

要求

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

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

群集 OS 滚动升级期间的群集转换状态

本部分介绍使用群集 OS 滚动升级升级到下一版 Windows 服务器的 Windows 服务器群集的各种转换状态。

为了使群集工作负荷在群集 OS 滚动升级过程中保持运行,请将群集工作负荷从运行较旧版本的 Windows 服务器的节点移动到运行较新版本的 Windows 服务器的节点,方法是使用兼容模式。 此兼容性模式使运行较新版本的 Windows 服务器的节点看起来就像运行相同旧版本的 Windows 服务器一样。 例如,将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 服务器的节点添加到群集时,Windows服务器群集进入混合 OS 模式。 此时,进程是完全可逆的 - 可以从群集中删除较新的Windows服务器节点,运行现有版本的 Windows 服务器的节点可以在此模式下添加到群集。 在群集上运行 PowerShell cmdlet 后 Update-ClusterFunctionalLevel ,该过程不可逆。 为了使此 cmdlet 成功,所有节点都必须运行较新版本的 Windows 服务器,并且所有节点都必须处于联机状态。

执行滚动 OS 升级时,四节点群集的转换状态

本部分说明了群集的四个不同的阶段,其中共享存储的节点从 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服务器 Hyper-V 主机是否都支持Second-Level地址表 (SLAT) 。 只有支持 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) ,请验证 CAU 当前是否正在使用 群集感知更新 UI,或者 Get-CauRun cmdlet (请参阅图 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. 使用“自定义 Windows:安装”仅 (高级) 安装 (请参阅setup.exe中的图 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”模式群集是一个功能齐全的群集,新节点在与旧节点的兼容模式下运行。 “Mixed-OS”模式是群集的临时模式。 它不应是永久性的,客户应在四周内更新其群集的所有节点。

    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 功能级别,并且无法将 R2 节点添加到群集Windows Server 2012。
    • Update-ClusterFunctionalLevel运行 cmdlet 之前,进程是完全可逆的,Windows Server 2012 R2 节点可以添加到此群集,并可以删除Windows Server 2016节点。
    • Update-ClusterFunctionalLevel运行 cmdlet 后,新功能将可用。
    1. 使用故障转移群集管理器 UI 或 Get-ClusterGroup cmdlet,检查群集上是否按预期运行所有群集角色。 在以下示例中,未使用可用存储,而是使用 CSV,因此,可用存储显示脱机状态 (请参阅图 18) 。

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

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

    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 主机节点上,可以通过计划一个简短的维护时段来升级 Hyper-V VM 配置版本,让用户、备份、关闭虚拟机并运行 Update-VMVersion cmdlet (请参阅图 22) 。 这将更新虚拟机版本,并启用新的 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 服务器,例如 Windows Server 2008、Windows Server 2008 R2 或 Windows Server 2012。
  • 每个Windows Server 2016节点都应重新格式化/新安装。 不建议就地安装或升级安装类型。
  • 运行较新版本的 Windows 服务器的节点必须用于将新节点添加到群集。
  • 管理混合 OS 模式群集时,始终从运行Windows Server 2016的上级节点执行管理任务。 下层Windows服务器节点不能对较新版本的 Windows Server 使用 UI 或管理工具。
  • 我们鼓励客户快速完成群集升级过程,因为某些群集功能未针对混合 OS 模式进行优化。
  • 避免在较新的Windows服务器节点上创建或调整存储大小,因为群集在混合 OS 模式下运行时,因为从较新的Windows服务器节点故障转移到下层Windows服务器节点时可能不兼容。

常见问题

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

是否将此功能移植回 Windows Server 2012、Windows Server 2008 R2 或 Windows Server 2008? 我们没有任何计划将此功能移植回以前的版本。 群集 OS 滚动升级是我们升级Windows服务器群集的愿景。

运行较旧Windows服务器版本的节点是否需要在启动群集 OS 滚动升级过程之前安装所有软件更新? 是的,在启动群集 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 滚动升级过程。