报告有故障的主机

如果您发现预留的 H4D 虚拟机上存在无法通过其他方式解决的问题(例如 RDMA 设备出现持续性错误),建议您将相应主机报告为有故障。当您将宿主机报告为有故障时,Compute Engine 会将该宿主机报告为有故障,然后通过运行宿主机维护来自动修复虚拟机。对于 H4D 虚拟机,Compute Engine 会在维护开始时尝试将虚拟机迁移到其他主机,这有助于最大限度地减少工作负载的停机时间。

本文档介绍了如何报告和修复基于虚拟机的集群中的虚拟机 (VM) 实例的故障主机。对于 Google Kubernetes Engine (GKE) 集群,请参阅通过 GKE 报告故障主机

限制

报告故障主机时,需要遵守以下限制:

  • 只有当在主机上运行的虚拟机满足以下所有条件时,您才能报告主机故障:

    • 虚拟机正在运行。

    • 虚拟机使用 H4D 机器类型。

    • 虚拟机使用受预留约束的预配模型

  • Google Cloud 会尽力满足您报告主机故障的所有请求。不过,由于容量限制或速率限制,请求可能并不总是能够得到满足。

准备工作

所需的角色

如需获得报告故障主机所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 针对虚拟机或项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)
  • 使用 Cloud Logging 查看故障主机报告操作的状态:针对项目的 Logs Viewer (roles/logging.viewer) 角色

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含报告故障主机所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需报告故障主机,您必须具备以下权限:

  • 创建有故障的主机报告:针对虚拟机的 compute.instances.update 权限
  • 使用 Logging 查看操作列表:针对项目的 logging.operations.list 权限
  • 使用 Logging 查看操作的详细信息:针对项目的 logging.operations.get 权限
  • 查看 Compute Engine 中的操作列表:针对项目的 compute.zoneOperations.list 权限
  • 查看 Compute Engine 中某项操作的详细信息:针对项目的 compute.zoneOperations.describe 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

了解有故障的主机报告流程

为 H4D 虚拟机报告故障主机后,H4D 虚拟机的重启时间会因您用于创建虚拟机的预留的预留运行模式而异。如需验证预留的预留运行模式,请查看预留中的 reservationOperationalMode 字段

托管模式 (HIGHLY_AVAILABLE_CAPACITY)
支持的机器类型 H4D
故障主机报告 API 速率限制 对 API 的调用可能会受到速率限制。
有故障的主机报告流程

当您为以受管模式运行的 H4D 虚拟机报告故障主机时,会发生以下情况:

  1. 报告故障主机:在整个报告操作期间,虚拟机将保持 RUNNING 状态,该操作通常需要 10-12 分钟才能完成。如需查看操作状态,请参阅本文档中的查看报告故障主机操作
  2. 开始修复主机:在报告故障主机操作完成后,主机修复操作会在 1 分钟内开始。

    当修复主机操作开始时,虚拟机会停止运行,其状态会根据为虚拟机指定的自动重启 (automaticRestart) 设置而发生变化:

    • 如果为虚拟机启用了自动重启,则虚拟机的状态会更改为 REPAIRING。当虚拟机的主机健康状况良好时,该虚拟机会自动重启,除非您在此之前停止了该虚拟机。
    • 如果为虚拟机停用了自动重启,则虚拟机的状态会更改为 TERMINATED。在虚拟机的主机恢复正常后,您需要手动重启虚拟机。

    修复故障主机可能需要 3-14 天,有时甚至更长时间。

  3. 迁移并重启虚拟机:在主机修复操作开始(通常需要 10-12 分钟)后,Compute Engine 会尝试预留一个额外的宿主机来替换您在预留容量中报告的故障宿主机。如果 Compute Engine 找到健康的主机(成功替换故障主机或在预留容量中找到匹配的健康主机),则会将虚拟机迁移到该主机。然后,通过以下方式之一重启虚拟机:
    • 如果虚拟机处于 REPAIRING 状态,并且在修复完成之前或完成时资源可用,则 Compute Engine 会在健康状况良好的主机上自动重启虚拟机。
    • 否则,如果虚拟机处于 TERMINATED 状态,或者在修复完成之前或完成时资源不可用,则虚拟机的状态将保持为 TERMINATED 或更改为 TERMINATED。您必须在需要时手动重启虚拟机。不过,如果您在重启虚拟机时没有可用的资源,则重启可能会失败;例如,如果其他虚拟机已在使用修复后的主机,则可能会发生这种情况。

报告有故障的主机

