阿里云系列(六)弹性伸缩
阿里云系列(六)弹性伸缩
阿里云项目实战工程师
Mr.su执教笔记(QQ:491537692)
--私人课件,不出版,不公开,禁止传播想做好运维工作,人先要学会勤快;
居安思危,勤记而补拙,方可不断提高;
别人的资料用的再爽也是别人的;
自己总结的东西是你自身特有的一种思想与理念的展现;
精髓不是看出来的,精髓是记出来的;
请同学们在学习的过程中养成好的学习习惯;
勤于实践,抛弃教案,勤于动手,整理文档
概念定义
根据业务需求和策略设置伸缩规则,在业务需求增长时自动为您增加ECS实例以保证计算能力,在业务需求下降时自动减少ECS实例以节约成本。弹性伸缩不仅适合业务量不断波动的应用程序,同时也适合业务量稳定的应用程序。
- 功能概述
- 根据客户业务需求自动调整ECS实例数量
- 自动向负载均衡的后端服务器组中添加或移除相应的ECS实例。
-
自动向RDS访问白名单中添加或移除ECS实例的IP。
-
产品特点
- 随需应变:根据需求“恰到好处”地分配资源,无需提前预测需求变化,实时应对需求突增。
- 自动化:无需人工干预,自动创建和释放ECS实例,自动配置负载均衡和RDS访问白名单。
- 伸缩模式丰富:多模式兼容,可同时配置定时、动态、自定义、固定、健康模式,可通过API对接外在监控系统。
-
智能:智能调度云计算资源,应对各种复杂场景。
-
应用场景
- 某视频公司:春晚或每周五热门节目来临时,负载激增,需及时、自动扩展云计算资源。
- 某视频直播公司:业务负载变化难以预测,需要阿里云自动根据CPU利用率、应用负载、带宽利用率作为衡量指标进行弹性伸缩。
- 某游戏公司:每天中午12点及晚上6点到9点间需求增长,需要定时扩容。
- 某电商:在大促中,临时激增大量云服务器需求,需要在数分钟内实现从创建到可用。
名词解释
-
弹性伸缩
弹性伸缩是根据用户的业务需求和策略,自动调整其弹性计算资源的管理服务。其能够在业务增长时自动增加 ECS 实例,并在业务下降时自动减少 ECS 实例。 -
伸缩组
伸缩组是具有相同应用场景的 ECS 实例的集合。伸缩组定义了组内 ECS 实例数的最大值、最小值及其相关联的负载均衡实例和 RDS 实例等属性。 -
伸缩配置
伸缩配置定义了用于弹性伸缩的 ECS 实例的配置信息。 -
伸缩规则
伸缩规则定义了具体的扩展或收缩操作,例如加入或移出 N 个 ECS 实例。 -
伸缩活动
伸缩规则成功触发后,就会产生一条伸缩活动。伸缩活动主要用来描述伸缩组内 ECS 实例的变化情况。 -
伸缩触发任务
用于触发伸缩规则的任务,如定时任务、云监控的报警任务。 -
冷却时间
冷却时间是指,在同一伸缩组内,一个伸缩活动执行完成后的一段锁定时间。在这段锁定时间内,该伸缩组不执行其他的伸缩活动。
关系
- 伸缩组包含伸缩配置、伸缩规则、伸缩活动
- 伸缩配置、伸缩规则、伸缩活动依赖伸缩组的生命周期管理,删除伸缩组的同时会删除与伸缩组相关联的伸缩配置、伸缩规则和伸缩活动。
- 伸缩触发任务有定时任务、云监控报警任务等类型。
- 定时任务独立于伸缩组存在,不依赖伸缩组的生命周期管理,删除伸缩组不会删除定时任务
- 云监控报警任务独立于伸缩组存在,不依赖伸缩组的生命周期管理,删除伸缩组不会删除报警任务。
弹性伸缩效果示例
需要提前设置触发弹性伸缩的条件

