关于主机事件


在虚拟机 (VM) 实例或裸机实例的生命周期内,实例所运行的宿主机可能会经历多次宿主机事件。主机事件可能包括 Compute Engine 基础架构的定期维护,在极少数情况下还可能包括主机错误。您可以通过配置主机维护政策,选择虚拟机和裸机实例在主机事件期间或之后的响应方式。

默认情况下,大多数实例在主机事件期间均设置为实时迁移。您可以替换此行为,并将实例明确设置为终止并选择性地重启。某些机器类型不支持实时迁移,例如裸机实例或附加了 GPU 的虚拟机。这些实例会在主机事件期间终止。如需了解详情,请参阅维护和重启行为

主机事件类型

主机事件分为两种类型,以下各部分将对此进行更详细的介绍:

如果实例无响应,这也可能会触发实例重启或终止。

维护事件

维护事件是指 Compute Engine 必须执行需要将虚拟机从主机服务器中移出的维护或维修活动。如果您为受支持的实例类型启用了实时迁移 主机维护政策,Compute Engine 会将实例迁移到新主机,并且您的应用会受到的干扰最小。

维护事件期间的实例行为可能会因实例的租用以及机器类型而异。下表总结了计划维护事件的行为。

主机租用 大致维护
事件频率
支持实时迁移 主机选择
多租户(共享) 每 2 周 Compute Engine
单租户 每 4 到 6 周 取决于主机维护政策 取决于主机维护政策
X4 最短 90 天 Compute Engine
C3 至少 30 天 Compute Engine

Compute Engine 还会保留实例在同一主机上,从而无中断地在后台应用一些轻量级 Hypervisor 和网络升级。

主机错误

主机错误 (compute.instances.hostError) 意味着托管计算实例的物理机器或数据中心基础架构上存在硬件或软件问题,进而导致实例崩溃。如果主机错误涉及硬件完全无法运行或其他硬件问题,则可能会阻止实例实时迁移。如果您的实例设置为自动重启(这是默认设置),Compute Engine 通常会在检测到错误后的 3 分钟内重启您的实例。重启可能最多需要 5.5 分钟,具体取决于问题。

有时,计算实例可能会在发出主机错误信号之前无响应。您可以通过设置主机错误恢复超时(预览版)来缩短 Compute Engine 等待重启或终止实例的时间。如需了解详情,请参阅设置可用性政策

物理硬件故障和软件故障可能会不时发生,但这种情况很少见。为了保护您的应用和服务免受这些可能具有中断性的系统事件的影响,请查看以下资源:

Google 还提供 App Engine 等代管式服务以及 App Engine 柔性环境

主机维护政策概览

实例的主机维护政策决定了它在以下主机事件期间的行为方式:

  • 维护事件
  • 主机错误事件或实例无响应

您可以将实例配置为在主机维护期间继续运行,同时 Compute Engine 会将实例实时迁移到另一个主机上,或者您也可以选择停止实例。

您可以通过配置以下设置来更改实例的主机维护政策

  • 维护行为:发生维护事件时,实时迁移还是停止实例。
  • 重启行为:Compute Engine 在实例崩溃、遇到主机错误或无响应时重启还是终止实例。
  • 主机错误检测时间:Compute Engine 在检测到实例无响应后等待重启或终止实例的最长时间。
  • 本地 SSD 恢复时间:Compute Engine 在检测到主机错误后恢复本地 SSD 磁盘上的数据所用的最长时间。如果指定的时间已过,但未成功恢复,则本地 SSD 数据将丢失。

您可以随时更新实例的主机维护政策,以控制实例的行为方式。

维护和重启行为

发生主机事件时,计算实例可以使用实时迁移,也可以终止实例。如果实例被终止,您可以选择自行重启实例,也可以让 Compute Engine 自动重启实例。

以下机器系列不支持实时迁移,而是会在主机事件期间终止

实时迁移

默认情况下,大多数实例类型均设置为实时迁移,但以下实例类型除外:

  • 附加了 GPU 和 TPU 的实例
  • C3 裸金属实例或 X4 实例
  • Z3 实例

在实时迁移期间,Compute Engine 会自动迁移您的实例以使其不受基础架构维护事件影响,并且您的实例在迁移过程中仍会保持运行状态。您的实例可能会遭遇短暂的性能下降情况,但一般而言,大多数实例的性能应该不会有显著差异。这非常适合那些需要维持正常运行时间并且能够承受短暂性能下降的实例。

Compute Engine 迁移实例时,会报告一个系统事件,而该事件会发布到地区操作列表和系统事件日志。您可以通过查看特定可用区的 Compute Engine 操作来检查此事件。实时迁移事件的操作类型如下:

compute.instances.migrateOnHostMaintenance

终止并重启

如果您不希望实时迁移实例,或者您的实例类型不支持实时迁移,则可以改为选择允许 Google Cloud 在发生主机事件时停止实例。采用此配置时,如果发生主机事件,Compute Engine 会发送软关闭信号以关闭实例。然后,它会等待 60 秒钟让实例完全关停,并将实例状态设为 TERMINATED。如果实例未在 60 秒内完全关停,系统会强制终止该实例。

如果您的实例需要维持最高性能,并且您的整个应用可用来处理实例故障或重启,则此选项非常适用。

当 Compute Engine 因主机事件而停止实例时,会报告一个系统事件,而该事件会发布到地区操作列表和系统事件日志。您可以通过查看特定可用区的 Compute Engine 操作来检查此事件。实例终止事件的操作类型如下:

