阿里云系列(六)弹性伸缩

阿里云系列(六)弹性伸缩

阿里云项目实战工程师


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 实例的变化情况。

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

  • 冷却时间
    冷却时间是指,在同一伸缩组内,一个伸缩活动执行完成后的一段锁定时间。在这段锁定时间内,该伸缩组不执行其他的伸缩活动。

关系

  • 伸缩组包含伸缩配置、伸缩规则、伸缩活动
  • 伸缩配置、伸缩规则、伸缩活动依赖伸缩组的生命周期管理,删除伸缩组的同时会删除与伸缩组相关联的伸缩配置、伸缩规则和伸缩活动。
  • 伸缩触发任务有定时任务、云监控报警任务等类型。
  • 定时任务独立于伸缩组存在,不依赖伸缩组的生命周期管理,删除伸缩组不会删除定时任务
  • 云监控报警任务独立于伸缩组存在,不依赖伸缩组的生命周期管理,删除伸缩组不会删除报警任务。

弹性伸缩效果示例

需要提前设置触发弹性伸缩的条件

image_1e8gl3sm81mdb431t19ausgtk9.png-28.7kB

弹性扩张

业务升级时,弹性伸缩会自动完成底层资源升级,避免访问延时和资源超负荷运行。
image_1e8gltemjada1qfe1qh71jca151413.png-30.7kB

弹性伸缩

业务需求下降时,弹性伸缩为您自动完成底层资源释放,避免资源浪费。

image_1e8glus681t1l1go5rakrhd1gra1g.png-29.9kB

弹性自愈

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

image_1e8gm0fc9136o1svadtp1iko1soh1t.png-32.4kB

工作原理

image_1e8gt62d15j01r27f8n1in2k2n9.png-133.8kB

  • 创建好伸缩组、伸缩配置、伸缩规则、伸缩触发任务后,系统会自动化执行以下流程(以增加 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 个实例规格。

实例

如果没有开通伸缩功能,在进入页面的时候直接点击开通按量付费。

创建伸缩规则组

image_1eb634m4f9st1suk3jb1doe1hj89.png-195.3kB
image_1eb63b1kck025361femofu1gqum.png-144.1kB
image_1eb63hhi1g0b143va4u1jt4ogi13.png-153.9kB
image_1eb63hu9310f7ceh1ccambe1cgr1g.png-152.7kB
image_1eb6490ro1o0r1d6g5blq045gd1t.png-146kB

  • 参数说明
  • 来源类型
来源类型说明
选择实例启动模板 扩容时使用实例启动模板中的实例配置信息
选择已有实例 提取已有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分钟,弹性伸缩会主动创建新的抢占式实例,并替换掉将被回收的抢占式实例

创建伸缩配置

image_1eb68ho3t1runmp31v85td6dng9.png-132.6kB
image_1eb6b5s7m1trcktuctl4puhmum.png-153.5kB
image_1eb6b8lc5tf0cr6o5g1ee3116h13.png-147.1kB
image_1eb6bfa5gg1u1jlj6o41r4l1cv21g.png-144.4kB
image_1eb6bfqhfuic1eu710cl17tf16mn1t.png-148kB
image_1eb6bh4fd15t517pf1c2ncrgot2a.png-152.9kB
image_1eb6bs3h613pu1ab61l9rdj1p662n.png-146.4kB
image_1eb6c3ft13ha1g63s0tjru1enr34.png-129.6kB
image_1eb6c42c9e8lk1tdva64v7dj3h.png-150.4kB
image_1eb6c67f1ndb61r1qsc1ipv5ic3u.png-144.7kB
image_1eb6c6hng18gfgrj16fvfke1nr14b.png-139.4kB
image_1eb6c7red12vq1rh22scvtc1pok4o.png-154.5kB
image_1eb6cg9o811sar5m17rt6gc198855.png-125kB
image_1eb6cie4vt4r1k211a3gebb72h5i.png-185.7kB
image_1eb6cj6ut8fvr8q1k613soh8r5v.png-183.1kB
image_1eb6cjheo1rmlk4a16806km16kc6c.png-164.3kB
image_1eb6cmqoo61ctlssre1jfd1c056p.png-101.4kB
image_1eb6cpsip1neum881t771h1d8p376.png-128.6kB
image_1eb6crmkb18f01m8q1m11pim1e397j.png-119.2kB
image_1eb6d7eoca1k1rmk1q4k1rtp7f880.png-134.1kB
image_1eb6d7ot22n6159b1nboq87hvf8d.png-134.5kB

创建伸缩规则

image_1eb6dcg447r9sc3187dmbu53a8q.png-128.1kB
image_1eb6degkn1apt1f1p1r071jpn16nv97.png-133.1kB
image_1eb6di79a19e5113k5f148v1mqm9k.png-137.6kB
image_1eb6dkvf415611ki8uiad6enpa1.png-140.6kB
image_1eb6dlp0obn413oc4js531n8vae.png-117.2kB
image_1eb6doqfs2tb1uf01pv21ui7ulrar.png-119.8kB
image_1eb6du9h6cau1v0c1q991sb22lfb8.png-137.5kB
image_1eb6duos6o011drs80vuecr7bbl.png-160.1kB
image_1eb6e2mip1pjhd5k75un14tqvc2.png-145.2kB
image_1eb6e34mp5pke7p15r0mnc1godcf.png-175kB
image_1eb6ebk7vhl109n141s1iu11g8acs.png-171.3kB
image_1eb6eg6q51tjimi81fls1f0bid1d9.png-149.3kB
image_1eb6eihp21guofe517k66801qcsdm.png-167.7kB

伸缩规则参数说明

  • 简单规则
名称说明
规则名称 简单规则的名称。
伸缩规则类型 伸缩规则的类型,创建成功后不可修改,选择简单规则。
执行的操作 调整至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台实例的指标值。

创建生命周期挂钩

生命周期挂钩的作用就是在服务器进入服务之前,先挂起,我们可以更自由的去配置一些自己想要的服务

image_1eb6g7olr17l4vj619f615g81l8je3.png-118.2kB
image_1eb6g919d1fi51rqi1f0115lj1pl3eg.png-133.4kB

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

释放伸缩组

image_1eb6gmctodd75i7i16v0107ffa.png-139.5kB
image_1eb6gnd181e96ja85v015s31smqfn.png-133.4kB
image_1eb6gnv0s1qttgj47ujs7e18o4g4.png-159.7kB
image_1eb6godip11f3c31790h1a1sa6gh.png-162.9kB
image_1eb6gq8i1174g1hsg6r1gegvt5gu.png-139.5kB
image_1eb6he2071jpn17kc18991pt9cr2hb.png-108.1kB
image_1eb6hfagg1ni51h231ovf1hotcpho.png-143.6kB

posted @ 2021-09-21 17:32  有小熊陪着你看月亮  阅读(1372)  评论(0)    收藏  举报