弹性扩张
业务升级时,弹性伸缩会自动完成底层资源升级,避免访问延时和资源超负荷运行。
弹性伸缩
业务需求下降时,弹性伸缩为您自动完成底层资源释放,避免资源浪费。

弹性自愈
弹性伸缩提供健康检查功能,自动监控伸缩组内的ECS实例的健康状态,避免伸缩组内健康ECS实例低于设置的最小值

工作原理

- 创建好伸缩组、伸缩配置、伸缩规则、伸缩触发任务后,系统会自动化执行以下流程(以增加 ECS 实例为例):
1 伸缩触发任务会按照各自触发生效的条件来触发伸缩活动。
- 云监控任务会实时监控伸缩组内 ECS 实例的性能,并根据用户配置的报警规则(如伸缩组内所有 ECS 实例的 CPU 平均值大于 60%)触发执行伸缩规则请求。
- 定时任务会根据用户配置的时间来触发执行伸缩规则请求。
- 可以根据自己的监控系统及相应的报警规则(如在线人数、作业队列)来触发执行伸缩规则请求。
- 健康检查任务会定期检查伸缩组和 ECS 实例的健康情况,如发现有不健康的 ECS 实例(如 ECS 为非 Running 状态)会触发执行 移出该 ECS 实例 的请求。
2 系统自动通过 ExecuteScalingRule 接口触发伸缩活动,并在该接口中指定需要执行的伸缩规则的阿里云资源唯一标识符(Ari)。
如果是用户自定义的任务,则需要用户在自己的程序中调用 ExecuteScalingRule 接口来实现。
3 根据步骤 2 传入的伸缩规则 Ari(Rule Ari)获取伸缩规则、伸缩组、伸缩配置的相关信息,并创建伸缩活动。
- 通过伸缩规则 Ari 查询伸缩规则以及相应的伸缩组信息,计算出需要增加的 ECS 实例数量,并获得需要配置的负载均衡和 RDS 信息。
- 通过伸缩组查询到相应的伸缩配置信息,即获得了需要创建的ECS实例的配置信息(CPU、内存、带宽等)。
- 根据需要增加的 ECS 实例数量、ECS 实例配置信息、需要配置的负载均衡实例和 RDS 实例创建伸缩活动。
4 在伸缩活动中,自动创建 ECS 实例并配置负载均衡和 RDS。
- 按照实例配置信息创建指定数量的 ECS 实例。
- 将创建好的 ECS 实例的内网 IP 添加到指定的 RDS 实例的访问白名单当中,将创建好的 ECS 实例添加到指定的负载均衡实例当中。
5 伸缩活动完成后,启动伸缩组的冷却功能。待冷却时间完成后,该伸缩组才能接收新的执行伸缩规则请求。
伸缩模式
- 定时模式:自定义自动伸缩发生的时间和频率,如每天 13:00增加 ECS 实例。
- 动态模式:基于云监控性能指标(如 CPU 利用率),自动增加或减少 ECS 实例。
- 固定数量模式:通过设置 最小实例数 (MinSize),即健康运行的ECS 实例最小数量,以保证可用性。
- 自定义模式:通过 API 调用您的自有监控系统,您可以执行手工伸缩。
- 手工执行伸缩规则。
- 手工添加或移出既有的 ECS 实例。
- 自定义 MinSize、MaxSize,弹性伸缩会自动创建或释放 ECS 实例,将当前 ECS 实例数维持在 MinSize 与 MaxSize 之间。
- 健康模式:如 ECS 实例为非 Running 状态,弹性伸缩将自动移出或释放不健康的 ECS 实例。
- 多模式并行:以上所有模式都可以组合配置。例如设置了每天 13:00 ~ 14:00 创建 20 个 ECS 实例以应对业务高峰,但实际需求有可能需要多于20个实例, 则您可以选择其他伸缩模式,与定时模式配合一起使用。
使用限制
产品限制
- 伸缩组内部署在ECS实例的应用必须无状态并且可横向扩展。
- 伸缩组内的ECS实例可能会被自动释放,因此不适合保存应用状态信息和相关数据等信息,例如会话记录(Session)、数据库或者日志等。如果有需要,可以保存状态信息到独立的状态云服务器ECS、保存数据到云数据库RDS或者集中日志存储到日志服务
- 弹性伸缩无法自动将ECS实例添加到开放缓存Memcache实例访问白名单,需要自行添加。
- 弹性伸缩无法纵向扩展,即弹性伸缩无法自动升降ECS实例的vCPU、内存和带宽等配置。
数量限制
- 同一个账号一个地域下最多创建 50 个伸缩组。
- 一个伸缩组内最多创建 10 个伸缩配置。
- 一个伸缩组内最多创建 50 个伸缩规则。
- 一个伸缩组内最多创建 6 个事件通知。
- 一个伸缩组内最多创建 6 个生命周期挂钩。
-
一个伸缩组最多同时关联 5 个负载均衡实例。
-
一个账号下最多创建 20 个定时任务
- 一个伸缩配置下,最多可以选择 10 个实例规格。
实例
如果没有开通伸缩功能,在进入页面的时候直接点击开通按量付费。
创建伸缩规则组

