关于修复虚拟机以实现高可用性


本文档介绍代管式实例组 (MIG) 如何通过修复实例组中发生故障和健康状况不佳的虚拟机来提供应用的高可用性。

MIG 会主动维护实例组中运行的虚拟机数量,以确保您的应用正常运行且可用。如果实例组中的虚拟机发生故障,则 MIG 会通过以下方式重新创建虚拟机来修复虚拟机,以使虚拟机恢复服务:

  • 自动修复故障虚拟机:如果虚拟机发生故障或被不是 MIG 发起的操作删除,则 MIG 会自动修复故障虚拟机。在本文档中,请参阅自动修复故障虚拟机
  • 根据应用健康检查修复虚拟机:可选方法,通过修复不健康的虚拟机进一步提高可用性。如果您配置基于应用的健康检查,并且您的应用未通过健康检查,则 MIG 会将该虚拟机标记为不健康并予以修复。根据应用健康检查来修复虚拟机也称为自动修复。在本文档中,请参阅根据应用健康检查修复虚拟机

自动修复故障虚拟机

如果 MIG 中的虚拟机发生故障,则 MIG 会通过重新创建发生故障的虚拟机来自动修复该虚拟机。虚拟机可能会由于以下原因而失败:

  • 意外原因,例如硬件故障。
  • 并非由 MIG 发起的操作,例如:
    • Spot 虚拟机抢占。
    • 基础架构维护事件(当虚拟机实例未设置为实时迁移时)。
    • 使用 instances.delete 方法或 gcloud compute instances delete 命令删除实例组中的虚拟机。

如果 MIG 有意停止虚拟机(例如,自动扩缩器删除虚拟机),则 MIG 不会修复该虚拟机。

根据应用健康检查修复虚拟机

除了自动修复故障虚拟机之外,如果虚拟机上运行的应用冻结、崩溃或内存不足,也建议您修复虚拟机。为确保应用按预期响应,您可以配置基于应用的健康检查。

基于应用的健康检查会定期验证 MIG 中每个虚拟机上的应用是否按预期响应。如果虚拟机上的应用没有响应,则 MIG 会将该虚拟机标记为不健康。然后,MIG 会修复不健康的虚拟机。根据应用健康检查修复虚拟机称为自动修复。

为确保 MIG 持续运行一部分虚拟机,实例组绝不会并发修复其所有虚拟机。例如,如果不正确的健康检查触发不必要的修复,配置错误的防火墙规则阻止健康检查探测虚拟机,或者网络连接或基础架构问题将健康的虚拟机错误地识别为不健康,此行为将非常有用。但是,如果可用区级 MIG 只有一个虚拟机,或者区域级 MIG 在每个可用区只有一个虚拟机,则 MIG 会在这些虚拟机不健康时自动进行修复。

自动修复政策

每个 MIG 都具有自动修复政策,您可以使用该政策配置健康检查并设置初始延迟时间。初始延迟时间是新虚拟机初始化并运行其启动脚本所需的时间。初始延迟计时器从 MIG 将虚拟机的 currentAction 字段更改为 VERIFYING 时开始计时。在虚拟机的初始延迟时间段内,MIG 会忽略失败的健康检查,因为虚拟机可能处于启动过程中。这可以防止 MIG 过早地重新创建虚拟机。如果健康检查在初始延迟期间收到健康状况良好响应,则表示启动过程已完成且虚拟机已准备就绪。

如需详细了解如何配置自动修复政策,请参阅设置应用健康检查和自动修复

监控应用健康状况变化

如果您在 MIG 中配置了基于应用的健康检查,则可以查看 MIG 中每个虚拟机的健康状况。如需了解详情,请参阅检查状态

您还可以监控虚拟机健康状况的变化。如需了解详情,请参阅监控健康状况变化

价格

设置基于应用的健康检查时,默认情况下,Compute Engine 会在代管式实例的健康状况更改时写入日志条目。Cloud Logging 提供每月免费配额,之后会按日志记录数据量计费。为避免产生费用,您可以停用运行状况更改日志。

修复期间的行为

以下部分介绍了自动修复和根据应用健康检查进行的修复期间的行为。

