华为云弹性伸缩 AS 不扩容/不缩容/反复重建?分层排查指南

举报
yd_294423728 发表于 2026/11/12 10:09:54 2026/11/12
【摘要】 AS 不扩容、缩不下去或实例反复重建,先看活动历史定层:查伸缩组是否启用或异常、期望/最小/最大实例数;策略没触发看告警规则、组内均值指标、连续出现次数、VMTools/Agent 数据与冷却时间;扩容失败按配额、欠费、子网 IP、规格售罄、伸缩配置资源排查;反复重建查按 ELB 类型放通健康检查源网段、宽限期与生命周期挂钩默认回调。附速查表。

弹性伸缩 AS 最常见的求助有三类:CPU 很高却不扩容;业务闲下来实例数降不下去;实例刚创建就被删掉、再新建一台,循环往复。很多人第一反应是删策略重建,但一次伸缩要经过「伸缩组状态 → 策略触发 → 伸缩活动执行 → 实例通过健康检查」这条链路,任何一环卡住都像是「伸缩不工作」。本文对照华为云 AS 官方文档分层排查,最后附推荐顺序、速查表和常见坑。

一、先看活动历史,再定层

动手前,我习惯先打开伸缩组详情里的「活动历史」页签,这里记录了每次伸缩活动的状态、类型和起止时间,展开还能看到失败原因。据此先把问题归到某一层:

层 关注点 一句话判断
伸缩组状态与实例数边界 启用/停用/异常、期望/最小/最大实例数 伸缩组有没有资格发起活动
策略触发 策略是否启用、告警规则、CES 指标、冷却时间 活动历史里根本没有新记录
扩容执行 配额、欠费、规格售罄、子网 IP、伸缩配置资源 有活动记录但状态是「失败」
缩容边界 最小实例数、实例保护、手动移入实例 缩容没发生或没删掉服务器
健康检查与生命周期挂钩 ELB 健康检查、宽限期、挂钩默认回调 实例反复创建又被移出

如果更习惯用 API 排查,官方「查询弹性伸缩组详情」接口可以直接看伸缩组状态字段 scaling_group_status,取值包括 INSERVICE(正常)、PAUSED(停用)、ERROR(异常)、DELETING(删除中)、FREEZED(已冻结):

GET https://{Endpoint}/autoscaling-api/v1/{project_id}/scaling_group/{scaling_group_id}

二、第 0 层:伸缩组状态与实例数边界

1. 伸缩组必须处于启用状态

官方「伸缩组的伸缩活动」页面列出了启动条件:扩容活动要求伸缩组状态为「启用」且期望实例数大于当前实例数;缩容活动要求状态为「启用」且期望实例数小于当前实例数。停用伸缩组不会中断正在进行的伸缩活动,但停用期间不满足上述启动条件。

伸缩组进入「异常」状态是另一种常见情况。官方说明,某些异常场景下伸缩活动一定会失败,伸缩组会进入异常状态,例如伸缩配置使用的密钥对已被删除、伸缩组使用的子网不存在;并且伸缩组在「异常」状态下,伸缩活动失败后无法自动重试。官方 FAQ「伸缩组异常情况下如何处理?」中,几乎每种情况的处理方法最后一步都是「之后重新启用伸缩组」。所以修完根因后,别忘了手动重新启用。

2. 期望、最小、最大实例数

三者的关系是「最小实例数 ≤ 期望实例数 ≤ 最大实例数」。伸缩策略执行时,本质是修改期望实例数,再由伸缩组让当前实例数向期望值靠拢。由此带来两个常见现象:

  • 扩容到上限就停:当前实例数已等于最大实例数时无法扩容,API 错误码表中对应 AS.0050(Max. instances reached),处理措施是修改最大实例数。
  • 缩容到下限就停:缩容不会让期望实例数低于最小实例数。很多人把最小实例数设成和日常峰值差不多,结果低峰期也缩不下来。

3. 失败后的自动重试

官方说明:伸缩活动失败后,若当前实例数仍不等于期望实例数,伸缩组会隔一段时间重试,连续失败时间隔逐渐延长(参考值最短 10 秒、最长 20 分钟)。非异常状态下修好根因后可能会自行恢复,异常状态则需重新启用。

