
1. 概述:弹性伸缩让应用在流量高峰自动扩容、低峰自动回缩,避免资源浪费。
(1)适用场景:电商促销、新闻事件、API高并发等。
(2)目标:保证可用性与响应时间,同时把云上成本控制在预算内。
2. 准备:在开始前,先完成以下准备工作:
(1)选择台湾可用区或提供台湾节点的云厂商并开通账号;
(2)准备基础镜像(包含应用依赖)、VPC 子网、安全组(开放健康检查端口与应用端口);
(3)准备负载均衡器(L4或L7)、监控与告警系统(云监控/Prometheus);
(4)确认镜像自动化部署脚本(cloud-init 或 userdata)以便实例启动即接入后端。
3. 启动模板与伸缩组操作步骤:
(1)在控制台/CLI 新建“启动模板”或“实例模板”:选择镜像、实例规格、磁盘、网络、安全组,填写用户数据(启动脚本用于自动注册到负载均衡);
(2)创建负载均衡并配置后端服务器组:设置健康检查路径(例如 /healthz),端口与超时;
(3)新建伸缩组(Auto Scaling Group):关联启动模板、指定子网、与负载均衡的后端组关联;设置最小、期望、最大实例数;
(4)配置伸缩策略:选择基于CPU、内存或自定义指标的策略,设置阈值、冷却时间和扩缩容步长(step scaling)以避免抖动。
4. 监控配置与自定义指标:
(1)默认指标:CPU、网络、带宽、磁盘IO;建议使用5分钟粒度或更细;
(2)内存与QPS为常用指标,若云监控不提供内存需部署 node_exporter 或 agent 并推送到监控系统;
(3)自定义业务指标:在应用中定期上报请求延迟、队列长度到PushGateway或云监控API;
(4)告警配置:对关键指标设置上/下阈值与持续时间(如CPU超过70%持续5分钟触发扩容),同时设置通知(邮件/短信/Webhook)。
5. 扩容策略与实例类型选择:
(1)步进扩容:例如CPU>70%扩容1台,>85%再扩3台;缩容时优先缩短新建实例并设置保护期以避免频繁波动;
(2)混合实例策略:把按需实例与竞价/Spot(或预留实例)结合,设置伸缩组的实例池与优先级以在成本和可靠性间平衡;
(3)使用连接耗尽保护:配置伸缩生命周期钩子(lifecycle hook)在实例被回收前触发脚本以从负载均衡移除、等待连接关闭再销毁;
(4)定时扩缩容:结合业务流量峰值(例如每日/每周高峰)做 Scheduled Scaling,降低不必要的按需扩容。
6. 测试流程与排查:
(1)负载模拟:在测试环境通过 ab/siege/hey 或 locust 发起并发请求,例如 ab -n10000 -c200 http://LB_IP/ 来触发扩容;
(2)观察:确认监控指标上升、伸缩组按策略增加实例、实例被加入后端且健康检查通过;
(3)缩容验证:停止压力后确认冷却时间后实例逐步回收且无未关闭的会话;
(4)故障排查:若不触发扩容,检查启动模板 user-data 是否成功执行、健康检查端点返回是否正确、监控agent是否上报指标。
7. 成本控制策略(落地操作):
(1)右-sizing:定期用监控数据判断实例利用率,调整实例规格或将多个小实例合并/拆分;
(2)使用预留/包年、竞价实例:对基线负载使用预留实例,把短期突发放在Spot;
(3)设置预算与告警:在云账单控制台设置月度预算并在接近阈值时触发告警;
(4)标签与清理规则:为伸缩组、卷、快照打标签,定期扫描未使用资源并自动清理或归档。
问:如何在台湾云主机上保证扩容后应用无缝接入负载均衡? 答:确保启动模板的 user-data 含有自动注册脚本(例如向负载均衡或服务发现注册),配置健康检查端点并在启动脚本中等待依赖服务就绪后再返回200,使用生命周期钩子在实例销毁前从LB移除并等待连接关闭。
问:如何在不影响可用性的情况下节省成本? 答:优先使用定时缩放(低峰时降到最低实例数)、基线使用预留实例/包年,非关键工作负载用Spot实例,定期Right‑size实例并清理闲置资源,同时用监控告警避免意外增量。
问:如何验证弹性伸缩策略已经生效并稳定运行? 答:在测试环境做流量回放模拟峰值,观察伸缩组扩容/缩容是否按策略发生,检查上线实例健康、应用日志与监控无异常,运行多次并记录扩缩容延迟与成功率,最终在生产小流量时再逐步放大。