疑难解答使用虚拟机规模集的自动缩放问题

问题 - 你已使用虚拟机规模集在 Azure 资源管理器中创建自动缩放基础结构(例如,通过部署与 https://github.com/Azure/azure-quickstart-templates/blob/master/application-workloads/python/vmss-bottle-autoscale/azuredeploy.parameters.json 类似的模板来这样做),并已定义了缩放规则,其效果良好,但无论你在 VM 上施加多少负载,它都不会自动缩放。

疑难解答步骤

应考虑的一些事项包括:

  • 每个 VM 有多少个 vCPU,是否加载了所有 vCPU? 上面的 Azure 快速入门模板示例具有 do_work.php 脚本,它可以加载单个 vCPU。 如果使用的是比单 vCPU VM 大小(如 Standard_A1 或 D1)更大的 VM,则需要多次运行此负载。 通过查看 Azure 中 Windows 虚拟机的大小检查 VM 中有多少个 vCPU

  • 虚拟机规模集中有多少个 VM,正在处理每个 VM 吗?

    仅当规模集中所有 VM 的平均 CPU 在自动缩放规则中定义的内部时间之内超出阈值时,才会发生横向扩展事件。

  • 是否遗漏任何缩放事件?

    查看 Azure 门户中的审核日志以查找缩放事件。 或许遗漏了一个纵向扩展事件和一个纵向缩减事件。 可以按“规模”进行筛选。

    Audit Logs

  • 缩小和扩大阈值的差值是否足够大?

    假设你设置了一个规则,指示当平均 CPU 在 5 分钟内超过 50% 时横向扩展,当平均 CPU 低于 50% 时横向缩减。 在 CPU 使用率接近此阈值时,此设置会导致“摇摆”问题,缩放操作不断地增加和减少集的大小。 由于此设置,自动缩放服务会尝试防止“摇摆”的发生,这可能表现为不缩放。 因此,请确保扩大和缩小阈值的差值要足够大,以允许在缩放之间存在一些空间。

  • 是否编写过自己的 JSON 模板?

    编写时很容易犯错,因此可使用如上述的久经验证的模板来开始编写,并进行微小的增量更改。

  • 可以手动横向缩减或扩展吗?

    请尝试使用不同的“容量”设置重新部署虚拟机规模集资源,以手动更改 VM 的数目。 此处是一个示例模板: https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.compute/vmss-scale-existing - 可能需要编辑该模板以确保它与规模集所用的计算机大小相同。 如果成功手动更改 VM 数目,则可知该问题与自动缩放无关。

  • 诊断扩展运行正常且可发出性能数据吗?

    更新:已增强 Azure 自动缩放,以使用基于主机的指标管道,这将不再需要安装诊断扩展。 如果使用新管道创建自动缩放应用程序,则后续几个段落不再适用。 此处提供了一个已转换为使用主机管道的 Azure 模板的示例: https://github.com/Azure/azure-quickstart-templates/blob/master/application-workloads/python/vmss-bottle-autoscale/azuredeploy.parameters.json

    使用基于主机的指标进行自动缩放比较好的原因如下:

    • 由于没有诊断扩展,需要安装更少的移动部件。

    • 模板更简单。 只需将 insights 自动缩放规则添加到现有规模集模板。

    • 新 VM 的报告更可靠,并且启动更快。

      你可能想要继续使用诊断扩展的唯一原因是需要内存诊断报告/缩放。 基于主机的指标不会报告内存。

      考虑到这一点,如果在使用诊断扩展进行自动缩放,则只需按照本文的剩余部分进行操作即可。

      Azure 资源管理器中的自动缩放借助于(但不再必须借助于)称为“诊断扩展”的 VM 扩展才能正常工作。 它会向模板中定义的存储帐户发出性能数据。 然后此数据由 Azure Monitor 服务聚合。

      如果 Insights 服务无法从 VM 读取数据,它会向你发送电子邮件。 例如,如果 VM 关闭你应收到电子邮件。 请务必查看创建 Azure 帐户时在电子邮件地址中指定的电子邮件。

      此外,还可以自己查看数据。 使用云资源管理器查看 Azure 存储帐户。 例如,使用 Visual Studio Cloud Explorer 登录,并选取要使用的 Azure 订阅。 然后,查看部署模板中的诊断扩展定义引用的诊断存储帐户名称。

      Cloud Explorer

      你将看到许多表,其中存储着每个 VM 的数据。 以 Linux 和 CPU 指标为例,查看最近的行。 Visual Studio Cloud Explorer 支持查询语言,因此,你可以运行查询。 例如,可以针对“Timestamp gt datetime'2016-02-02T21:20:00Z'”运行查询,以确保获得最新的事件。 时区对应 UTC。 在此处看到的数据是否符合设置的缩放规则? 在下面的示例中,虚拟机 20 的 CPU 在过去 5 分钟内开始增加到 100%。

      Storage Tables

      如果数据不存在,则意味着问题与在 VM 中运行的诊断扩展相关。 如果数据存在,则意味着问题与缩放规则或 Insights 服务相关。 检查 Azure 状态

      完成这些步骤后,如果仍然存在自动缩放问题,则可以尝试使用以下资源: