修复在 Azure 中创建、重启或调整虚拟机规模集大小时的 AllocationFailed 或 ZonalAllocationFailed 错误

警告

如果 Microsoft Azure 虚拟机规模集是 Azure Service Fabric 群集的一部分,请不要遵循此故障排除指南。 在这种情况下,本指南可能会导致数据丢失和不可逆的群集损坏。 有关详细信息,请参阅 是否可以在 Service Fabric 群集中使用大型虚拟机规模集?

在本文中,获取有关以下内容的信息:

  • Microsoft Azure 虚拟机规模集中的 AllocationFailed 或 ZonalAllocationFailed 错误。
  • 如何避免分配失败。
  • 分配失败的原因。
  • 如何排查出现分配失败的问题。

若要排查标准虚拟机 (VM) 的分配失败问题,请参阅 排查在 Azure 中创建、重启 VM 或调整其大小时分配失败的问题

症状

由于对 Azure 服务的需求较高,如果尝试在某些区域中创建或启动 VM 实例,则可能会发生分配失败。 每当出现以下情况时,Azure 会尝试将计算资源分配给订阅:

  • 创建虚拟机规模集。
  • 重启已停止 (已解除分配) 规模集 VM 实例。
  • 调整规模集的大小。

以下错误详细信息是分配失败消息的示例。

错误代码:AllocationFailed 或 ZonalAllocationFailed

错误消息 1:分配失败。 此区域中请求的 VM 大小没有足够的容量。 在 中详细了解如何提高分配成功 https://aka.ms/allocation-guidance的可能性。

错误消息 2:分配失败。 无法分配具有以下约束的 VM () ,因为条件过于严格。 请删除一些约束,然后重试。 应用的约束包括:

  • 可用性区域
  • VM 大小

错误消息 3:分配失败。 如果尝试将新 VM 添加到具有单个放置组的虚拟机规模集,或者更新具有单个放置组的虚拟机规模集中的现有 VM/调整其大小,请注意,此类分配的范围仅限于单个群集,并且群集可能容量不足。 请在 中详细了解如何提高分配成功 https://aka.ms/allocation-guidance的可能性。

如何避免分配失败

若要避免分配失败,可以将一些配置设置应用于规模集以优化分配请求。

  • 过度预配。 启用过度预配后,规模集实际上会启动比你要求更多的 VM 实例。 然后,成功预配请求的 VM 实例数后,它会删除额外的 VM 实例。 这种做法可以提高预配成功率并缩短部署时间。 额外的 VM 实例不计费,它们不计入配额限制。 若要启用过度预配,请执行:

    1. Azure 门户中,搜索并选择“虚拟机规模集”。

    2. 选择规模集的名称。

    3. 在菜单窗格中,选择“ 配置”。

    4. “过度预配 ”标题中, 将“启用过度预配” 设置为 “开”。

    5. 选择“保存”。

    详细了解 过度预配

  • 启用大型规模集。 大型虚拟机规模集定义为可缩放到 100 个以上的 VM 实例的规模集。 此功能由规模集属性 (singlePlacementGroup=false) 设置。 大型规模集的特殊之处不是 VM 实例的数量,而是它包含的放置组数。 放置组类似于 Azure 可用性集,其自己的容错域和升级域。 如果 singlePlacementGroup 设置为 false,则分配成功的可能性更大,因为在部署为多位置组时,部署可以分散到多个群集。 详细了解 如何使用大型虚拟机规模集,特别是如何将 现有规模集转换为跨多个放置组

    注意

    可以将规模集从支持单个放置组更改为支持多个放置组,但不能在其他方向执行转换。 一旦 singlePlacementGroup 设置为 false,便无法重新更改它。

减少所请求 VM 大小的实例数,然后重试部署操作。 对于较大的部署,可能需要评估具有多个放置组的 Azure 虚拟机规模集。 VM 实例数可以根据需求或定义的计划自动增加或减少。

其他提示

在首选区域中提供首选 VM 类型之前,遇到部署问题的客户应将以下部分中的指导视为临时解决方案。

确定最符合你的案例的方案。 若要增加分配成功的可能性,请使用相应的建议解决方案重试分配请求。 或者,稍后始终可以重试。 群集、区域或区域中可能已释放足够的资源,以在另一时间满足你的请求。

原因

区域或区域没有足够的核心容量用于请求的 SKU。

原因 1:调整规模集的大小或将 VM 实例添加到现有规模集

如果请求调整规模集的大小或将 VM 实例添加到现有规模集,则必须在托管现有规模集的原始群集上尝试该请求。 或者群集支持请求的 VM 大小,但当前可能没有足够的容量。

原因 1 的解决方案

