适用于 Azure 虚拟机规模集的自动实例修复

为 Azure 虚拟机规模集启用自动实例修复,有助于通过维护一组正常运行的实例来实现应用程序的高可用性。 如果应用程序运行状况扩展负载均衡器运行状况探测发现了不正常的实例,则自动实例修复将尝试通过触发修复操作来恢复实例,例如删除不正常的实例并创建新实例来替换它、重置不正常实例的映像或重启不正常的实例。

使用自动实例修复的要求

为虚拟机规模集启用应用程序运行状况监控

规模集应启用实例的应用程序运行状况监视。 可以使用应用程序运行状况扩展负载均衡器运行状况探测来完成运行状况监视,一次只能启用其中一个。 应用程序运行状况扩展或负载均衡器探测对虚拟机实例上配置的应用程序终结点进行 ping 操作,以确定应用程序的运行状况。 此运行状况信息由规模集业务流程协调器用于监视实例运行状况,并在需要时进行修复。

将端点配置为提供运行状况状态

启用自动实例修复策略之前,请确保您的规模集实例已配置应用程序终结点,以发出应用程序运行状况状态。 若要在应用程序运行状况扩展上配置运行状况状态,可以使用二元运行状况状态丰富运行状况状态。 若要使用负载均衡器运行状况探测配置运行状况,请参阅探测行为

对于标记为“运行不正常”或 Unknown 的实例(Unknown 状态仅在使用 Application Health extension - Rich Health States 时可用),扩展集将触发自动修复。 在启用自动修复策略之前,请确保已正确配置应用程序终结点,以避免在终结点配置过程中意外修复实例。

API 版本

计算 API 版本 2018-10-01 或更高版本支持自动修复策略。

计算 API 2021-11-01 及更高版本支持用于重置映像和重启的 repairAction 设置。

资源或订阅移动限制

启用自动修复功能时,目前不支持对规模集进行资源或订阅移动。

Service Fabric 规模集的限制

Service Fabric 规模集当前不支持此功能。

具有预配错误的 VM 的限制

自动修复目前不支持 VM 实例因预配失败而被标记为“运行不正常”的场景。 必须成功初始化 VM 才能启用运行状况监视和自动修复功能。

自动实例修复如何工作?

自动实例修复功能依赖于对规模集中单个实例的运行状况监视。 虚拟机规模集中的 VM 实例可配置为通过应用程序运行状况扩展负载均衡器运行状况探测器报告应用程序运行状况。 如果发现实例运行不正常,规模集将对运行不正常的实例执行预配置的修复操作。 可以使用 automaticRepairsPolicy 对象在虚拟机规模集模型中启用自动实例修复。

自动实例修复过程如下所示:

  1. 应用程序运行状况扩展负载均衡器运行状况探测会对规模集内每个虚拟机中的应用程序终结点执行 ping 操作,以获取每个实例的应用程序运行状况。
  2. 如果终结点响应状态为 200 (OK),则实例将标记为“正常”。 在所有其他情况下(包括无法访问终结点的情况),实例都将标记为“不正常”。
  3. 当发现某个实例处于不健康状态时,规模集会对该不健康实例执行已配置的修复操作(默认为 Replace)。
  4. 实例修复按批次执行。 在任意给定时间,规模集中要修复的实例不得超过总实例数的 5%。 如果规模集的实例数少于 20 个,则每次仅对一个运行状况不正常的实例执行修复。
  5. 上述过程将持续进行,直到规模集中的所有不健康实例都得到修复。

可用的修复操作

自动实例修复有三个可用的修复动作 - 替换、重新生成映像和重启。 默认修复操作为替换,但可以通过修改 repairAction 对象下的 automaticRepairsPolicy 设置来配置自动修复以使用重置映像或重启。

注释

使用“替换”操作的自动修复将始终基于当前的 VMSS 模型创建新的虚拟机。 如果附加了配置与 VMSS 模型不同的 VM,则不会保留这些差异。 新 VM 将与当前 VMSS 模型匹配,而不是已删除 VM 的配置。

  • “替换”会删除运行不正常的实例,并创建新实例来替换它。 可使用最新的虚拟机规模集模型创建新实例。 此修复操作是默认选项。
  • 重新映像对不正常的实例执行重新映像操作。
  • 重启会对异常实例执行重启操作。

下表比较了所有三个修复操作之间的差异:

修复操作 VM 实例 ID 已保留? 专用 IP 已保留? 是否保留托管数据磁盘? 是否保留托管操作系统磁盘? 本地(临时)磁盘是否保留?
替换(默认)
重新映像 是的 是的 是的 是的
重新启动 是的 是的 是的 是的 是的