如需报告有故障的主机,请完成以下步骤:

  1. 查看虚拟机运行的主机

    如需查看相关说明,请参阅查看 H4D 集群拓扑

  2. 可选:备份本地 SSD 数据。当虚拟机停止时,Compute Engine 会自动舍弃挂接到该虚拟机的任何本地 SSD 磁盘的数据。Compute Engine 舍弃本地 SSD 数据后,您将无法恢复这些数据。

    如需了解如何保留本地 SSD 数据,请参阅本地 SSD 数据备份

  3. 报告有故障的主机。如需报告有故障的主机,请选择以下选项之一。主机修复操作会在报告故障主机操作完成后立即(一分钟内)开始。如果您在启动故障主机报告操作后发现虚拟机无响应,建议您等待至少 15 分钟,然后重启虚拟机。

    gcloud

    如需报告有故障的主机,请使用以下 gcloud compute instances report-host-as-faulty 命令

    gcloud compute instances report-host-as-faulty VM_NAME \
        --async \
        --disruption-schedule=IMMEDIATE \
        --fault-reasons=behavior=FAULT_REASON,description=DESCRIPTION \
        --zone=ZONE
    

    替换以下内容:

    • VM_NAME:虚拟机的名称。

    • FAULT_REASON:虚拟机遇到的主机问题列表,以英文逗号分隔,例如 ISSUE_1,ISSUE_2。您可以指定以下值:

      • PERFORMANCE:您发现 CPU 或 Cloud RDMA 网络操作的性能下降、IRDMA 网络接口出现故障,或者 IRDMA 网络设备不存在。

      • SILENT_DATA_CORRUPTION:您发现虚拟机中的数据损坏,但虚拟机仍在运行。静默数据损坏可能是由 vCPU 缺陷、软件 bug 或内核问题等原因造成的。

      • BEHAVIOR_UNSPECIFIED:您不确定影响虚拟机的具体问题,或者该问题不在其他选项的涵盖范围内。

    • DESCRIPTION:影响虚拟机的问题的说明,例如 XID 信息或疑似性能问题。

    • ZONE:虚拟机所在的可用区。

    REST

    如需报告故障主机,请向 instances.reportHostAsFaulty 方法发出以下 POST 请求。

    举报有问题的宿主时,您可以一次指定多个问题原因。例如,如需指定两个故障原因,请发出如下请求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/reportHostAsFaulty
    
    {
      "disruptionSchedule": "IMMEDIATE",
      "faultReasons": [
        {
          "behavior": "FAULT_REASON_1",
          "description": "DESCRIPTION_1"
        },
        {
          "behavior": "FAULT_REASON_2",
          "description": "DESCRIPTION_2"
        }
      ]
    }
    

    替换以下内容:

    • PROJECT_ID:虚拟机所在项目的 ID。

    • ZONE:虚拟机所在的可用区。

    • VM_NAME:虚拟机的名称。

    • FAULT_REASON_1FAULT_REASON_2:虚拟机遇到的每个主机问题。您可以指定以下值:

      • PERFORMANCE:您发现 CPU 或 RDMA 网络操作的性能下降、RDMA 设备故障,或者 RDMA 设备不存在。

      • SILENT_DATA_CORRUPTION:您发现虚拟机中的数据损坏,但虚拟机仍在运行。静默数据损坏可能是由 vCPU 缺陷、软件 bug 或内核问题等原因造成的。

      • BEHAVIOR_UNSPECIFIED:您不确定虚拟机的具体问题。

    • DESCRIPTION_1DESCRIPTION_2:您指定的每个主机问题的说明,例如 XID 信息或可疑的性能问题。

查看报告有故障的主机操作

报告故障主机后,Compute Engine 会开始一系列操作,将该主机标记为故障并准备维修该主机。具体而言,在报告故障主机操作期间,会发生以下流程:

  1. 将主机标记为有故障。Compute Engine 会创建报告故障主机操作。报告故障主机操作随后会创建一系列子操作。这些子操作会将底层主机标记为有故障。

  2. 准备好主机以进行维修。所有子操作完成后,系统会开始报告故障主机操作。Compute Engine 会停止虚拟机,并开始修复故障主机操作。根据虚拟机所用预留中指定的预留运行模式,以及是否有健康的主机可用,Compute Engine 会让虚拟机保持停止状态,或者尝试自动迁移并重启虚拟机。

  3. 报告完成情况并修复主机。Compute Engine 完成报告主机故障操作,并运行主机修复操作。

如需跟踪项目中报告故障主机 (compute.instances.reportHostAsFaulty) 操作的状态,请选择以下选项之一。如需详细了解可用于跟踪修复、迁移和自动重启的其他操作,请参阅 Compute Engine 文档中的维护和重启行为以及监控和规划主机维护事件

控制台(虚拟机操作)

  1. 在 Google Cloud 控制台中,前往操作页面。

    转到运营

  2. 在显示的表格中,找到您报告的虚拟机。

  3. 在包含虚拟机的行中,您可以在状态列中查看“报告故障主机”操作的状态。操作完成后,该值为完成

  4. 可选:如需验证 Compute Engine 是否已重启虚拟机,请查看虚拟机的详细信息

控制台(虚拟机日志)

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 验证显示查询开关是否已设置为开启位置。

  3. 在查询编辑器中输入以下查询:

    resource.type="gce_instance" AND protoPayload.methodName=~"compute\.instances\.reportHostAsFaulty"
    
  4. 点击运行查询查询结果窗格会显示查询结果。

gcloud

  1. 如需查看项目中的“报告故障主机”操作的状态,请使用 gcloud compute operations list 命令,并将 --filter 标志设置为 operationType:compute.instances.reportHostAsFaulty

    gcloud compute operations list --filter="operationType:compute.instances.reportHostAsFaulty"
    
  2. 如果您想查看特定故障主机操作的详细信息,请使用 gcloud compute operations describe 命令

    gcloud compute operations describe OPERATION_NAME \
        --zone="ZONE"
    

    替换以下内容:

    • OPERATION_NAME:操作的名称。

    • ZONE:操作所在的可用区。

REST

如需查看项目中的“报告故障主机”操作的状态,请向 zoneOperations.list 方法发出 GET 请求。在请求网址中添加 filter 查询参数并设置为 items.operationType:compute.instances.reportHostAsFaulty

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations&filter=items.operationType:compute.instances.reportHostAsFaulty

替换以下内容:

  • PROJECT_ID:操作的名称。

  • ZONE:操作所在的可用区。

后续步骤