三、第 1 层:策略为什么没有触发

活动历史里根本没有新的记录,问题大概率出在策略这一层。

1. 策略本身是否启用

官方 FAQ「伸缩策略启用失败如何处理?」列出的情况包括:告警策略使用的告警规则被删除;周期策略的生效时间已过期;定时策略的触发时间早于当前时间。告警规则是放在云监控 CES 里的,很多人在 CES 里清理告警规则时顺手删掉了它,伸缩策略就失去了触发源。另外,同一时间触发的多个定时或周期策略,官方说明只执行创建时间最晚的那个。

2. 指标看的是「伸缩组均值」,不是单台实例

官方指标说明中,伸缩组 CPU 使用率 =「组内所有云服务器 CPU 使用率之和 / 实例数」,内存、网络、磁盘同理。常见的情况是一台打满、其余很闲,平均没过阈值,策略就不会触发。此时应先查 ELB 分发和应用本身,而不是一味调低阈值。

3. 监控周期 × 连续出现次数

「连续出现次数」为 n,表示连续 n 个监控周期的采样点都满足条件才会告警并触发伸缩。监控周期 5 分钟、连续 3 次,就要持续约 15 分钟高负载,短时突刺不会触发扩容,这是设计如此。

4. 指标有没有数据

官方 FAQ 写明:未安装 VMTools 时,云监控无法监控内存使用率和带内网络流入/流出速率,对应伸缩指标就拿不到数据。如需按系统内真实内存等指标伸缩,应选带「(Agent)」字样的指标,且组内实例都要装好 Agent 插件。官方做法是先在一台 ECS 上装好 Agent,再制作私有镜像用于伸缩配置。

5. 冷却时间

官方定义:每次伸缩活动完成后开始计算冷却时间,期间拒绝告警策略触发,定时、周期策略和手动触发不受限。几个细节:

  • 伸缩组冷却时间默认 300 秒,API 取值范围 0–86400 秒。
  • 伸缩活动由伸缩策略触发时,以该策略的冷却时间为准;手动修改期望实例数等方式引起的,以伸缩组的冷却时间为准。
  • 扩容活动进行中允许缩容策略触发,扩容结束后执行缩容,反之亦然,不受冷却时间影响。

API 错误码里,AS.0026 表示冷却时间内不允许伸缩活动,AS.0034 表示伸缩组正在进行活动、策略无法触发。看到这两个,不是配置错了,而是时机不对。

四、第 2 层:活动记录有了,但扩容失败

活动状态为「失败」时展开看原因。一次扩容只要有任一实例添加失败,整体就是「失败」,已成功的实例会保留。官方 FAQ 的高频原因大致分几类:

  • 配额与账户:云服务器、云硬盘、弹性公网 IP 等配额不足;账户欠费或余额不足时伸缩组无法扩容。
  • 网络资源:伸缩组使用的 VPC 或子网不存在;子网下私有 IP 被用尽。
  • 资源售罄:所选可用区下伸缩配置里的规格已售罄或不支持该规格;磁盘类型对应的存储资源售罄。
  • 伸缩配置引用的资源:镜像、规格、密钥对被删除;规格与镜像不匹配、规格与磁盘不匹配;共享带宽不存在,或单个共享带宽绑定的公网 IP 超过上限(官方写单个共享带宽最多 20 个(默认上限,可申请调整))。
  • ELB 相关:监听器、后端云服务器组或负载均衡器不存在或不可用。

还有一点容易忽略:官方说明密钥对是用户级资源,不能跨用户使用,同账号下其他 IAM 用户操作时可能提示密钥对不存在。

售罄类问题的思路是「多给几个选择」。官方说明,伸缩组配置了多个可用区时,一次扩容会尝试在所有可用区创建,直到成功或全部失败;伸缩配置使用了多个规格时,也会依次尝试所有规格。所以我习惯给伸缩配置选两到三个规格、伸缩组配多个可用区。注意伸缩组的子网、安全组只有在无伸缩活动、实例数为 0 且非启用状态时才能修改;更换伸缩配置只影响之后新建的实例。

五、第 3 层:不缩容或缩了却没删机器

