产品特性
ESS核心能力
扩容时:
- 自动创建指定数量、指定类型的实例(ECS/ECI实例)
- 如果伸缩组关联了负载均衡,自动为创建的ECS关联负载均衡
- 如果伸缩组关联了RDS,自动将创建的ECS实例IP加到RDS访问白名单中。
缩容时:
- 自动删除实例、取消关联负载均衡,移除RDS白名单
配置步骤
伸缩组 -- 实例来源 -- 伸缩规则 -- 触发任务
实例来源
实例来源可以选择==实例启动模板==和==伸缩配置==两种。
启动模板
- 用某个自定义镜像启动实例。
- 创建伸缩组会指定VPC和VSW,如果启动模板也选择了VPC和VSW,则实际伸缩时会用伸缩组中指定的VPC和VSW,替换掉启动模板中的配置。
- 参数不支持修改,但是支持创建新版本
伸缩配置
两种模式:
- 根据已有实例,创建相同配置的实例出来。
- 从0到1创建。
- 参数可以修改但是不可追溯
伸缩组
定义对哪些ECS实例做扩缩容,定义实例最大最小数量,关联的负载均衡实例、关联的RDS实例等。
- 最大实例数
- 最小实例数
- 期望实例数: https://help.aliyun.com/zh/auto-scaling/user-guide/expected-number-of-instances
- 在创建伸缩组的时候设置期望实例数,创建出来之后就会自动伸缩到这个数
- 由于各种触发规则导致的扩缩容,也会自动改变期望实例数
- 不设置期望实例数,伸缩活动失败时,需要手动重试;而且当伸缩组内存在执行中的伸缩活动时,不能执行新的伸缩活动。
- 简单规则中设置增加2台,手动触发该规则,会发现期望实例数+2。手动执行简单规则就是通过增加期望实例数,系统自动检测期望实例数来实现的扩缩容。
弹性伸缩策略
- 优先级策略:在优先级高的可用区扩缩容。如果无法扩容,自动在下一优先级的可用区进行扩缩容
- 均衡分布策略:在多个可用区均衡分布ECS实例
- 成本优化策略:指定了多种规格的实例,优先创建vCPU单价最低的实例;优先移除vCPU单价最高的实例
实例移出策略
可以选择优先移除最早创建或者最新创建的实例。
手动添加 vs 自动创建的实例
手动添加进伸缩组的实例,缩容时==不会被删除==,只会被移除出伸缩组;而自动扩容出来的实例,缩容时==会被释放掉==。
包年包月实例在弹性伸缩中的角色
包年包月实例在弹性伸缩中的角色通常是 基础容量保障,用于非波动业务场景,而自动扩缩容主要针对按量付费或抢占式实例。其核心规则为:
1. 永不自动释放,仅移出伸缩组。
2. 优先保留,缩容时最后被移出。
3. 不参与成本策略排序,但需计入实例数限制。
建议将包年包月实例用于稳定负载,而通过伸缩组管理波动流量的弹性实例,以优化成本与资源利用率。
弹性伸缩规则
简单规则
直接定义增加减少多少台
步进规则
基于报警任务(系统监控或者自定义监控):触发某个报警任务后,增加减少多少台
目标追踪规则
e.g. 持续监测CPU使用率,自动伸缩,使得CPU使用率一直保持在==50%==左右
目标追踪规则优于简单规则
相比简单规则,具有以下优点:
- 数据稳定:支持设置实例预热时间,新实例加入伸缩组后,将首先进入实例预热阶段,在此期间不会向云监控上报监控数据,也不作为扩缩容过程的基数实例。预热阶段能够有效防止增加过多实例,达到动态稳定扩缩容效果。
- 实例数不回调:弹性伸缩会及时自动计算所需的实例数量并触发扩缩容,比较精准地将云监控指标维持在目标值附近。
- 实例稳定性高:具有动态稳定区间,根据伸缩组的历史监控数据计算目标值稳定的区间。
可以禁用缩容,这种情况下目标追踪只扩容,可以创建其他规则用来缩容。
预测规则
机器学习预测未来监控指标值。预测结果每天更新一次。
这种监控不准。
触发任务
手动执行
定时任务
cronjob类型来自动伸缩
报警任务
是基于云监控根据CPU使用率等指标进行弹性伸缩。
弹性自愈
弹性伸缩提供健康检查功能,自动监控伸缩组内ECS实例的健康状态。监测到某台实例不健康(即未处于运行中状态),自动释放不健康实例并创建新的实例。
生命周期挂钩
挂起实例,可以在挂起期间对实例进行自定义操作。比如在创建ECS实例之后延迟一段时间,测试服务正常后再挂载到负载均衡上接受流量。
添加了生命周期挂钩之后:
- 扩容出新实例的时候,会出现==Pending:Wait==状态,在这期间进行预装软件或其他自定义操作。
- 缩容的时候,出现==Removing:Wait==状态。
适合配置生命周期挂钩的场景
- 弹性扩容的实例不适合立即为客户端提供服务,比如要加入云数据库,绑定辅助弹性网卡等。或者应用程序需要一定的启动时间
- 缩容的实例不适合立即被移除,比如需要备份数据,拷贝日志,处理未完成的请求等。
最佳实践
多种模式混合配置
实例生命周期托管
注意:如果选中将实例的生命周期托管给伸缩组,在弹性收缩活动中,将该ECS实例移出伸缩组时也会释放ECS实例。支持将包年包月实例手动添加至伸缩组,但不支持伸缩组托管包年包月实例的生命周期。(ACK包年包月节点池scale out之后,节点会变成游离状态)
注意事项
- 部署在伸缩组内的ECS实例,需要时==无状态==的,不要存储持久化数据。应用数据、日志存在单独的地方
- 如果伸缩组关联的RDS实例、ALB/CLB服务器组被删除,那么伸缩组自动解除与该资源的关联;但是伸缩活动不会因为解除关联而停止。
- 保证ECS级别的事务完整性:即只进行ECS实例级回滚,而不是伸缩活动回滚。比如,创建了20台ECS实例,只有19台成功加入负载均衡,不成功的一台实例会进行自动释放,而不是所有20台都释放掉。
- 伸缩活动==无法中断==,比如扩容5台,在扩容到第三台的时候无法强行终止。
冷却时间
冷却时间规则
- 每个伸缩组的最后一个实例成功加入或移出伸缩组时,整个伸缩组的冷却时间才开始计时
- 同时在伸缩组和伸缩规则中设置了冷却时间,优先使用伸缩规则中的冷却时间
- 在冷却时间内,只有==云监控报警任务==类型的伸缩活动请求会被拒绝,其他类型的触发任务(手动、定时等)可以绕过冷却时间立即执行伸缩活动。
弹性强度
创建完伸缩组,提示弹性强度较差,因为这些方面:
- 交换机要选择多个可用区的交换机
- 启动模板的配置,要选择多个库存充足的实例规格
- 选择可用区内库存充足的实例规格