有关在自动修复策略下更新修复操作的详细信息,请参阅在自动修复策略上配置修复操作部分。

批处理

自动实例修复操作是批量执行的。 在任意给定时间,通过自动修复策略修复的实例数量不得超过 5%。 此过程有助于避免在发现不正常实例时同时删除和重新创建大量实例。

宽限期

当一个实例因为在规模集上执行了 PUT、PATCH 或 POST 操作而进行状态更改操作时,该实例上的任何修复操作只能在宽限期结束之后才执行。 宽限期是指允许实例恢复正常状态的时间。 在状态更改完成后开始进入宽限期,这有助于避免任何过早或意外的修复操作。 宽限期适用于规模集中任何新创建的实例,包括因修复操作而创建的实例。 宽限期以分钟为单位(指定格式为 ISO 8601),可以使用 automaticRepairsPolicy.gracePeriod 属性进行设置。 宽限期的范围为 10 分钟到 90 分钟,其默认值为 10 分钟。

暂停维修

虚拟机规模集提供了在需要时临时暂停自动实例修复的功能。 在虚拟机规模集的实例视图中,orchestrationServices 属性下用于自动修复的 serviceState 显示自动修复的当前状态。 当规模集选择加入自动修复时,参数 serviceState 的值将设置为 正在运行。 当虚拟机规模集的自动修复被暂停时,参数 serviceState 将被设置为 Suspended。 如果在规模集中定义了 automaticRepairsPolicy,但未启用自动修复功能,则参数 serviceState 将设置为 未运行

如果在重复执行修复操作后,为替换扩展集中不健康实例而新建的实例仍持续处于不健康状态,则作为一项安全措施,平台会将自动修复的 serviceState 更新为 Suspended。 可以通过将自动修复的 serviceState 值设置为 Running 来重新恢复自动修复。 有关查看和更新规模集自动修复策略的服务状态的详细说明,请参阅相应章节。

你还可以设置 Azure 警报规则来监控 serviceState 的变化,并在你的规模集上的自动修复被暂停时收到通知。 有关详细信息,请参阅使用 Azure 警报规则来监视自动实例修复服务状态的更改

实例保护和自动修复

如果规模集中的实例通过应用其中一个保护策略进行保护,则不会对该实例执行自动修复。 此行为适用于这两种保护策略:防止缩容防止执行规模集操作

停止通知和自动修复

如果在规模集上启用了终止通知功能,则在执行替换操作期间,对运行状况不正常的实例的删除将遵循终止通知配置。 终止通知通过 Azure 元数据服务中的“计划事件”发送,并且在配置的延迟超时期间推迟删除实例。 但是,创建新实例来替换不正常的实例不会等待延迟超时完成。

在创建新规模集时启用自动修复策略

重要

从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及需要采取的措施,请访问针对 VMSS PowerShell/CLI 客户的重大变更 - Microsoft 社区中心

若要在创建新规模集时启用自动修复策略,请确保满足选择加入此功能的所有要求。 应为规模集实例正确配置应用程序端点,以避免在端点配置过程中触发非预期的修复。 对于新创建的规模集,任何实例修复都只能在宽限期结束后才会执行。 若要在规模集中启用自动实例修复,请在虚拟机规模集模型中使用 automaticRepairsPolicy 对象。

还可使用此快速入门模板部署虚拟机规模集。 在快速入门中,规模集已启用负载均衡器运行状况探测和自动实例修复功能,宽限期为 30 分钟。

以下步骤介绍如何在创建新规模集时启用自动修复策略。

  1. 转到 虚拟机规模集
  2. 选择 + Add 以创建新的虚拟机规模集。
  3. 转到运行状况选项卡。
  4. 找到 运行状况 部分。
  5. 启用“监视应用程序运行状况”选项。
  6. 找到“自动修复策略”部分。
  7. 启用“自动修复”选项。
  8. 宽限期(分钟) 中,指定以分钟为单位的宽限期,允许的值为 10 到 90 分钟。
  9. 创建好新的规模集后,选择 “查看并创建” 按钮。

更新现有规模集时启用自动修复策略

在现有扩展集中启用自动修复策略之前,请确保已满足启用此功能所需的所有要求。 应为规模集实例正确配置应用程序终结点,以避免在终结点配置过程中触发意外修复。 若要在规模集中启用自动实例修复,请在虚拟机规模集模型中使用 automaticRepairsPolicy 对象。

更新现有规模集的模型后,确保最新模型应用于该规模的所有实例。 请参阅如何将 VM 更新到最新的规模集模型获取相关说明。

