弹性伸缩 (Auto Scaling)

概念

跟进业务需求和策略设置伸缩规则,在业务新一区一增长时自动增加ECS实例,以保证计算能力;在业务需求下降时自动是减少ECS实例以节省成本。

适用场景

  • 无规律的业务量波动
    某新闻网站播出了热点新闻,访问量突增,新闻的时效性降低后,访问量回落。由于该新闻网站的业务量波动无规律,访问量突增和回落的具体时间难以预测,所以手动调整实例很难做到及时性,而且调整数量也不确定。
    您可以利用弹性伸缩的报警任务,由阿里云自动根据CPU使用率等衡量指标进行弹性伸缩。

  • 有规律的业务量波动
    某游戏公司每天18:00业务需求急速增长进入高峰期,到22:00业务需求降低,高峰期结束。该游戏公司的业务量波动有规律,但是每天手动调整计算能力浪费人力和时间成本。
    您可以利用弹性伸缩的定时任务,由阿里云定时自动进行弹性伸缩。您可以设置两个定时任务,报警任务执行的伸缩规则是简单规则类型。一个定时任务用于在每天17:55自动为您增加3台实例,另一个定时任务用于在每天22:05自动为您减少3台实例。该方式可以很好地应对每天18:00~22:00高峰期的业务量,且在高峰期结束后及时释放实例,不浪费多余的实例资源和成本。

  • 无明显的业务量波动
    某通信公司的业务支撑系统需要全天运作,业务量一段时间内无明显波动。如果现有计算资源突然出现故障,会导致业务受到影响,很难及时进行故障修复或者替换。
    您可以利用弹性伸缩的高可用优势,开启健康检查模式。阿里云会自动检查实例的健康状态,当发现存在实例不健康时,自动增加实例替换不健康的实例,确保故障的计算资源及时得到修复。而且伸缩组必须设置最小实例数,确保无论在哪种情况下,伸缩组内的实例数量都至少等于下限,确保业务可以运作。

  • 混合型的业务场景
    如果某公司的业务场景比较复杂,日常业务量波动不明显,且在某个时间段内,业务量是在一定基础上波动的,您已经订购了一部分包年包月的实例,只是想针对波动的业务量合理调整实例数量。
    您可以手动将已订购的包年包月实例加入伸缩组,再结合弹性伸缩的报警任务,由阿里云自动根据CPU使用率等衡量指标进行弹性伸缩,更经济、稳定地管理业务的计算能力。

除手动调整实例数量和报警任务,弹性伸缩还支持定时任务、健康检查等。您可以根据业务场景灵活组合以上功能,从而在使用弹性伸缩的时候获得更丰富灵活的使用体验。

工作原理

image

支持的伸缩模式

固定数量模式

如果您创建伸缩组时设置期望实例数,伸缩组会自动将ECS实例数量维持在期望实例数

健康模式

如果您在伸缩组开启健康检查功能,伸缩组会定期检查ECS实例的运行状态,如果发现一台ECS实例未处于运行中状态,则判定该ECS实例为不健康实例并移出。

定时模式

您可以创建定时任务,在指定时间执行指定伸缩规则。

动态模式

您可以基于云监控性能指标(例如CPU使用率)创建报警任务,当伸缩组的指标数据满足您指定的报警条件(例如伸缩组内所有ECS实例的CPU平均值大于60%)时,触发报警并执行您指定的伸缩规则。

自定义模式

您可以手动进行弹性伸缩,包括手动执行伸缩规则,或者手动添加、移出或者删除已有的ECS实例。

弹性伸缩组件

伸缩组概述

伸缩组是弹性伸缩的核心单元,用来管理一组具有相同应用场景和相同实例类型的实例。

伸缩配置

定义了弹性伸缩的ECS示例的配置信息。
在一个伸缩组中,您可以创建多个伸缩配置,且最多可以拥有70个伸缩配置。但一个伸缩组中只能有一个伸缩配置处于生效状态,选用一个新的伸缩配置后,原生效中的伸缩配置会进入未生效状态。
必须配置:付费模式(按量付费、抢占式实例)、实例和镜像(实例规格、镜像)、存储(系统盘、数据盘)、网络(公网IP、安全组);
可选配置:登录凭证(SSH秘钥)、高级设置(资源组、实例名称、主机名、RAM角色、负载均衡权重)、实例自定义数据、标签。

伸缩触发任务

用于触发伸缩规则的任务,如定时任务、云监控的报警任务。

  • 报警任务支持:CPU,内存,系统平均负载,内外网出和入流量,TCP总连接数和已建立连接数。系统盘读和写BPS,系统盘读和写IOPS,内网网卡收包数和发包数。磁盘IOPS不是具体的确定的属性,具体的要区分具体的系统盘读和写BPS,系统盘读和写IOPS。

伸缩规则