- 参数说明
- 来源类型
| 来源类型 | 说明 |
|---|---|
| 选择实例启动模板 | 扩容时使用实例启动模板中的实例配置信息 |
| 选择已有实例 | 提取已有ECS实例的配置信息创建一个默认伸缩配置,作为自动创建ECS实例的模板。提取的配置信息包括实例的实例规格、镜像、网络类型、安全组、登录密码、标签等。 |
| 从0开始创建 | 不指定自动创建ECS实例的模板,伸缩组创建完成后进入停用状态。需要继续创建伸缩配置或指定启动模板作为自动创建ECS实例的模板,然后才能启用伸缩组。 |
- 数量说明
| 数量类型 | 说明 |
|---|---|
| 组内最大实例数 | 当前ECS实例数量超过上限时,弹性伸缩会自动移出ECS实例,使得伸缩组内的ECS实例数量等于上限。 |
| 组内最小实例数 | 当前ECS实例数量低于下限时,弹性伸缩会自动添加ECS实例,使得伸缩组内的ECS实例数量等于下限。 |
| 组内期望实例数 | 伸缩组会自动将ECS实例数量维持在期望实例数 |
- 冷却时间
单位为秒,伸缩组发生伸缩活动后的默认冷却时间。在冷却时间内,伸缩组会拒绝由云监控报警任务触发的伸缩活动请求,但其他类型任务触发的伸缩活动可以绕过冷却时间立即执行,例如手动执行任务、定时任务。
- 移出策略
| 策略选项 | 说明 |
|---|---|
| 最早伸缩配置对应的实例 | 伸缩配置泛指组内实例配置信息来源,包括伸缩配置和启动模板。筛选添加时间最早的伸缩配置和启动模板对应的实例。手动添加的实例没有关联伸缩配置或启动模板,因此不会首先选出手动添加的实例。如果已移出全部关联的实例,仍需要继续移出实例,则随机移出手动添加的实例。 |
| 最早创建的实例 | 筛选创建时间最早的实例。 |
| 最新创建的实例 | 筛选创建时间最新的实例。 |
| 无策略 | 仅在设置再从结果中移出时可选,表示不进行第二段筛选。 |
-
伸缩组保护
开启伸缩组保护后,不能在控制台或者通过API删除该伸缩组,有效避免误删除伸缩组。如果要删除这个组
那么需要先通过修改伸缩组规则把这个伸缩组保护关闭才可以。 -
网络
- 伸缩组创建完成以后,网络是不能更改的
| 网络类型 | 说明 |
|---|---|
| 专有网络 | 创建伸缩配置时,只能选择支持专有网络的实例规格。 手动添加已有ECS实例时,只能选择同一专有网络中的实例。 |
| 经典网络 | 创建伸缩配置时,只能选择支持经典网络的实例规格。手动添加已有ECS实例时,只能选择经典网络实例。 |
交换机,一个可用区只能属于一个交换机,可以多交换机,多可用区
- 扩缩容策略
| 策略名称 | 说明 |
|---|---|
| 优先级策略 | 先选择的交换机优先级高。当伸缩组无法在优先级较高的交换机所在可用区创建ECS实例时,会自动使用下一优先级的交换机创建ECS实例。 |
| 均衡分布策略 | 在伸缩组关联多个交换机且交换机分布在两个以上可用区时生效,支持在交换机所在的可用区之间均衡分布ECS实例。如果由于库存不足等原因导致可用区之间ECS实例的数量不均衡,可以执行再均衡分布操作来平衡ECS实例的分布情况 |
| 成本优化策略 | 在伸缩配置中指定了多个可选实例规格时生效,按vCPU单价从低到高尝试创建ECS实例。如果伸缩配置中计费方式选择抢占式实例,优先创建抢占式实例。由于库存等原因无法创建各实例规格的抢占式实例时,再自动尝试创建按量付费实例。 |
- 成本优化选项细节参数说明
| 混合实例选项 | 说明 |
|---|---|
| 组内最小按量实例数 | 伸缩组所需按量付费ECS实例的最小台数,默认为0台。如果伸缩组内的按量付费ECS实例的台数小于该值,将优先创建按量付费实例 |
| 按量实例所占比例 | 自动创建ECS实例时按量付费实例所占的比例,默认为70%。计算该值时,不包括组内最小按量实例数对应的台数。 |
| 最低价的多个实例规格 | 价格最低的实例规格的个数,默认为1个。在伸缩配置中指定了多个可选实例规格时生效。创建抢占式实例时,弹性伸缩会在价格最低的几个实例规格之间均衡创建ECS实例。 |
| 是否开启抢占式实例补偿 | 开启抢占式实例补偿后,在抢占式实例被回收前5分钟,弹性伸缩会主动创建新的抢占式实例,并替换掉将被回收的抢占式实例 |
创建伸缩配置

