你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

使用自动实例修复的要求

启用规模集的应用程序运行状况监视

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

配置终结点以提供运行状况

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

对于标记为“不正常”或“未知”状态的实例(“未知”状态仅适用于应用程序运行状况扩展 - 丰富运行状况状态),规模集会触发自动修复。 请确保在启用自动修复策略之前正确配置应用程序终结点,以避免在配置终结点时执行意外的实例修复。

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. 当发现实例运行不正常时,规模集会向运行不正常的实例应用配置的修复操作(默认为“替换”)。
  4. 实例修复批量执行。 在任意给定时间,规模集中要修复的实例不得超过总实例数的 5%。 如果规模集的实例数少于 20 个,则每次对一个不正常的实例进行修复。
  5. 上述过程将继续进行,直到修复规模集中所有不正常的实例。

可用的修复操作

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

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

  • “重置映像”会向运行不正常的实例应用重置映像操作。

  • “重启”会向运行不正常的实例应用重启操作。

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

修复操作 VM 实例 ID 已保留? 专用 IP 已保留? 托管数据磁盘已保留? 托管 OS 磁盘已保留? 本地(临时)磁盘已保留?
替换(默认) No No No
重置映像 No
重启

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

批处理

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

宽限期

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

暂停修复

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

如果用于替换规模集中不正常实例的新创建的实例仍然不正常,即使在重复执行修复操作后仍如此,则平台会将自动修复的 serviceState 更新为“暂停”。 可以通过将自动修复的 serviceState 的值设置为“运行”再次恢复自动修复。 查看和更新规模集自动修复策略的服务状态一节中提供了详细说明。

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

实例保护和自动修复

如果规模集中的实例通过应用其中一个保护策略进行保护,则不会对该实例执行自动修复。 此行为适用于以下保护策略:“防止进行横向缩减”和“防止进行规模集操作”操作。

终止通知和自动修复

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

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

重要

从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要详细了解此更改以及应执行的操作,请转到针对 VMSS PowerShell/CLI 客户的中断性变更 - Microsoft 社区中心

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

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

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

  1. 转到“虚拟机规模集”。
  2. 选择“+ 添加”,创建新的规模集。
  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),实例会标记为“正常”。 在所有其他情况下(包括无法访问终结点的情况),实例都将标记为“不正常”。 有关更多运行状况状态选项,请浏览 丰富运行状况状态

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

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

要启用自动修复:

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

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

automaticRepairsPolicy 下面的 repairAction 设置让你可以指定在响应运行不正常的实例时执行的所需修复操作。 如果要更新现有自动修复策略上的修复操作,必须先在规模集上禁用自动修复,然后使用更新的修复操作重新启用它。 以下示例演示了此过程。

此示例演示如何更新具有现有自动修复策略的规模集上的修复操作。 使用 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 门户中,还可以查看运行状况。 转到现有规模集,从左侧菜单中选择“实例”,并查看“运行状况”列,以查看每个规模集实例的运行状况。

后续步骤

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