修复更新

默认情况下,在修复期间,MIG 会使用用于创建虚拟机的原始实例模板重新创建虚拟机。例如,如果虚拟机原先是使用 instance-template-a 创建的,然后您更新 MIG 以在 OPPORTUNISTIC 模式下使用 instance-template-b,则 MIG 仍会使用 instance-template-a 重新创建该虚拟机。

如果您希望 MIG 在虚拟机修复期间使用最新的实例模板和每个实例配置,则可以将实例组配置为在修复期间应用配置更新

磁盘处理

在修复期间,当基于虚拟机模板重新创建虚拟机时,MIG 会以不同方式处理不同类型的磁盘。在尝试重新创建虚拟机时,某些磁盘配置可能会导致修复失败。

磁盘类型 autodelete 修复期间的行为
新的永久性磁盘 true 如实例模板中所指定的那样重新创建磁盘。重新创建磁盘及其虚拟机时,原来写入该磁盘的所有数据都将丢失。
新的永久性磁盘 false 在 MIG 重新创建虚拟机时保留并重新连接磁盘。
现有的永久性磁盘 true 旧磁盘已删除。虚拟机重新创建操作失败,因为 Compute Engine 无法将已删除的磁盘重新挂接到虚拟机。但是,对于现有的读写磁盘,MIG 最多只能有一个虚拟机,因为单个永久性磁盘无法以读写模式挂接到多个虚拟机。
现有的永久性磁盘 false 如实例模板中所指定的那样重新挂接旧磁盘。磁盘上的数据会保留。但是,对于现有的读写磁盘,MIG 最多只能有一个虚拟机,因为单个永久性磁盘无法以读写模式挂接到多个虚拟机。
新的本地 SSD 不适用 如实例模板中所指定的那样重新创建磁盘。在重新创建或删除虚拟机时,本地 SSD 上的数据将丢失。

MIG 不会重新挂接实例模板或实例配置中未指定的磁盘,例如在创建虚拟机后手动挂接到该虚拟机的磁盘。

如需保留写入磁盘的重要数据,请采取一些预防措施,例如:

如果您的虚拟机具有要保留的重要设置,Google 还建议您在实例模板中使用自定义映像。自定义映像包含您需要的任何自定义设置。在实例模板中指定自定义映像时,MIG 会使用包含所需自定义设置的自定义映像重新创建虚拟机。

关闭修复功能

您可以关闭 MIG 自动修复。关闭修复时,系统会关闭修复故障虚拟机和根据应用健康检查修复虚拟机。

在以下情况下,建议您关闭 MIG 中的修复功能:

  • 调查或调试故障虚拟机,而不会遭受自动修复导致的中断。
  • 手动修复虚拟机或实现您自己的修复逻辑。
  • 防止在批量作业期间注册新虚拟机。
  • 观察应用健康状况,而不修复不健康的虚拟机。
  • 微调健康检查配置,而不会错误地触发修复。

关闭修复功能后,如果实例组中的虚拟机发生故障或变得不健康,MIG 不会执行任何操作。故障和不健康的虚拟机会继续保留在实例组中,并且 MIG 中正在运行的虚拟机的目标数量 (targetSize) 保持不变。

如果 MIG 的更新类型设置为 proactive 并且有新的实例模板可用,则 MIG 将尝试更新故障虚拟机和不健康的虚拟机。

如果您已配置基于应用的健康检查,关闭修复不会影响健康检查的正常运行。健康检查会继续探测应用并提供虚拟机健康状况。这样,您就可以监控应用健康状况,同时防止 MIG 修复不健康的虚拟机。

如果 MIG 是负载均衡器后端服务的一部分,并且您在 MIG 中关闭了修复,则任何未修复的故障虚拟机和不健康的虚拟机都不会响应负载均衡器健康检查。如果 MIG 中这些故障或不健康的虚拟机的数量增加,负载均衡器可能会减少流向该 MIG 的流量或切换到其他后端(如果已配置)。当故障虚拟机再次可用时,负载均衡器会恢复发送到该 MIG 的流量。

如需了解详情,请参阅在 MIG 中关闭修复功能

后续步骤