缩不下去,先排除三个原因:

  1. 最小实例数:期望实例数已经等于最小实例数,缩容到此为止。
  2. 实例保护:官方 FAQ 说明,对正常状态的实例启用实例保护后,自动缩容时这些实例不会被移除。
  3. 缩容阈值本身:缩容告警同样看组内均值,还要满足连续出现次数,并受冷却时间约束。

另一类困惑是「缩容成功了,ECS 还在」。按官方删除规则:自动创建的按需/竞价实例移除时会删除;改成包年包月的不删除;手动移入的服务器都不删除,且不遵循移除策略、优先级最低。自动缩容会先移除不属于当前配置可用区的实例,再按「较早创建的实例」等移除策略选择。

六、第 4 层:实例反复创建又被删除

这类问题的本质是:实例被判定为不健康,伸缩组把它移出,再新建一台补齐期望实例数。官方特别说明,健康检查失败导致的缩容活动不会修改期望实例数,所以伸缩组会一直补,形成循环。

1. 先确认用的是哪种健康检查

官方说明有两种:云服务器健康检查(默认,关机、删除视为异常)和弹性负载均衡健康检查(使用 ELB 时可选且默认开启,官方推荐)。检查间隔默认 5 分钟;绑定多个负载均衡器时,任一个判定异常实例就会被移出。

因此官方提醒不要在 ECS 页面停止或删除已加入伸缩组的实例。需要临时维护时,可以先把已启用的实例「转入备用」。官方说明这个功能用来让实例暂时不承载业务,同时又不被移出伸缩组,方便关机、重启、重装系统等操作。转入备用后,系统会把实例从关联的负载均衡上解绑,也不再对它做健康检查;还可以勾选向伸缩组加入等量的新实例,避免其他实例负载升高。前提是伸缩组当前没有伸缩活动。

2. ELB 健康检查失败的排查点

共享型 ELB:安全组和网络 ACL 放通 100.125.0.0/16,以及健康检查的协议和端口(AS FAQ 和现行共享型 ELB 用户指南都这么写)。独享型 ELB:不能只放通 100.125.0.0/16,应按独享型 ELB 文档放通 ELB 后端子网所属网段(默认与 ELB 所在子网一致,以控制台里该 ELB 的后端子网为准),以及健康检查的协议和端口;实例内防火墙也按对应的源网段放行。健康检查端口和业务端口不同时,两个都要放行。

在实例上可以用下面几条通用 Linux 命令自查(非华为云官方文档原话,端口和路径按实际替换):

ss -lntp | grep ':80 '                            # 服务是否在监听健康检查端口
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:80/health   # 健康检查路径能否返回正常码:共享型 HTTP 是 200/202/401,独享型是 200
systemctl is-active firewalld                     # 系统防火墙是否开启

3. 宽限期不够

应用还在初始化,ELB 健康检查就开始失败,是「刚建好就被删」的典型原因。官方的「健康状况检查宽限期」在实例进入已启用状态后开始计时,结束后才检查,默认 600 秒(API 范围 0–86400 秒),在 ELB 健康检查方式下生效。启动要拉代码、预热缓存的,需调大宽限期或优化启动脚本。

4. 生命周期挂钩的默认回调

用了生命周期挂钩时,还要看「默认回调操作」。超时时间取值 60–86400 秒。中文 API 写明:创建挂钩时如果不传 default_result,默认是 ABANDON(终止);不传超时时间,默认 3600 秒。控制台文档里的「继续」只是取值样例,不能据此认为控制台新建挂钩默认是「终止」。排查时直接看该挂钩的「默认回调操作」:如果是「终止」,而超时前没有回调「继续」,实例就会被删除并重建。另外,挂钩使用的通知主题如果被删除,官方说明伸缩组会进入异常状态。

5. 扩缩容阈值靠得太近

还有一种「反复伸缩」并非实例故障,而是扩缩阈值太近:扩一台后均值跌破缩容阈值,冷却一过又缩回。常见做法是拉开两个阈值,并给缩容更长的冷却时间和连续出现次数,数值按业务观察定。

