2026阿里云国际版Auto Scaling弹性伸缩实战教程:从配置到自动扩缩容全流程
Meta Description: 全面掌握阿里云国际版Auto Scaling弹性伸缩:创建伸缩组、配置伸缩规则、设置冷却时间、定时任务、云监控触发器,搭配SLB和RDS实现高可用自动扩缩容。
- 前言
- Auto Scaling核心概念
- 创建伸缩组:完整实操步骤
- 伸缩规则详解
- 触发条件配置
- 与SLB和RDS联动
- 实例规格与价格对比
- 延伸阅读
Meta Description: 全面掌握阿里云国际版Auto Scaling弹性伸缩:创建伸缩组、配置伸缩规则、设置冷却时间、定时任务、云监控触发器,搭配SLB和RDS实现高可用自动扩缩容。含实例规格价格对比、避坑指南与FAQ。
关键词:阿里云国际版Auto Scaling、弹性伸缩、ECS自动扩缩容、伸缩组配置、SLB联动、按量计费、高可用架构
一、前言
当你的阿里云国际版ECS服务器在高峰期扛不住流量、低谷期又白白闲置CPU时,Auto Scaling弹性伸缩就是最直接的解决方案。它能根据CPU使用率、内存占用、自定义监控指标或定时规则,自动增减ECS实例数量,让你只为实际用量付费。本文将从零开始,手把手教你配置阿里云国际版Auto Scaling,包括伸缩组创建、伸缩规则编写、云监控触发器设置、与SLB/RDS联动,以及常见的避坑经验。
📝 小提示:Auto Scaling本身免费,你只需为自动创建的ECS实例和随实例附带的公网IP、云盘等资源付费。
二、Auto Scaling核心概念
在动手配置之前,先理解四个核心概念:
| 概念 | 说明 | 类比 |
|---|---|---|
| 伸缩组(Scaling Group) | 一组ECS实例的容器,定义最小/最大实例数、VPC、子网 | 一个"弹性池" |
| 伸缩规则(Scaling Rule) | 定义扩缩行为:增加N台、减少N台、调整到N台 | "加减法"指令 |
| 伸缩活动(Scaling Activity) | 一次具体的扩缩操作记录,包含状态和原因 | 一次"执行日志" |
| 冷却时间(Cooldown) | 规则执行后的静默期,防止频繁扩缩 | "冷静期" |
伸缩组是核心:你设定最小实例数(如1台)和最大实例数(如10台),Auto Scaling确保实例数始终在这个范围内。当触发条件满足时(如CPU>70%),系统自动创建新ECS加入负载均衡;当流量回落时(如CPU<30%),系统自动释放多余实例。
三、创建伸缩组:完整实操步骤
3.1 前置准备
开始之前,确保你已准备好:
- 一个ECS镜像(建议创建自定义镜像,预装你的应用和依赖)
- 一个VPC和至少一个交换机(子网)
- 如果需要负载均衡,先创建SLB实例
- RAM角色(用于授权Auto Scaling调用ECS API)
3.2 控制台创建伸缩组
步骤一:登录阿里云国际版控制台,进入 Elastic Scaling → Scaling Groups,点击 Create Scaling Group。
步骤二:配置基础信息:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| Scaling Group Name | web-server-asg | 有意义的命名 |
| Instance Configuration Source | 使用现有启动模板 | 推荐,方便版本管理 |
| Minimum Size | 1 | 低谷期至少保留1台 |
| Maximum Size | 10 | 根据业务上限设定 |
| Default Cooldown | 300 | 300秒冷却时间 |
| VPC | your-vpc-id | 必须与SLB/RDS同VPC |
| Switches | zone-a, zone-b | 多可用区提升容灾能力 |
步骤三:配置移除策略(Removal Policy),决定缩容时优先释放哪台实例:
- OldestInstance(推荐):优先释放最早创建的实例,保持实例池新鲜
- NewestInstance:优先释放最新创建的实例
- ClosestToNextInstanceHour:优先释放最接近计费整点的实例(省钱)
步骤四:如果需要关联SLB,在 Load Balancers 配置中添加SLB实例ID和端口。新创建的ECS实例会自动注册到SLB后端。
步骤五:点击 Create 完成伸缩组创建。注意:伸缩组创建后默认处于 Inactive 状态,需要手动激活。
3.3 创建启动模板
启动模板定义了自动创建的ECS实例的规格:
// 通过aliyun CLI创建启动模板
aliyun ess CreateLaunchTemplate \
--RegionId ap-southeast-1 \
--LaunchTemplateName web-server-template \
--ImageId ubuntu_22_04_x64_20G_alibase_20230907.vhd \
--InstanceType ecs.g6.large \
--SecurityGroupId sg-xxxxxx \
--SystemDiskCategory cloud_essd \
--SystemDiskSize 40 \
--InternetChargeType PayByTraffic \
--InternetMaxBandwidthOut 10 \
--UserData $(base64 -w0 init-script.sh)
📝 小提示:UserData脚本用于实例启动后自动拉取代码、安装依赖、启动服务。建议把初始化逻辑写在脚本里,而不是烘焙到镜像中,这样更新应用时只需修改脚本。
3.4 激活伸缩组
创建完成后,在伸缩组列表中点击 Activate。激活后Auto Scaling开始监控并执行伸缩活动。
四、伸缩规则详解
伸缩规则定义了"怎么扩、怎么缩"。阿里云国际版支持三种规则类型:
4.1 固定数量变更
最简单的规则:每次增加或减少固定数量的实例。
| 规则类型 | 配置示例 | 适用场景 |
|---|---|---|
| Scale Out(扩容) | 增加 2 台 | 突发流量 |
| Scale In(缩容) | 减少 1 台 | 流量回落 |
| Adjust Total(调整总量) | 调整到 5 台 | 保持固定规模 |
4.2 百分比变更
按当前实例数的百分比调整,适合实例数波动较大的场景:
// 例如:当前有10台实例,扩容50% = 增加5台
// 创建伸缩规则
aliyun ess CreateScalingRule \
--ScalingGroupId asg-xxxxxx \
--ScalingRuleName scale-out-50pct \
--AdjustmentType QuantityChangeInPercentage \
--AdjustmentValue 50
4.3 目标追踪(Target Tracking)
指定一个目标值(如CPU平均使用率50%),Auto Scaling自动计算需要的实例数并调整。这是最智能的模式——你只需设定"想要什么状态",系统自动决定"需要多少台"。
⚠️ 注意:目标追踪规则和固定数量规则不能同时存在于同一伸缩组。选择一种模式后,该伸缩组内所有规则必须统一。
五、触发条件配置
5.1 云监控报警触发
这是最常用的触发方式:当CloudMonitor检测到指标超过阈值时,自动执行伸缩规则。
配置步骤:
- 进入伸缩组的 Alarm Tasks 标签
- 点击 Create Alarm Task
- 选择监控指标(如CPU使用率)
- 设置阈值:统计周期1分钟,连续3个周期超过70%触发
- 关联伸缩规则(如 scale-out-2)
推荐的触发指标组合:
| 指标 | 扩容阈值 | 缩容阈值 | 统计周期 | 说明 |
|---|---|---|---|---|
| CPU使用率 | >70% | <30% | 1分钟 | 最基础的触发条件 |
| 内存使用率 | >80% | <40% | 1分钟 | 适合内存密集型应用 |
| 网络流入速率 | >50Mbps | <10Mbps | 5分钟 | 适合CDN回源场景 |
| 自定义指标 | 按业务定义 | 按业务定义 | 1分钟 | 如QPS、队列长度 |
5.2 定时任务触发
对于可预测的流量高峰(如电商大促、定时批处理),使用定时任务更可靠:
// 工作日早高峰扩容:每天9:00扩容到5台
aliyun ess CreateScheduledTask \
--ScalingGroupId asg-xxxxxx \
--ScheduledAction scale-to-5 \
--Recurrence "0 9 * * 1-5" \
--ScheduledEndTime 2026-12-31T23:59:59Z \
--TaskEnabled true
// 工作日晚高峰缩容:每天22:00缩到2台
aliyun ess CreateScheduledTask \
--ScalingGroupId asg-xxxxxx \
--ScheduledAction scale-to-2 \
--Recurrence "0 22 * * 1-5" \
--ScheduledEndTime 2026-12-31T23:59:59Z \
--TaskEnabled true
📝 小提示:定时任务和云监控报警可以并存。定时任务处理可预测的流量基线,云监控处理突发流量,两者互补。
六、与SLB和RDS联动
6.1 SLB联动
在伸缩组中关联SLB后,新创建的ECS实例会自动注册到SLB后端,缩容时自动移除。确保:
- SLB和伸缩组在同一VPC
- SLB监听端口与ECS应用端口一致
- SLB健康检查配置正确(否则新实例可能不被加入后端)
6.2 RDS联动
如果应用依赖RDS数据库,缩容时需要确保连接数不会溢出:
| 策略 | 配置 | 适用场景 |
|---|---|---|
| 固定连接数上限 | RDS参数max_connections设为固定值 | 实例数波动小 |
| 按比例调整 | 伸缩时同步调整RDS参数 | 大规模伸缩 |
| 使用代理层 | 通过ProxySQL/PgBouncer管理连接 | 推荐,最灵活 |
七、实例规格与价格对比
Auto Scaling创建的ECS实例按量计费(Pay-As-You-Go),以下是常用规格的参考价格(以新加坡ap-southeast-1为例,价格可能变动,请以官方为准):
| 实例规格 | vCPU | 内存 | 按量价格(USD/h) | 包月价格(USD/月) | 适用场景 |
|---|---|---|---|---|---|
| ecs.t6-c1m1.large | 2 | 2GB | $0.024 | $14.50 | 轻量Web/测试环境 |
| ecs.g6.large | 2 | 8GB | $0.093 | $56.00 | 通用Web应用 |
| ecs.g6.xlarge | 4 | 16GB | $0.186 | $112.00 | 中型应用/缓存 |
| ecs.c7.2xlarge | 8 | 16GB | $0.244 | $147.00 | 计算密集型/CI |
| ecs.r7.large | 2 | 16GB | $0.122 | $73.00 | 内存密集型/数据库 |
💡 省钱建议:如果流量有明显的周期规律,可以组合使用"预留实例(RI)+按量实例"。基线流量用RI覆盖(节省30-60%),弹性部分用按量实例。伸缩组支持配置多种实例分配策略来实现这一点。
八、常见问题与避坑指南
8.1 伸缩活动失败
常见原因:
- 配额不足(ECS实例数达到地域配额上限)
- 余额不足(按量实例需要足够的账户余额)
- 交换机IP地址不足(子网容量耗尽)
- 启动模板中的镜像/规格在目标可用区不可用
排查方法:进入伸缩活动列表,点击活动ID查看详情,查看"Status Message"字段。
8.2 冷却时间设置不当
冷却时间过短(如60秒)会导致频繁扩缩,产生大量"振荡"——刚扩容完就缩容,刚缩完又扩容。推荐设置:
- 基础冷却时间:300秒(5分钟)
- 如果应用启动时间较长(如Java应用需要2-3分钟初始化),设置为600秒
8.3 缩容时正在处理请求
Auto Scaling终止实例前会先从SLB移除,等待连接排空(默认30秒)。但如果你的应用没有优雅停机逻辑(如正在写入数据库、正在处理异步任务),可能导致数据丢失。
解决方案:在实例的UserData脚本中加入优雅停机逻辑:
// 优雅停机脚本示例
trap 'echo "Received SIGTERM, gracefully shutting down..."; kill -TERM $APP_PID; wait $APP_PID; exit 0' SIGTERM
// 启动应用
python3 /app/main.py &
APP_PID=$!
wait $APP_PID
8.4 预热时间过长
新创建的ECS实例需要时间启动(OS启动 + 应用初始化 + 健康检查通过),这段时间内流量可能集中在旧实例上。优化方法:
- 使用自定义镜像预装依赖,减少启动时间
- 配置SLB会话保持,避免新实例冷启动时丢失缓存
- 在UserData脚本中发送"准备就绪"信号到SLB
九、最佳实践总结
9.1 推荐配置方案
| 场景 | 最小实例 | 最大实例 | 扩容规则 | 缩容规则 | 冷却时间 |
|---|---|---|---|---|---|
| 个人博客 | 1 | 3 | CPU>70% +2 | CPU<30% -1 | 300s |
| 电商网站 | 2 | 20 | CPU>65% +50% | CPU<25% -1 | 600s |
| API服务 | 2 | 10 | QPS>1000 +3 | QPS<300 -2 | 300s |
| 定时批处理 | 0 | 5 | 定时9:00到5 | 定时18:00到0 | 120s |
9.2 成本优化策略
- 混合实例类型:在启动模板中配置多种规格(如g6和c7),Auto Scaling会自动选择有库存的规格,避免因单一规格售罄导致伸缩失败
- 抢占式实例:对容错性高的工作负载(如批处理、测试环境),使用抢占式实例可节省60-90%费用。注意设置兜底策略——当抢占式实例被回收时,自动切换到按量实例
- 生命周期钩子:在实例被终止前执行自定义脚本(如上传日志、清理临时数据),避免数据丢失
⚠️ 免责声明:本文中提到的配置、价格和优惠信息可能随时间变化,请以阿里云国际版官网(alibabacloud.com)的实时信息为准。本文不构成任何投资或购买建议。注册前请确认当地法规合规性。
十、常见问题 FAQ
- Q: Auto Scaling本身收费吗?
A: 不收费。Auto Scaling服务本身免费,你只需为它自动创建的ECS实例、公网带宽、云盘等资源付费。
- Q: 伸缩组最多支持多少台实例?
A: 默认最大实例数上限为100台。如需更大规模,可以提工单申请提升配额。
- Q: 可以同时使用多种触发方式吗?
A: 可以。定时任务和云监控报警可以并存于同一伸缩组,分别处理可预测流量和突发流量。
- Q: 缩容时会中断正在运行的任务吗?
A: Auto Scaling会先从SLB移除实例,等待连接排空(默认30秒),然后执行终止。如果应用没有优雅停机逻辑,正在进行的请求可能被中断。
- Q: 可以跨可用区伸缩吗?
A: 可以。在创建伸缩组时配置多个交换机(对应不同可用区),Auto Scaling会自动在这些可用区之间分配新实例。
- Q: 抢占式实例被回收后,伸缩组会怎样?
A: 伸缩组检测到实例减少后,会自动尝试创建新实例。如果你的启动模板同时配置了抢占式和按量付费选项,系统会优先使用抢占式实例,库存不足时自动切换到按量实例。
- Q: 如何监控伸缩组的运行状态?
A: 在CloudMonitor中查看伸缩组的监控大盘,包括实例数变化、伸缩活动历史、触发条件状态等。也可以通过aliyun CLI查询:aliyun ess DescribeScalingActivities --ScalingGroupId asg-xxxxxx。
十一、延伸阅读
本文是阿里云国际版实战教程系列的一部分,更多相关内容请参考:
- 阿里云国际版ECS选购教程 — 从实例类型到流量包的完整选型指南
- 阿里云国际版SLB负载均衡实战教程 — CLB/ALB/NLB选型与配置
- 阿里云国际版云监控CloudMonitor实战教程 — 告警规则与通知渠道配置
本文由 2.chengzicloud.cloud 提供,点击访问首页了解更多