弹性伸缩:弹性伸缩是根据用户的业务需求和策略,自动调整其弹性计算资源的管理服务。其能够在业务增长时自动增加 ECS 实例,并在业务下降时自动减少 ECS 实例。
伸缩组:伸缩组是具有相同应用场景的 ECS 实例的集合。伸缩组定义了组内 ECS 实例数的最大值、最小值及其相关联的负载均衡实例和 RDS 实例等属性。
伸缩配置:伸缩配置定义了用于弹性伸缩的 ECS 实例的配置信息。
伸缩规则:伸缩规则定义了具体的扩展或收缩操作,例如加入或移出 N 个 ECS 实例。
伸缩活动:伸缩规则成功触发后,就会产生一条伸缩活动。伸缩活动主要用来描述伸缩组内 ECS 实例的变化情况。
伸缩触发任务:用于触发伸缩规则的任务,如定时任务、云监控的报警任务。
冷却时间:冷却时间是指,在同一伸缩组内,一个伸缩活动执行完成后的一段锁定时间。在这段锁定时间内,该伸缩组不执行其他的伸缩活动。
自动创建的 ECS 实例
自动创建的 ECS 实例是指根据用户的伸缩配置和伸缩规则,由弹性伸缩服务自动创建的 ECS 实例。弹性伸缩服务负责该类型 ECS 实例的全生命周期管理,即在伸缩组扩展活动中,负责该 ECS 实例的创建,在伸缩组的收缩活动中,负责停止和释放该 ECS 实例。
手工添加的 ECS 实例
手工添加的 ECS 实例是指不是由弹性伸缩服务创建,但由用户手工添加到伸缩组中的 ECS 实例。弹性伸缩服务不负责该类型 ECS 实例的全生命周期管理,即该类型的 ECS 实例是在弹性伸缩服务之外创建,只能手工加入伸缩组,在伸缩组的收缩活动中或用户手工移出该类型 ECS 实例时,弹性伸缩服务只负责将该 ECS 实例移出伸缩组,不会停止和释放该 ECS 实例。
实例状态
ECS 实例在伸缩组中的生命周期,通过以下几种状态描述:
Pending – 表示 ECS 实例正在加入伸缩组,包括创建实例、加入负载均衡、添加 RDS 访问名单等过程。
InService – 表示 ECS 实例已成功加入伸缩组,并正常提供服务。
Removing – 表示 ECS 实例正在移出伸缩组。
实例的健康状态
ECS 实例在伸缩组中的健康状态为:
Healthy(健康)
Unhealthy(不健康)
弹性伸缩会自动移出伸缩组中不健康的 ECS 实例。
对于自动创建的 ECS 实例,弹性伸缩会停止和释放该 ECS 实例。
对于手工添加的 ECS 实例,弹性伸缩不会停止和释放该 ECS 实例。
冷却时间
冷却时间指成功执行伸缩活动后的一段锁定时间。您可以通过以下两种方式配置冷却时间:
在伸缩组中配置默认冷却时间,默认冷却时间不能为空。
在伸缩规则中配置冷却时间,如果不配置,将使用默认冷却时间。
如果同时在伸缩组和伸缩规则中配置了冷却时间,弹性伸缩服务将优先使用伸缩规则中的冷却时间。
伸缩组成功执行伸缩活动后,弹性伸缩服务开始计算冷却时间。如果在伸缩活动中,多台 ECS 实例加入或者移出伸缩组,则从最后一台 ECS 实例加入或者移出伸缩组后开始计算冷却时间。
如果在伸缩活动中,没有 ECS 实例成功加入或者移出伸缩组,则不会开始计算冷却时间。
在冷却时间内,伸缩组会拒绝由云监控报警任务触发的伸缩活动请求。但其他类型任务(手动执行任务、定时任务)触发的伸缩活动可以立即执行,绕过冷却时间。
如果您停用伸缩组,然后再次启用伸缩组,冷却时间将会失效。
冷却时间仅锁定同一个伸缩组的伸缩活动,不会对其他伸缩组的伸缩活动产生影响。
伸缩活动的流程
自动扩展
1、判断伸缩组的健康状态和边界条件。
2、分配 ActivityId 和执行伸缩活动。
3、创建 ECS 实例。
4、修改 Total Capacity。
5、分配 IP。
6、添加 RDS 白名单。
7、启动 ECS 实例,等待启动完成。
8、挂载负载均衡,将权重设为创建伸缩配置时指定的 负载均衡权重。
9、伸缩活动完成,启动 cooldown。
自动收缩
1、判断伸缩组的健康状态和边界条件。
2、分配 ActivityId 和执行伸缩活动。
3、从负载均衡移除 ECS 实例。
4、停止 ECS 实例,等待停止完成。
5、从 RDS 白名单移除。
6、释放 ECS 实例。
7、修改 Total Capacity。
8、伸缩活动完成,启动 cooldown。
手工加入
1、判断伸缩组的健康状态、边界条件和 ECS 实例的状态、类型。
2、分配 ActivityId 和执行伸缩活动。
3、加入 ECS 实例。
4、修改 Total Capacity。
5、添加 RDS 白名单。
6、挂载负载均衡,将权重设为当前伸缩组中已激活的伸缩配置上指定的负载均衡权重。
7、伸缩活动完成,启动 cooldown。
手工移出
1、判断伸缩组的健康状态和边界条件。
2、分配 ActivityId 和执行伸缩活动。
3、负载均衡停止向该 ECS 实例转发流量。
4、等待 60 秒后,从负载均衡移除 ECS 实例。
5、从 RDS 白名单移除。
6、修改 Total Capacity。
7、从伸缩组移出。
8、伸缩活动完成,启动 cooldown。
伸缩活动有 ECS 实例加入伸缩组失败时,需要保持 ECS 实例级事务的完整性,而非伸缩活动级事务的完整性,即只进行 ECS 实例级回滚,而不是伸缩活动级回滚。
例如,当伸缩组创建了 20 台 ECS 实例,但只有 19 台 ECS 实例成功加入负载均衡时,则只对不成功的 1 台 ECS 实例进行自动释放操作。
当 ECS 实例成功加入伸缩组后,弹性伸缩服务会定期扫描该 ECS 实例的运行状态,如果发现该 ECS 实例为非运行中(Running)状态,则会将该 ECS 实例移出伸缩组。
对于弹性服务自动创建的 ECS 实例:将立即启动移出和释放该 ECS 实例操作。
对于用户手工添加的 ECS 实例:将立即启动移出该 ECS 实例操作,但不会停止和释放该 ECS 实例。
移出不健康 ECS 实例,不受 MinSize 的限制,即移出不健康 ECS 实例后,有可能导致 Total Capacity 低于 MinSize,此时弹性伸缩服务会自动创建差额的 ECS 实例使得 Total Capacity 等于 MinSize。
同一个账号一个地域下最多创建 50 个伸缩组。
一个伸缩组内最多创建 10 个伸缩配置。
一个伸缩组内最多创建 50 个伸缩规则。
一个账号下最多创建 20 个定时任务。
在计算和执行过程中,伸缩规则可以根据伸缩组的 MinSize、MaxSize 进行自动调整其需要增加或减少的 ECS 实例数(例如:伸缩规则中指定将伸缩组的 ECS 实例数调整至 50 台,但伸缩组 MaxSize 只有 45 台,则整个伸缩规则会按调整至 45 台来计算和执行。)
同一伸缩组内、同一时刻只能有一个伸缩活动在执行。
伸缩活动不可以中断。例如,某个创建 20 台 ECS 实例的伸缩活动正在执行中,当创建到第 5 台 ECS 实例时,您无法强行终止该伸缩活动。
由于弹性伸缩是借助阿里云的 RAM (Resource Access Management)服务,通过 ECS Open API代替用户弹性伸缩 ECS 实例资源,所以回滚的 ECS 实例仍然会被扣费。
由于在同一时刻一个伸缩组中只能存在一个伸缩活动,定时任务还提供了自动重试时间设置功能,避免因为单次执行伸缩规则失败影响定时任务的结果。如果同一分钟内存在多个待执行的定时任务,弹性伸缩会执行最新创建的定时任务。