compute.instances.terminateOnHostMaintenance

自动重启

如果您的实例配置为在发生维护事件时停止,或者由于底层硬件问题导致实例崩溃,Compute Engine 可以自动重启实例。实例会在同一主机服务器上重启,或移至同一可用区中未参与维护事件的其他服务器。

默认情况下,Compute Engine 会尝试恢复挂接了本地 SSD 磁盘的实例一小时。如果达到时限,Compute Engine 会尝试在同一可用区中的其他主机服务器上重启实例。Z3 和 X4 实例的默认等待时间不同。这些实例类型会在实例终止后在同一主机服务器上重启。

如需配置自动重启,请将主机维护政策字段 automaticRestart 设置为 true。如果实例因区域服务中断或用户操作(例如在客户操作系统中调用 sudo shutdown)而离线,则此设置不适用。

Compute Engine 自动重启实例时,会报告一个系统事件,而该事件会发布到地区操作列表。您可以通过查看特定可用区的 Compute Engine 操作来检查此事件。自动重启事件的操作类型如下:

compute.instances.automaticRestart

实例终止后的磁盘持久化

由于 永久性磁盘和Hyperdisk 是网络附加存储,因此当实例重启时,Compute Engine 会将启动磁盘和任何辅助磁盘重新附加到实例。这些磁盘中的数据在实时迁移和实例重启后会继续保留。

Compute Engine 会尽可能在主机事件发生后保留本地 SSD 磁盘上的数据。但是,Compute Engine 不保证本地 SSD 数据的持久性。

  • 在以下情况下,系统会保留本地 SSD 磁盘:

    • 您将实例配置为实时迁移,且实例经历主机维护事件。
    • 发生主机错误,并且 Compute Engine 会在超时限制内将实例重新连接到本地 SSD 磁盘。
    • 挂接了本地 SSD 磁盘且仅支持终止和自动重启的计算实例会发生维护事件。实例会就地重启,保留本地 SSD 数据,而不是迁移到新主机。
  • 在以下情况下,系统不会保留本地 SSD 磁盘:

    • 您关闭客机操作系统并强制停止实例。
    • 您将实例配置为在发生主机维护事件时停止,并且该实例经历主机维护事件。
    • 发生主机错误,并且 Compute Engine 在超时之前无法将磁盘重新连接到实例。在这种情况下,系统会重启实例,而不会恢复本地 SSD 磁盘。实例重启后,Compute Engine 会将空白本地 SSD 磁盘挂接到重启的实例。您必须先格式化并装载这些磁盘,实例才能使用它们。原始本地 SSD 磁盘上的数据无法恢复。

Google Cloud 会尽力确保您的本地 SSD 数据保持完整。但是,在某些情况下(例如超时情况),无法恢复数据。如需详细了解何时保留本地 SSD 磁盘,请参阅本地 SSD 数据持久性

本地 SSD 恢复超时

发生主机错误时,Compute Engine 会尝试恢复挂接到实例的任何本地 SSD 磁盘。您可以使用主机政策 localSsdRecoveryTimeout 设置来控制 Compute Engine 尝试恢复数据所用的时间。

默认情况下,Compute Engine 使用 1 小时来恢复数据,但此设置的有效值介于 0 到 168 之间(以 1 小时为增量)。对于 Z3 实例,默认值为 6,这意味着 Z3 实例会尝试恢复本地 SSD 数据 6 小时,然后才会达到超时限制。

如果您将本地 SSD 恢复超时设置为 0,则 Compute Engine 不会尝试恢复任何挂接的本地 SSD 磁盘。系统会尽快重启实例,并且本地 SSD 数据不可恢复。如果恢复工作负载比恢复本地 SSD 数据更重要,请使用此配置。

如果恢复超时时间未设置为 0,但在本地 SSD 数据恢复之前就已达到时限,则 Compute Engine 会重启没有本地 SSD 磁盘的实例。Compute Engine 会将新的空白本地 SSD 磁盘挂接到重启的实例。您必须先格式化并装载这些磁盘,实例才能使用它们。

实例处于 REPAIRING 状态,而 Compute Engine 会尝试恢复本地 SSD 磁盘。在此期间,实例和本地 SSD 磁盘将无法使用。

如果您将本地 SSD 恢复超时设置为最大值 168,则实例最长会在 REPAIRING 状态下保持 7 天,同时 Compute Engine 会尝试恢复本地 SSD 磁盘。

停止本地 SSD 磁盘恢复

您可以在 Compute Engine 达到恢复超时限制之前中断本地 SSD 磁盘恢复过程。为此,请在 gcloud compute instances stop 命令中使用 --discard-local-ssd=True 标志。

此命令会停止恢复过程,停止计算实例,并舍弃本地 SSD 数据。然后,您可以重启实例。如需了解详情,请参阅停止具有本地 SSD 的实例

如需设置本地 SSD 恢复超时,请参阅设置实例主机维护政策

维护调度

Google Cloud 提供了可让您更严格地控制维护的功能。使用某些机器族时,您可以通过 Cloud Logging、实例的元数据服务器、gcloud CLI compute instances describe 命令或 REST instances.describe 方法指定维护偏好设置,并接收有关即将发生的维护事件的通知。收到通知后,您可以在一段时间内选择合适的时间开始预定的维护。如果您未触发预定的维护,则维护事件会在通知时段结束时发生,即通知中列出的预定时间。

您可以将这些功能与主机维护政策结合使用,以自定义符合您工作负载需求的维护时间表。

后续步骤