伸缩规则的作用由伸缩规则的类型来决定,可用于触发伸缩活动或者智能设置伸缩组边界值。创建好伸缩组后,您需要设置伸缩规则来实现手动或自动伸缩ECS实例或者ECI实例资源。

通过设置伸缩规则,您可以触发伸缩组的伸缩活动或者智能设置伸缩组边界值。在计算和执行过程中,伸缩规则可以根据伸缩组的最小实例数、最大实例数或者期望实例数自动调整增加或减少的ECS实例数。例如,伸缩规则中指定将伸缩组的ECS实例数调整至50台,但伸缩组最大实例数只支持45台,则整个伸缩规则会按调整至45台来计算和执行。

执行伸缩规则主要有以下几种方式:

  • 手动执行。
  • 通过定时任务执行。更多信息,请参见配置定时任务。
  • 通过报警任务执行。更多信息,请参见报警任务概述。

伸缩活动

在执行伸缩规则、手动添加或移出已有ECS实例时,均会触发伸缩活动实现扩张或收缩操作,用来描述伸缩组内实例的变化情况。
伸缩活动的生命周期为判断伸缩组健康状态和边界条件和启动cooldown步骤间的所有活动,步骤及顺序如下:

  1. 判断伸缩组的健康状态、边界条件和ECS实例的状态、类型。
  2. 分配Activityld和执行伸缩活动。
  3. 加入ECS实例。
  4. 修改Total Capacity.
  5. 添加RDS白名单。
  6. 挂载负载均衡,将权重设为当前伸缩组中已激活的伸缩配置上指定的“负载均衡权重”。此处使用了伸缩配置上指定的负载均衡权重”。
  7. 伸缩活动完成,启动cooldown。

冷却时间

自动触发的伸缩活动有冷却时间,冷却时间指伸缩组成功执行伸缩活动后的一段锁定时间。在冷却时间内,伸缩组会拒绝由报警任务触发的伸缩活动请求。
但非报警任务(手动执行任务、定时任务、健康检查等)触发的伸缩活动可以立即执行,绕过冷却时间。

冷却时间规则

  • 冷却时间不能为空,如果不配置使用默认冷却时间。
  • 如果在伸缩活动中,多台ECS实例加入或者移出伸缩组,则从最后一台ECS实例成功加入或者移出伸缩组后,弹性伸缩服务开始计算冷却时间。如果在伸缩活动中,没有ECS实例成功加入或者移出伸缩组,则弹性伸缩服务不会开始计算冷却时间。
  • 如果您停用再启用伸缩组,伸缩组启用后的首次伸缩活动可以立即执行,不会受冷却时间影响。当伸缩组启用后首次成功执行伸缩活动,弹性伸缩服务才开始计算冷却时间。

生命周期挂钩

生命周期挂钩是一个管理伸缩组内ECS实例或ECI实例生命周期的工具。弹性伸缩会自动触发扩缩容活动,并触发生命周期挂钩使伸缩活动中的ECS实例或ECI实例处于挂起中的状态(即等待的状态),为您保留一段自定义操作的时间,直至生命周期挂钩超时结束。

最佳实践

生命周期挂钩和OOS模板

通过生命周期挂钩,您能够在扩缩容流程中挂起ECS实例,执行自定义操作后再使用或者释放ECS实例。
运维编排服务(OOS)是阿里云提供的云上自动化运维服务,能够自动化管理和执行任务。您可以通过模板定义执行任务、执行顺序、执行输入和输出,然后执行模板完成一组运维操作。

使用限制

功能限制

  • 部署在伸缩组内ECS实例或ECI实例上的应用必须是无状态并且可横向扩展的。
  • 伸缩组内ECS实例或ECI实例可能会被自动释放,因此不适合保存会话记录、应用数据、日志等信息。如有需要,您可以将会话记录等状态信息保存到独立的状态服务器,并将应用数据保存到云数据库RDS,将日志存储到日志服务。
  • 弹性伸缩不支持自动将ECS实例或ECI实例添加到Memcache实例的访问白名单,您需要自行添加。
  • 如果某个伸缩组关联的RDS实例、ALB服务器组、CLB实例或者CLB实例的后端服务器组被删除,则伸缩组自动解除与该资源的关联。
  • 如果某个伸缩组内自动触发的伸缩活动连续失败超过30天,弹性伸缩系统巡检会暂停该伸缩组自动触发伸缩活动的功能,并通过短信或者邮件向您发送通知。

数量限制

ACP考试相关外延知识点

  • 弹性伸缩只支持ECS的伸缩,不支持其他服务的伸缩
  • 用户手动添加到伸缩组中的ECS实例不会停止和释放,弹性伸缩只会停止和释放自动创建的ECS.

参考资料

首页>弹性伸缩>用户指南

-------------本文结束感谢您的阅读-------------