有关 VM OS 升级导致的角色实例重启的常见问题

本文解答了有关角色实例重启的常见问题解答 (常见问题解答) ,这些问题由升级到 Windows 操作系统 (OS) 上的 Microsoft Azure 平台即服务 (PaaS) 虚拟机 (VM) 。

如何选择退出操作系统更新?

无法选择退出主机 OS 更新。 Microsoft 必须在数据中心内维护最新的主机操作系统。 可以通过指定来宾 OS 的版本来选择退出来宾 OS 更新。 但是,如果这样做,服务将不再接收安全更新,并且可能会受到攻击。 有关详细信息,请参阅 管理来宾 OS 版本

如何实现仅在非营业时间强制更新和重启?

无法控制主机 OS 的单个实例或服务何时升级。 升级大约同时在全球所有 Azure 数据中心启动。 构造会持续升级每个数据中心。 由于确保所有云服务都遵循升级域规则的复杂性,此过程需要几天时间。 无法控制或确定特定实例何时受到影响。 若要控制来宾 OS 更新,可以指定固定的来宾 OS 版本,然后在准备就绪时更新它。

我在 VM 上安装了某些内容。 但现在,VM 已重启,并且我安装的软件已消失! 软件为何消失?

不支持通过远程桌面协议 (RDP) 以及进行更改或安装软件连接到 Azure PaaS VM。 随时可能会重新生成 VM,所做的任何更改都将丢失。 如果硬件发生故障,并且我们必须在新硬件上启动新 VM,则可能会出现这种情况。 在重新生成 Windows 分区时,来宾 OS 更新期间也会发生这种情况。 如果必须安装软件或更改 VM,请创建启动任务并从那里执行工作。 此过程可确保重新创建 VM 时,将再次运行配置。

新的来宾 OS 版本中的一个更新是否可以中断我的服务?

安装到新来宾 OS 版本的更新已公开提供并经过全面测试的修补程序。 这些修补程序还会通过Windows 更新部署到世界各地的服务器,并且对服务产生不利影响的可能性很小。 至于本地服务,应使用先测试更新的过渡环境来管理 Azure VM 上的 OS 修补程序。

如果要设置过渡环境以在生产前测试更新,请将生产服务配置为使用 .cscfg 文件中的固定版本 OS 字符串。 然后,当新的来宾 OS 可用时,可以使用最新的来宾 OS 版本将服务部署到过渡槽。 验证服务在最新的来宾 OS 上正常工作后,可以执行 VIP 交换。 或者,可以就地升级生产服务,以使用最新的 OS。

升级需要多长时间? VM 会关闭多长时间?

一个常见的误解是,应用的更新越多,该过程花费的时间就越长。 此假设基于以下信念:升级的工作方式与本地台式计算机上的Windows 更新升级类似。 在 Windows 升级中,许多更新将复制到 Windows 并通过包括后续重启进行安装。 但是,此过程不是升级在 Azure 中的工作方式。

在 Azure 中发布新的 OS 版本时,OS 团队会获取最新的映像、应用更新,然后创建一个虚拟硬盘, (包含此新基础映像的 VHD) 。 然后将此基础映像复制到 Azure 中的存储库。 当构造被指示执行 OS 升级时,它将首先进行复制传递。 在要升级的数据中心,构造将此新基础映像 VHD 复制到每个服务器上的硬盘。 此过程完成后,构造将按照通常的升级域规则开始升级过程。

要更新来宾时,构造会正常关闭 OS,然后使用新的基础映像启动新的 VM。 升级来宾 OS 的给定 VM 所需的时间与正常 Windows 关闭和重启所需的时间大致相同。

主机 OS 更新的时间不同。 升级主机时,将发生以下顺序:

  • 主机将关闭消息发送到该主机上运行的每个来宾 OS。

  • 为每个来宾 OS 提供标准 OnStop 事件和 Windows 关机时间以完成关闭。

  • 关闭每个来宾 OS 后,主机 OS 会正常关闭并完成其正常关闭过程。

  • 主机 OS 关闭后,将使用新的 OS 映像重启主机。

  • 主机启动并运行后,会启动每个来宾 OS。

此主机 OS 更新过程通常需要 15 到 20 分钟。 时间可能因该主机上有多少其他来宾以及处理这些来宾所需的时间而异。 但是,如果特定节点上发生故障,并且 Azure 构造确定该节点上的来宾必须移动到另一个节点,则始终会出现异常。

如何实现处理操作系统关闭?

更新 OS 时,Azure Fabric 会正常关闭角色实例。 这种做法意味着 ASP.NET 代码将接收 Application_End 事件,Azure 服务运行时将引发 StoppingOnStop 事件。 在关闭进程之前,代码将有五分钟的时间完成清理工作 OnStop 。 关闭 Azure 主机进程后,Windows 将经历正常正常关闭,其中包括提高 Windows 服务的标准 OnStop 和相关事件。

有关如何处理实例关闭的详细信息,请参阅 处理 Azure OnStop 事件的正确方法在 .NET 中自定义 Web 或辅助角色的生命周期RoleEntryPoint.OnStop () 方法

更多信息

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。