修复在 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:分配失败。 由于条件限制性太强,无法分配具有以下约束的虚拟机。 请删除一些约束,然后重试。 应用的约束包括:
- Availability zone
- VM 大小
错误消息 3:分配失败。 如果尝试将新 VM 添加到具有单个放置组的虚拟机规模集,或者更新/调整具有单个放置组的虚拟机规模集中的现有 VM 的大小,请注意,此类分配的范围限定为单个群集,并且群集可能容量不足。 请阅读有关提高分配成功 https://aka.ms/allocation-guidance的可能性的详细信息。
如何避免分配失败
为了避免分配失败,可以将某些配置设置应用到规模集以优化分配请求。
过度预配。 启用过度预配后,规模集实际上会启动比你要求更多的 VM 实例。 然后,在成功预配请求的 VM 实例数后,它会删除额外的 VM 实例。 这种做法可提高预配成功率并缩短部署时间。 不会为额外的 VM 实例付费,它们不会计入配额限制。 若要启用过度预配,请执行:
在Azure 门户中,搜索并选择虚拟机规模集。
选择规模集的名称。
在菜单窗格中,选择“ 配置”。
在“过度预配”标题中,将“启用过度预配”设置为“打开”。
选择“保存”。
详细了解 过度预配。
启用大型规模集。 大型虚拟机规模集定义为可缩放到 100 个以上的 VM 实例的规模集。 此功能由规模集属性 (
singlePlacementGroup=false
) 设置。 大型规模集的特殊之处不是 VM 实例的数量,而是它所包含的放置组数。 放置组类似于 Azure 可用性集,其自己的容错域和升级域。 设置为singlePlacementGroup
<a0/> 后,分配成功的可能性更大,因为在部署为多位置组时,部署可以分散到多个群集中。 详细了解如何使用大型虚拟机规模集,特别是如何将现有规模集转换为跨多个放置组。 注意
可以将规模集从支持单个放置组更改为支持多个放置组,但不能在其他方向执行转换。 一旦
singlePlacementGroup
设置为该设置false
,则无法将其更改回去。
减少请求的 VM 大小的实例数,然后重试部署操作。 对于较大的部署,可能需要使用多个放置组评估 Azure 虚拟机规模集。 可以根据需求或定义的计划自动增减 VM 实例的数目。
其他提示
在首选区域中提供首选 VM 类型之前,遇到部署问题的客户应将以下部分中的指南视为临时解决方案。
确定最适合你的案例的方案。 若要增加分配成功的可能性,请使用相应的建议解决方案重试分配请求。 或者,以后始终可以重试。 群集、区域或区域可能已释放足够的资源,以便于其他时间满足你的请求。
原因
区域或区域没有足够的核心容量来容纳所请求的 SKU。
原因 1:调整规模集的大小或向现有规模集添加 VM 实例的大小
如果请求重设规模集大小或将 VM 实例添加到现有规模集,则必须在托管现有规模集的原始群集中尝试该实例。 或者群集支持请求的 VM 大小,但当前可能没有足够的容量。
原因 1 的解决方案
请尝试以下操作之一:
尝试将规模集移到具有相同容量的同一区域中的其他群集。
停止(解除分配)规模集中的所有 VM 实例,然后根据需要调整规模集的大小。 调整大小完成后,重启 VM 实例。 停止 VM 实例:
在Azure 门户中,搜索并选择虚拟机规模集。
选择规模集的名称。
选择“停止” 。
停止所有 VM 实例以执行重设大小,然后启动规模集后,新的分配尝试可以识别具有足够容量的群集来托管整个规模集。
将规模集配置为跨多个放置组进行缩放。
请参阅 “创建大型规模集”。
原因 2:重启部分停止(已解除分配)VM
部分解除分配意味着在规模集中停止了一个或多个 VM 实例,但并非全部停止。 解除分配 VM 实例时,将释放关联的资源。 在部分解除分配的可用性集中重启 VM 实例与将 VM 实例添加到现有可用性集相同。 因此,必须在托管现有可用性集的原始群集上尝试分配请求,该请求容量可能不足。
原因 2 的解决方案
停止(解除分配)规模集中的所有 VM 实例,然后重启每个 VM 实例。 停止 VM 实例:
在Azure 门户中,搜索并选择虚拟机规模集。
选择规模集的名称。
在菜单窗格中,选择“ 实例”。
选择列出的所有虚拟机实例。
选择“停止” 。
所有 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 系列 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)或可用性集。
发生分配失败的原因
如果分配请求固定到群集,则找不到可用资源的可能性更高,因为可用资源池较小。 如果将分配请求固定到不支持所请求资源类型的群集,该怎么办? 然后,即使群集具有可用资源,请求也会失败。 下图 3 显示了固定分配失败的位置,因为唯一的候选群集没有可用资源。 图 4 显示了固定分配失败的位置,因为唯一的候选群集不支持所请求的 VM 大小,即使群集具有可用资源。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。