创建伸缩规则

伸缩规则参数说明
- 简单规则
| 名称 | 说明 |
|---|---|
| 规则名称 | 简单规则的名称。 |
| 伸缩规则类型 | 伸缩规则的类型,创建成功后不可修改,选择简单规则。 |
| 执行的操作 | 调整至N台:执行伸缩规则后,伸缩组内实例的数量变为N台。最多能触发伸缩500台实例。 增加N台:执行伸缩规则后,伸缩组内实例的数量在当前基础上增加N台。增加的数量不可超过500。 增加N%:执行伸缩规则后,伸缩组内实例的数量在当前基础上增加N%。最多能触发伸缩500台实例。 减少N台:执行伸缩规则后,伸缩组内实例的数量在当前基础上减少N台。减少的数量不可超过500。 减少N%:执行伸缩规则后,伸缩组内实例的数量在当前基础上减少N%。最多能触发伸缩500台实例。 |
| 冷却时间 | 可选项,单位为秒。不填写则默认使用伸缩组的冷却时间 |
- 目标追踪规则
| 名称 | 说明 |
|---|---|
| 规则名称 | 目标追踪规则的名称。 |
| 伸缩规则类型 | 伸缩规则的类型,创建成功后不可修改,选择目标追踪规则 |
| 是否配合已有的预测伸缩规则 | 如果伸缩组内存在预测规则,可以选择继承预测规则的指标类型和目标值。 |
| 指标类型 | 平均CPU使用率 内网入流量的平均值 内网出流量的平均值 公网入流量的平均值 公网出流量的平均值 |
| 目标值 | 云监控指标的目标值,目标追踪规则会将云监控指标值维持在目标值附近。 |
| 实例预热时间 | 单位为秒。处于预热状态的实例正常加入伸缩组,但是不会向云监控上报监控数据。动态计算需要扩缩容的实例数量时,处于预热状态的实例不计入现有实例数量,以免造成指标值波动。 |
| 禁用缩容 | 如果禁用缩容,目标伸缩规则只创建一个用于扩容的报警任务,因此不会从伸缩组移出ECS实例。如果允许缩容,目标伸缩规则会创建两个报警任务,一个用于扩容,一个用于缩容。 |
- 预测规则
| 参数 | 说明 |
|---|---|
| 规则名称 | 伸缩规则的名称。 |
| 伸缩规则类型 | 伸缩规则的类型,选择预测规则 |
| 是否配合已有的目标追踪规则 | 和选择规则结合使用。 |
| 选择规则 | 勾选是否配合已有的目标追踪规则后出现,可以继续选择一条目标追踪规则,自动沿用目标追踪规则的指标类型和目标值。 |
| 指标类型 | 平均CPU使用率(%) 内网入流量的平均值(KB/Min) 内网出流量的平均值(KB/Min) |
| 目标值 | 所选云监控指标的目标值,预测规则将综合目标值等因素计算出合适的实例数量。如果修改了目标值,伸缩组会清空现存的预测任务,并在一小时内创建新的预测任务。 |
| 预测模式 | 预测并伸缩:产生预测结果并创建预测任务。 只预测不伸缩:产生预测结果,但不会创建预测任务。 |
| 预设最大值 | 伸缩组实例数上限,和最大值处理方式结合使用。 默认值为当前的伸缩组内最大实例数。 |
| 最大值处理方式 | 预测值会覆盖预设最大值:预测值大于预设最大值时,预测任务的实例数最大值采用预测值。 预设最大值会覆盖预测值:预测值大于预设最大值时,预测任务的实例数最大值采用预设最大值。 预测值会附加一定比例:和增加比例结合使用。 |
| 增加比例 | 最大值处理方式为预测值会附加一定比例时出现,当前预测值会按照该比例增加,并作为新的预测值。例如,当前预测值为100,增加比例为10%,则预测任务的实例数最大值采用110。 增加比例的默认值为0%,最大值为100%。 |
| 预启动时间(分钟) | 预测规则自动创建的预测任务默认均在整点执行,您可以设置预启动时间提前执行预测任务,预先准备资源。 |
- 步进规则
| 名称 | 说明 |
|---|---|
| 规则名称 | 步进规则的名称。 |
| 伸缩规则类型 | 伸缩规则的类型,创建成功后不可修改,选择步进规则。 |
| 监控类型 | 系统监控:选择该项后,可以继续指定系统监控报警任务。 自定义监控:选择该项后,可以继续指定自定义监控报警任务。 |
| 执行的时间 | 指定一个报警任务,该报警任务的触发条件会作为分步步骤的参照条件。例如,CPU使用率平均值连续3次 >= 80%。 |
| 执行的操作 | 基于报警任务触发条件继续设置分步步骤,指定违例规模及相应操作,在报警任务触发后,弹性伸缩会根据违例规模执行相应操作 |
| 实例预热时间 | 单位为秒。 处于预热状态的实例正常加入伸缩组,但是不会向云监控上报监控数据。动态计算需要扩缩容的实例数量时,处于预热状态的实例不计入现有实例数量,以免造成指标值波动 例如,步进规则的实例预热时间为300秒,增加了2台实例,则在实例创建完成后300秒内,计算伸缩组内CPU使用率平均值时不会计入这2台实例的指标值。 |
创建生命周期挂钩
生命周期挂钩的作用就是在服务器进入服务之前,先挂起,我们可以更自由的去配置一些自己想要的服务

ECS实例保持挂起状态的时间。最小为30秒,最大为21600秒(6小时),必须为整数。
释放伸缩组



浙公网安备 33010602011771号