七、推荐排查顺序

  1. 活动历史:有无新记录、成功还是失败、失败原因。
  2. 伸缩组状态与最小/期望/最大实例数;异常则修复后重新启用。
  3. 无记录:策略是否启用、告警规则、组内均值与连续次数、指标数据、冷却时间。
  4. 扩容失败:配额、欠费、子网 IP、售罄、伸缩配置资源,必要时增加规格与可用区。
  5. 缩不下去:最小实例数、实例保护、手动移入实例与计费方式。
  6. 反复重建:健康检查方式、按 ELB 类型放通健康检查源网段、检查路径、宽限期、挂钩默认回调。

八、速查表

现象 常见原因 先查哪里
活动历史无记录 伸缩组停用或异常 伸缩组状态
扩到某个数就不涨了 达到最大实例数 最大实例数 / AS.0050
单台 CPU 很高却不扩容 指标为组内均值 各实例负载分布
高负载持续几分钟也不扩容 连续出现次数未满足 监控周期与连续次数
内存策略从不触发 无 VMTools / Agent 数据 指标是否有数据
扩容后很久不再扩 冷却时间内拒绝告警策略 策略冷却时间 / AS.0026
策略突然失效 告警规则被删 CES 告警规则
扩容活动失败 配额、欠费、售罄、子网 IP 活动失败原因
伸缩组变异常 密钥对、子网、通知主题被删 伸缩配置与挂钩
缩不到想要的数量 最小实例数、实例保护 伸缩组参数
移出后 ECS 仍在 手动移入或包年包月 云服务器删除规则
实例刚建好就被删 宽限期不足、健康检查失败 宽限期、按 ELB 类型放通健康检查源网段
挂钩超时后实例被删 默认回调为「终止」 生命周期挂钩配置

九、常见坑

  • 镜像没更新:改了线上实例的配置却没重做私有镜像,新扩出来的实例还是旧环境,健康检查继续失败。
  • 只改了伸缩组安全组:官方说明伸缩配置和伸缩组同时指定安全组时,以伸缩配置中的为准,改错位置等于没改。
  • 每组策略数量:官方 FAQ 写每个伸缩组同一时刻支持 1 个伸缩配置、10 个伸缩策略,策略多了要合并。

十、官方参考

伸缩组的伸缩活动
https://support.huaweicloud.com/usermanual-as/as_04_0100.html
伸缩组异常情况下如何处理(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0014.html
伸缩组启用失败如何处理(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0025.html
伸缩策略启用失败如何处理(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0026.html
什么是冷却时间,为什么需要冷却时间(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0035.html
创建伸缩策略
https://support.huaweicloud.com/usermanual-as/as_03_0102.html
监控指标说明(使用 CES 监控 AS)
https://support.huaweicloud.com/usermanual-as/as_06_0105.html
未安装 VMTools 对弹性伸缩组监控指标有什么影响(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0015.html
如何为伸缩组中的实例安装 Agent 插件(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_1908.html
弹性伸缩健康检查
https://support.huaweicloud.com/usermanual-as/as_06_0101.html
实例无法通过负载均衡健康检查而频繁被删除再重建(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_1205.html
配置后端服务器的安全组(共享型 ELB)
https://support.huaweicloud.com/usermanual-elb/elb_ug_hd_0002.html
配置后端服务器的安全组(独享型 ELB)
https://support.huaweicloud.com/usermanual-elb/elb_ug_hd_0007.html
健康检查异常排查(独享型)(FAQ)
https://support.huaweicloud.com/elb_faq/zh-cn_topic_0018127975.html
实例备用
https://support.huaweicloud.com/usermanual-as/as_04_0108.html
如何处理伸缩组中状态是"异常"的实例(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0030.html
如何阻止伸缩组内的云服务器被自动移除(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0028.html
同账户下不同用户操作时提示密钥对不存在(FAQ)
https://support.huaweicloud.com/as_faq/as_faq_0033.html
伸缩组生命周期挂钩管理
https://support.huaweicloud.com/usermanual-as/zh-cn_topic_0042018380.html
创建生命周期挂钩(API)
https://support.huaweicloud.com/api-as/as_06_0901.html
修改弹性伸缩组(API)
https://support.huaweicloud.com/api-as/as_06_0104.html
查询弹性伸缩组详情(API)
https://support.huaweicloud.com/api-as/as_06_0103.html
错误码(API)
https://support.huaweicloud.com/api-as/as_07_0102.html
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。