可以通过 Azure 门户修改现有虚拟机规模集的自动修复策略。

注释

在开始执行后续步骤之前,请先在虚拟机规模集上启用应用程序运行状况扩展负载均衡器运行状况探测

  1. 转到现有的虚拟机规模集。0
  2. 在左侧菜单的“设置”下,选择“运行状况和修复”。
  3. 启用“监视应用程序运行状况”选项。

如果你正在使用应用程序运行状况扩展监控虚拟机规模集:

  1. 从应用程序运行状况监视器下拉列表中选择“应用程序运行状况扩展”。

  2. 从“协议”下拉列表中,选择应用程序用于报告运行状况的网络协议。 根据应用程序要求选择合适的协议。 协议选项为 HTTP、HTTPSTCP

  3. 在“端口号”配置框中,键入用于监视应用程序运行状况的网络端口。

  4. 对于“路径”,请提供用于报告应用程序运行状况的应用程序终结点路径(例如,"/")。

    注释

    应用程序运行状况扩展将对规模集中每个虚拟机内的路径执行 ping 操作,从而获取每个实例的应用程序运行状况。 如果正在使用 二进制运行状况状态,且终结点响应状态为 200 (OK),实例会标记为“正常”。 在所有其他情况下(包括无法访问终结点的情况),实例都将标记为“不正常”。 如需了解更多健康状态选项,请参阅 Rich Health States

如果正在使用 SLB 运行状况探测监视规模集:

  • 从应用程序运行状况监视器下拉列表中选择“负载均衡器探测”。- 对于负载均衡器运行状况探测,请选择现有的运行状况探测或创建新的运行状况探测进行监视。

要启用自动修复:

  1. 找到“自动修复策略”部分。
  2. 启用“自动修复”选项。
  3. 宽限期(分钟) 中,指定以分钟为单位的宽限期。 允许的值为 10 到 90 分钟。
  4. 完成后,选择“保存”。

在自动修复策略上配置修复操作

repairAction 下的 automaticRepairsPolicy 设置可用于指定在实例处于不健康状态时执行的所需修复操作。 如果要更新现有自动修复策略中的修复操作,必须先在规模集上禁用自动修复,然后使用更新后的修复操作重新启用自动修复。 以下示例演示了此过程。

此示例演示如何更新具有现有自动修复策略的规模集上的修复操作。 使用 API 版本 2021-11-01 或更高版本。

禁用规模集上现有的自动修复策略

PUT or PATCH on '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2021-11-01'
{
  "properties": {
    "automaticRepairsPolicy": {
            "enabled": "false"
        }
    }
}

使用所需的修复操作重新启用自动修复策略

PUT or PATCH on '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2021-11-01'
{
  "properties": {
    "automaticRepairsPolicy": {
            "enabled": "true",
            "gracePeriod": "PT40M",
            "repairAction": "Reimage"
        }
    }
}

查看并更新自动实例修复策略的服务状态

对于虚拟机规模集,请使用 API 版本 2019-12-01 或更高版本的 获取实例视图,以查看 orchestrationServices 属性下自动修复的 serviceState

GET '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView?api-version=2019-12-01'
{
  "orchestrationServices": [
    {
      "serviceName": "AutomaticRepairs",
      "serviceState": "Running"
    }
  ]
}

使用 设置协调服务状态 暂停或恢复用于自动修复的 serviceState

POST '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView?api-version=2023-07-01'

{
  "serviceName": "AutomaticRepairs",
  "action": "Suspend"
}

故障排除

启用自动修复策略失败

如果收到“BadRequest”错误,且错误消息为“在‘properties’类型的对象中找不到成员‘automaticRepairsPolicy’”,请检查虚拟机规模集所使用的 API 版本。 此功能需要 API 版本 2018-10-01 或更高版本。

即使在启用策略后实例仍未修复

实例可能正处于宽限期。 此时间是在实例发生任何状态更改后执行修复之前等待的时间,有助于避免任何过早或意外修复。 修复操作应在实例的宽限期完成后发生。

查看规模集实例的应用程序运行状况

你可以对虚拟机规模集中的实例使用获取实例视图 API 来查看应用程序运行状况。 使用 Azure PowerShell,可以将 cmdlet Get-AzVmssVM 与 -InstanceView 标志结合使用。 应用程序运行状况在属性 vmHealth 下提供。

在 Azure 门户中,你还可以查看运行状况。 转到现有规模集,从左侧菜单中选择“实例”,并查看“运行状况”列,以查看每个规模集实例的运行状况。

后续步骤

了解如何为规模集配置应用程序运行状况扩展负载均衡器运行状况探测