尝试以下操作之一:

  • 尝试将规模集移动到同一区域中具有足够容量的其他群集。

    停止 (解除分配规模集中所有 VM 实例) ,然后根据需要调整规模集的大小。 调整大小完成后,重启 VM 实例。 若要停止 VM 实例,请执行以下操作:

    1. Azure 门户中,搜索并选择“虚拟机规模集”。

    2. 选择规模集的名称。

    3. 选择“ 停止”。

    停止所有 VM 实例以执行重设大小并启动规模集后,新的分配尝试可以标识具有足够容量来托管整个规模集的群集。

  • 将规模集配置为跨多个放置组进行缩放。

    请参阅 创建大型规模集

原因 2:重启部分停止 (解除分配) VM

部分解除分配意味着已停止 (解除分配) 规模集中的一个或多个 VM 实例,但不是全部 VM 实例。 解除分配 VM 实例时,会释放关联的资源。 在部分解除分配的可用性集中重启 VM 实例与将 VM 实例添加到现有可用性集相同。 因此,必须在托管现有可用性集(容量可能不足)的原始群集上尝试分配请求。

原因 2 的解决方案

停止 (解除分配规模集中所有 VM 实例) ,然后重启每个 VM 实例。 若要停止 VM 实例,请执行以下操作:

  1. Azure 门户中,搜索并选择“虚拟机规模集”。

  2. 选择规模集的名称。

  3. 在菜单窗格中,选择“ 实例”。

  4. 选择列出的所有虚拟机实例。

  5. 选择“ 停止”。

所有 VM 停止后,选择第一个 VM 实例,然后选择“ 启动”。 Azure 进行新的分配尝试,并选择具有足够容量的新群集。

原因 3:已完全停止的重启 VM 实例

完全解除分配意味着已停止 (解除分配) 可用性集中的所有 VM 实例。 重启这些 VM 实例的分配请求将面向支持区域或区域中所需大小的所有群集。

原因 3 的解决方案

使用本文中的建议更改分配请求。 然后重试请求以提高分配成功的机会。

如果使用较旧的 VM 系列或大小 (,例如 Dv1、DSv1、Av1、D15v2 或 DS15v2) ,请考虑迁移到较新版本。 有关特定 VM 大小,请参阅这些建议。 是否禁止使用不同的 VM 大小? 然后尝试部署到同一地理位置中的不同区域。 有关每个区域中可用 VM 大小的详细信息,请参阅 https://aka.ms/azureregions

如果使用可用性区域,请尝试区域中可能具有请求的 VM 大小的可用容量的另一个区域。

如果分配请求很大, (超过 500 个核心) ,请参阅以下部分,将请求分解为较小的部署。

尝试 重新部署 VM 实例,该实例将 VM 实例分配给区域中的新群集。

较旧 VM 大小的分配失败

某些较旧的系列 VM 大小不会在我们的最新一代基础结构上运行。 客户偶尔可能会遇到这些旧版 SKU 的分配失败。 我们鼓励使用旧系列虚拟机的客户考虑迁移到等效的新 VM。 较新的 VM 针对最新硬件进行优化,可让你利用更好的定价和性能。

请参阅以下建议:

旧 VM 系列或大小 建议的较新的 VM 系列或大小 博客链接
Av1 系列 Av2 系列 新的 A_v2-Series VM 大小
Dv1 或 DSv1 系列 (D1 到 D5) Dv3 或 DSv3 系列 介绍新的 Dv3 和 Ev3 VM 大小
Dv1 或 DSv1 系列 (D11 到 D14) Ev3 或 ESv3 系列
D15v2 或 DS15v2

如果使用资源管理器部署模型来利用更大的 VM 大小,请考虑迁移到 D16v3/DS16v3 或 D32v3/DS32v3。 这些大小设计为在最新一代硬件上运行。

是否使用资源管理器部署模型来确保 VM 实例与专用于单个客户的硬件隔离? 然后,请考虑迁移到新的独立 VM 大小(E64i_v3或E64is_v3),这些大小设计为在最新一代硬件上运行。

新的独立 VM 大小现已可用

背景信息

分配的工作原理

Azure 平台尝试将数据中心服务器分区为群集。 通常,它会尝试在多个群集中发出分配请求。 但来自分配请求的某些约束可能会强制 Azure 平台仅在一个群集中尝试请求, (“固定到群集”) 。 下图 1 显示了在多个群集中尝试的正常分配, (群集 1 到群集 n) 。 在图 2 中,分配固定到群集 2,因为该群集托管现有的云服务 (CS_1) 或可用性集。

图 1:尝试在多个群集中分配 Azure 平台。图 2:固定到一个群集的 Azure 平台分配。

分配失败的原因

如果将分配请求固定到群集,则找不到可用资源的可能性更大,因为可用资源池较小。 如果将分配请求固定到不支持所请求资源类型的群集,该怎么办? 这样,即使群集有可用资源,请求也会失败。 下图 3 显示了固定分配失败的位置,因为唯一的候选群集没有可用资源。 图 4 显示了固定分配失败的位置,因为唯一的候选群集不支持请求的 VM 大小,即使群集具有可用资源也是如此。

分配失败的示意图是固定群集。图 3 显示没有可用的免费资源。图 4 显示不支持大小。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。