华为云 ECS 弹性伸缩实战:让集群跟着流量"呼吸"
白天被流量打满,夜里机器空转。业务想要"随叫随到",账单想要"用完即走"——弹性伸缩就是这两者的平衡器。
一、固定规格,注定浪费
业务有明显的波峰波谷:白天访问高,凌晨几乎没人。如果按峰值固定配置机器,低谷期大量 CPU 空转,钱照付;如果按均值配置,高峰期又扛不住。手工扩缩容不仅慢,还容易出错。ECS 弹性伸缩(Auto Scaling)正是为解这个问题而生:按规则自动增减实例,让集群跟着流量"呼吸"。
二、伸缩组:三个数字定基调
弹性伸缩的核心是伸缩组(Scaling Group),最关键的是三个参数:
- 最小实例数:保底容量,保证任何时刻都够用;
- 最大实例数:成本上限,防止异常流量把账单打爆;
- 期望实例数:当前目标数量,动态策略会围绕它调整。
把这三个数定清楚,伸缩就有了"安全边界",不会失控。
三、两种伸缩策略
- 动态伸缩:按监控指标自动触发,比如 CPU 平均使用率 > 70% 扩容、< 30% 缩容,适合波动不可预测的业务;
- 定时伸缩:按固定时间表执行,比如每天 9:00 扩容、22:00 缩容,适合有明确业务规律的场景。
两者可以叠加:定时策略应对可预期的波峰,动态策略兜住突发流量。可预期的用定时,不可预期的用动态,这是最省心的组合。
四、冷却时间:最容易被忽视的参数
很多人第一次配伸缩就踩坑:CPU 一高,扩容;新实例还在启动、负载还没降,又触发一次扩容,瞬间多出一堆机器。这就是没有设好冷却时间。
冷却时间让伸缩动作执行后等待一段时间,再接受新的伸缩触发,给新实例留出"热身"时间。动态伸缩尤其要配,否则很容易"震荡扩缩"。
五、扩容后自动初始化
新实例拉起来只是"裸机",还得装软件、拉代码、注册到负载均衡。用 cloud-init 脚本可以自动化:
#!/bin/bash
yum install -y nginx
systemctl enable nginx
systemctl start nginx
# 从对象存储拉取最新的起始页
obsutil cp obs://my-bucket/www/index.html /usr/share/nginx/html/index.html
脚本执行成功后,实例再挂到伸缩组的负载均衡后端,才算真正可用。伸缩组支持生命周期挂钩,可以在实例"上线前"或"下线前"执行自定义动作,处理初始化与优雅下线。
六、实战避坑清单
- 冷却时间必须配:没有冷却,扩容会连锁触发,实例数量暴涨。
- 最小实例数别太低:缩到 0 会导致冷启动抖动,核心服务要留保底容量。
- 监控指标要选对:CPU 对 IO 密集型业务不敏感,可结合内存、连接数、队列长度综合判断。
- 扩容不等于可用:要确保负载均衡健康检查通过后,实例才接管流量。
- 缩容要优雅:配合生命周期挂钩,先摘流量、等在途请求处理完再释放实例。
- 配告警与成本看板:定期复盘实际使用率,避免集群"永远停在最大实例数"。
七、小结
弹性伸缩的本质,是让资源规模匹配真实需求。伸缩组定好边界,策略分清动态与定时,再用冷却时间和生命周期挂钩兜住细节,集群才能真正"呼吸"起来。真正的省钱不是把机器配小,而是让机器在该忙时忙、该歇时歇。
- 点赞
- 收藏
- 关注作者
评论(0)