弹性伸缩组

概述

弹性伸缩组:一组具有相同应用场景的云主机集合,可根据用户业务变化自动实现弹性伸缩或弹性自愈。

功能特点

  • 弹性伸缩
    • 弹性伸缩包括弹性扩容和弹性缩容,前者在业务增长时自动增加云主机,后者在业务下降时自动减少云主机。
    • 提供监控报警触发弹性伸缩,可自定义接收端类型,包括系统/邮箱/钉钉/HTTP应用/短信/Microsoft Teams。
    图 1所示:
    图 1. 弹性伸缩


  • 弹性自愈
    • 弹性自愈通过监控伸缩组内云主机的健康状态,自动移除不健康云主机并创建新的云主机,确保组内健康云主机数不低于设置的最小值。
    • 提供两种健康检查机制触发弹性自愈:负载均衡健康检查、云主机健康检查。若伸缩组配置了负载均衡功能,建议选择负载均衡器自带的健康检查机制。
    图 2所示:
    图 2. 弹性自愈


应用场景

以下介绍弹性伸缩组的三种典型应用场景:
  • 弹性扩容:

    某电商公司在双十一、春节等大型节日期间发起抢红包、秒杀等促销活动,负载激增,需及时、自动增加云主机进行扩容,避免访问延时和资源超负荷运行。

  • 弹性缩容:

    当节假日过后,该电商公司的业务负载明显回落,需及时、自动减少云主机进行缩容,避免资源浪费。

  • 弹性自愈:

    为保障该电商公司核心业务的正常运作,要求处于健康运行的云主机数量不能低于某个阈值。

补充说明

弹性扩容触发条件:
  • 伸缩组内云主机负载超过阈值时触发弹性扩容
    • 若伸缩组处于冷却时间内,则不执行弹性扩容。
    • 若伸缩组内云主机数量已达上限,则不再新增云主机。
    • 伸缩组内云主机的数量不会大于最大云主机数量。
  • 伸缩组内云主机数量低于最小云主机数量时触发弹性扩容
    • 若伸缩组内云主机数量已达上限,则不再新增云主机。
    • 伸缩组内云主机的数量不会大于最大云主机数量。
弹性缩容触发条件:
  • 伸缩组内云主机负载低于阈值时触发弹性缩容
    • 若伸缩组处于冷却时间内,则不执行弹性缩容。
    • 若伸缩组内云主机数量已达下限,则不再减少云主机。
    • 伸缩组内云主机的数量不会小于最小云主机数量。
  • 伸缩组内云主机数量高于最大云主机数量时触发弹性缩容
    • 若伸缩组内云主机数量已达下限,则不再减少云主机。
    • 伸缩组内云主机的数量不会小于最小云主机数量。
弹性自愈触发条件:云主机为不健康状态
  • 云平台将删除不健康的云主机,若删除后伸缩组内云主机数量小于最小云主机数量,则执行弹性扩容策略,自动添加云主机。
关于弹性伸缩组,提供以下全局设置:
  • 当伸缩组使用负载均衡健康检查机制时,可设置云主机在负载均衡中健康状态检查的时间间隔。

    设置方法:进入设置 > 全局设置 > 高级设置 > 网络 > 负载均衡,设置负载均衡弹性伸缩组健康检查间隔即可,默认为10,单位为秒,最小值不能低于10秒,最大值不能高于1000秒。

  • 当伸缩组使用负载均衡健康检查机制时,可设置云主机在负载均衡中健康状态检查的线程数。

    设置方法:进入设置 > 全局设置 > 高级设置 > 网络 > 负载均衡,设置负载均衡弹性伸缩组健康检查线程数即可,默认为10,最小值不能低于10线程,最大值不能高于1000线程。

  • 当伸缩组使用云主机健康检查机制时,可设置删除组内不健康云主机的时间间隔。

    设置方法:进入设置 > 全局设置 > 高级设置 > 云资源池 > 弹性伸缩,设置组内不健康实例删除间隔即可,默认为30,单位为秒,最小值不能低于10秒,最大值不能高于1000秒。

  • 当伸缩组使用云主机健康检查机制时,可设置删除组内不健康云主机的线程数。

    设置方法:进入设置 > 全局设置 > 高级设置 > 云资源池 > 弹性伸缩,设置组内不健康实例删除线程数即可,默认为10,最小值不能低于10线程,最大值不能高于1000线程。

  • 可设置伸缩组内云主机数量检查的时间间隔。

    设置方法:进入设置 > 全局设置 > 高级设置 > 云资源池 > 弹性伸缩,设置组内实例数量检查间隔即可,默认为20,单位为秒,最小值不能低于10秒,最大值不能高于1000秒。

注意事项

  • 若弹性伸缩组重复执行伸缩策略,如不断创建和删除云主机,可能为以下原因:
    • 新创建的云主机无法在容忍时间内达到健康状态,云平台触发弹性自愈策略,删除不健康的云主机并重新创建,造成循环,需检查云主机健康检查策略或更改健康检查机制。
    • 缩容阈值或扩容阈值设置不合理。例如:设置触发条件为CPU低于40%缩容,CPU高于45%扩容,若伸缩组只有一台云主机,组内云主机平均CPU负载为60%,触发扩容后增加至两台云主机,组内云主机平均CPU负载降为30%,造成循环,需设置扩容缩容策略至合理的阈值范围。
  • 若伸缩组未执行伸缩策略,但不断触发报警,可能为以下原因:
    • 最大云主机数量和扩容触发条件设置不合理,当伸缩组云主机数量已达上限,组内云主机平均负载仍然高于扩容阈值,则不断触发报警,需设置最大云主机数量和扩容触发条件至合理的阈值范围。
  • 弹性伸缩组内云主机上运行的业务应用必须无状态并且可横向扩展。
  • 弹性伸缩会自动释放云主机,建议不要对弹性伸缩组内云主机手动挂载云盘、网卡、安全组等。
    Note: 若组内云主机保存有状态信息,相关数据将会丢失。
  • 弹性伸缩组无法纵向扩展,即:无法自动扩缩云主机的计算规格、网络带宽等配置。
  • 若需要修改外部监控触发条目为内部监控使用条目,请删除弹性伸缩组并重新创建。

创建弹性伸缩组

ZStack Cloud主菜单,点击资源中心 > 云资源池 > 资源服务 > 弹性伸缩组,进入弹性伸缩组界面。点击创建弹性伸缩组,弹出创建弹性伸缩组界面。

创建弹性伸缩组分为以下三步:
  1. 基础配置。
    可参考以下示例输入相应内容:
    • 区域:显示当前区域
    • 伸缩组名称:设置弹性伸缩组名称。命名规则:长度限制1~128字符,输入内容只能包含中文汉字、英文字母、数字、空格和以下7种英文字符 - _ . ( ) : + 且不支持以空格开头或结尾
    • 简介:可选项,可留空不填
    • 起始云主机数量:设置起始云主机数量
      • 初次创建伸缩组时组内云主机数为设置的初始值。
      • 需输入整数,单位:台,取值范围:1~1000,且需在最小云主机数量与最大云主机数量之间,请结合实际情况设置。
    • 最小云主机数量:设置最小云主机数量
      • 弹性缩容时组内云主机数不能低于设置的最小值。
      • 需输入整数,单位:台,取值范围:1~1000,请结合实际情况设置。
    • 最大云主机数量:设置最大云主机数量
      • 弹性扩容时组内云主机数不能高于设置的最大值。
      • 需输入整数,单位:台,取值范围:1~1000,请结合实际情况设置。
    • 若选择配置负载均衡功能(推荐):
      • 负载均衡:选择某一负载均衡器。
        • 需提前创建负载均衡器,并绑定一个或多个监听器。
      • 监听器:选择负载均衡器后,必须选择监听器。
        • 待选列表显示了该负载均衡器绑定的全部监听器。
        • 若选多个监听器,将分别通过不同端口对同一组云主机进行监听。
      • 网络:选择三层网络,用于创建云主机。
        • 若未使用负载均衡服务,支持选择VPC网络和扁平网络。其中,VPC网络需加载到VPC路由器。
        • 若使用负载均衡服务,所选网络必须包含在负载均衡的后端网络中。
      • 健康检查方式:建议选择负载均衡。
        • 云主机:实时检查云主机健康状态,若检测到云主机处于不健康状态(包括:停止状态、未知状态、已删除状态),将自动移除不健康云主机并创建新的云主机,确保组内健康云主机数不低于设置的最小值。
        • 负载均衡:负载均衡器自带的健康检查机制。
      • 健康检查宽限时间:选择负载均衡健康检查后,必须设置健康检查宽限时间。
        • 健康检查宽限时间:弹性伸缩组内云主机创建启动后的一段时间,在该时间内,云主机相关应用服务可能仍在启动中,弹性伸缩组不进行负载均衡健康检查,超过该时间,将基于负载均衡健康检查机制监控云主机健康状态。
        • 需输入大于10秒的整数,单位:秒/分/小时,请结合实际情况设置。
    • 若选择不配置负载均衡功能:
      • 负载均衡器:留空不选。
      • 网络:选择三层私有网络。
        Note: 目前支持VPC网络和扁平网络场景的云主机弹性伸缩。
      • 健康检查方式
        • 云主机:实时检查云主机健康状态,若检测到云主机处于不健康状态(包括:停止状态、未知状态、已删除状态),将自动移除不健康云主机并创建新的云主机,确保组内健康云主机数不低于设置的最小值。
    • 立即启用:选择是否创建后立即启用弹性伸缩组,默认不立即启用。
    图 1所示:
    图 1. 基础配置


  2. 伸缩云主机配置
    可参考以下示例输入相应内容:
    • 云主机名称:设置云主机名称
      • 组内云主机统一命名规则:asg-伸缩组名称-云主机名称-云主机UUID前5位,其中asg是autoscaling group的缩写。
    • 云主机简介:可选项,可留空不填
    • 计算规格:选择云主机的计算规格
    • 镜像:选择创建云主机的镜像
      Note:
      • 云主机镜像目前支持添加qcow2格式和raw格式。
      • 如需使用内部监控条目,请选择已安装agent的镜像,或使用User Data脚本方式手动安装agent。
      • 创建完成后修改镜像,新镜像仅对后续新生成的云主机生效,原有云主机镜像不变。
    • 根云盘规格:可选项,用于定义根云盘容量、磁盘带宽等信息。
      • 若不选择根云盘规格,根云盘规格默认与所选镜像的容量保持一致。
    • 三层网络:显示已选择的三层网络
    • 高级设置
      • 数据云盘规格:选择数据云盘规格,可为云主机直接创建并挂载数据云盘。
      • 云主机调度组:可选项,可将云主机加入云主机调度组
        • 一个云主机仅可以加入一个云主机调度组。加入后,云主机将按照调度组所关联的调度策略进行分配物理机。
        • 云主机调度组支持绑定的调度策略包括以下四种类型:互斥云主机、聚集云主机、云主机互斥物理机、云主机亲和物理机。
      • 安全组:选择安全组,组内云主机将共享相同的安全组规则。
      • 控制台密码:设置控制台密码(VNC密码),长度为6-18位。
      • SSH 公钥:注入SSH公钥,云主机可SSH免密登录。
        • SSH公钥注入需镜像提前安装cloud-init,且cloud-init推荐版本为:0.7.9、17.1、19.4、19.4以后版本。
      • User Data:导入User Data,通过上传自定义的参数或脚本,对云主机做定制化配置或完成特定任务。
        • Linux云主机导入User Data,云主机镜像需提前安装cloud-init。
          Linux云主机导入User Data样例如下:
          #cloud-config
          users:
           - name: test
             shell: /bin/bash
             groups: users
             sudo: ['ALL=(ALL) NOPASSWD:ALL']
             ssh-authorized-keys:
                 - ssh-rsa AAAAB3NzaC1LXCJfjroD1lT root@10-0-0-18
          bootcmd:
           - mkdir /tmp/temp 
          write_files:
           - path: /tmp/Cloud_config
             content: |
                 Hello,world!
             permissions: '0755'
          fqdn: Perf-test
          disable_root: false
          ssh_pwauth: yes
          chpasswd:
            list: |
                root:word
            expire: False
          runcmd:
           - echo ls -l / >/root/list.sh
          上述样例脚本实现以下功能:
          1. 创建云主机时,创建用户test,使用ssh-key。
          2. 开机写入文件/etc/hosts,创建/tmp/temp目录,并创建文件写入内容。
          3. 设置hostname,开启root用户,允许ssh密码登录,修改root密码。
          4. 执行echo ls -l /命令。
        • Windows云主机导入User Data,云主机镜像需提前安装Cloudbase-Init,具体安装方法可参考Cloudbase官方文档
          Windows云主机导入User Data样例如下:
          #cloud-config
          write_files:
             -   encoding: b64
                 content: NDI=
                 path: C:\b64
                 permissions: '0644'
             -   encoding: base64
                 content: NDI=
                 path: C:\b64_1
                 permissions: '0644'
             -   encoding: gzip
                 content: !!binary |
                     H4sIAGUfoFQC/zMxAgCIsCQyAgAAAA==
                 path: C:\gzip
                 permissions: '0644'

          上述样例脚本实现以下功能:云主机启动过程中,在c盘下创建b64b64_1gzip三个文件。

        Note: 使用User Data时,若一个二层网络下有多个三层网络,且这些三层网络属于同一个CIDR,仅第一个三层网络的UserData工作,因此会导致其他网络下的云主机内部监控无法正常工作。
    图 2所示:
    图 2. 伸缩云主机配置


    Note: 若将模板配置中的资源删除(例如计算规格、镜像、网络等),将导致弹性伸缩组创建失败。
  3. 伸缩策略配置。
    设置伸缩策略配置有资源策略与周期策略两种策略类型:
    • 资源策略:以资源使用率为标准配置扩容策略与缩容策略,适用于无法预测的用户业务变化,实现自适应的云主机扩容及缩容
      • 触发条目:设置触发条目,包括:
        • 云主机内存平均使用率:弹性伸缩组内单个云主机内存使用率之和/弹性伸缩组内云主机总数量。
        • 云主机CPU平均使用率:弹性伸缩组内单个云主机CPU使用率之和/弹性伸缩组内云主机总数量。
        • 云主机内存平均使用率(需安装agent):弹性伸缩组内单个云主机内存使用率之和/弹性伸缩组内云主机总数量。
        • 云主机CPU平均使用率(需安装agent):弹性伸缩组内单个云主机CPU使用率之和/弹性伸缩组内云主机总数量。
        Note:
        • 推荐使用agent内部监控监测云主机内存平均使用率,数据更为准确。
        • 若选择需安装内部监控agent的触发条目,请选择已安装agent的镜像。
        • Linux云主机支持使用User Data脚本方式手动安装agent,请参考本章节User Data部分内容。
        • 若未安装agent内部监控,仍然选择需安装agent的触发条目,则弹性伸缩组无法生效。
      • 扩容策略:
        • 触发规则:设置触发条件,可选择设置:大于某值、大于等于某值,以及阈值持续时间。
          • 使用率需输入1~100的整数,单位:%。
          • 持续时间需输入大于0的整数,单位:秒/分/小时。
        • 增加策略:满足扩容触发规则时,允许增加的云主机数量。
          Note: 弹性伸缩组每次扩容最小允许增加1台云主机,该数值设置过大可能导致扩容活动失败。
        • 冷却时间:设置冷却时间。
          • 冷却时间:弹性伸缩组执行完成一次伸缩活动后的一段时间,在该时间内,弹性伸缩组处于锁定状态,不执行其它伸缩活动。
          • 需输入大于0的整数,单位:秒/分。
      • 缩容策略:
        • 在业务下降时,弹性伸缩组自动减少云主机进行缩容,避免资源浪费。
        • 通过设置监控报警机制触发弹性缩容。

          例如,当监测到弹性伸缩组内全部云主机的平均内存使用率在一段时间内持续低于20%,将自动移除合适数量的云主机,使弹性伸缩组重新达到合理的负载均衡。

        配置缩容策略,可参考以下示例输入相应内容:
        • 触发规则:设置触发条件,可选择设置:大于某值、大于等于某值,以及阈值持续时间。
          • 使用率需输入1~100的整数,单位:%,且不能与扩容策略触发条件冲突。
          • 持续时间需输入大于0的整数,单位:秒/分/小时。
        • 移除策略:选择满足缩容触发规则时,减少的云主机数量及策略,移除策略包括:
          • 最新创建的云主机(默认):当弹性伸缩组开始执行缩容活动时,将从最新一次创建的云主机开始逐台移除。
          • 最早创建的云主机:当弹性伸缩组开始执行缩容活动时,将从最早创建的云主机开始逐台移除。
          • CPU利用率最低的云主机:当弹性伸缩组开始执行缩容活动时,将从CPU利用率最低的云主机开始逐台移除。
          • 内存利用率最低的云主机:当弹性伸缩组开始执行缩容活动时,将从内存利用率最低的云主机开始逐台移除。
          Note: 弹性伸缩组每次缩容最小允许减少1台云主机,该数值设置过大可能导致缩容活动失败。
        • 冷却时间:设置冷却时间。
          • 冷却时间:弹性伸缩组执行完成一次伸缩活动后的一段时间,在该时间内,弹性伸缩组处于锁定状态,不执行其它伸缩活动。
          • 需输入大于0的整数,单位:秒/分。
      • 报警通知:弹性伸缩组支持配置监控报警监控报警机制触发弹性伸缩,选择是否使用报警通知,默认不使用。
        • 若使用,必须指定通知对象
          通知对象:指定一个或多个通知对象
          • 可选择系统类型接收端(默认提供),也可选择自定义类型接收端,包括邮箱/钉钉/HTTP应用/短信/Microsoft Teams。
    • 周期策略:周期性的对资源进行扩容及缩容,适用于可预测的用户业务变化,云主机定时扩容或缩容
      • 扩容策略:
        • 扩容周期:选择扩容周期,可按月扩容、按周扩容、按天扩容、按小时扩容、按分钟扩容
        • 执行时间:选择按月、按周或按天扩容,可设置扩容任务执行时间。
        • 增加策略:每到达扩容时间点时,允许增加的云主机数量。
          Note: 弹性伸缩组每次扩容最小允许增加1台云主机,该数值设置过大可能导致扩容活动失败。
        • 冷却时间:设置冷却时间。
          • 冷却时间:弹性伸缩组执行完成一次伸缩活动后的一段时间,在该时间内,弹性伸缩组处于锁定状态,不执行其它伸缩活动。
          • 需输入大于0的整数,单位:秒/分。
        • 定时生效:扩容任务从定时生效时间开始,按照已设置的扩容周期进行云主机扩容。
          Note: 若选择按月、按周或按天扩容,支持设置定时生效时间。
      • 缩容策略:
        • 缩容周期:选择缩容周期,可按月缩容、按周缩容、按天缩容、按小时缩容、按分钟缩容
        • 执行时间:选择按月、按周或按天缩容,可设置缩容任务执行时间。
        • 移除策略:每到达执行时间,减少的云主机数量及策略,移除策略包括:
          • 最新创建的云主机(默认):当弹性伸缩组开始执行缩容活动时,将从最新一次创建的云主机开始逐台移除。
          • 最早创建的云主机:当弹性伸缩组开始执行缩容活动时,将从最早创建的云主机开始逐台移除。
          • CPU利用率最低的云主机:当弹性伸缩组开始执行缩容活动时,将从CPU利用率最低的云主机开始逐台移除。
          • 内存利用率最低的云主机:当弹性伸缩组开始执行缩容活动时,将从内存利用率最低的云主机开始逐台移除。
          Note: 弹性伸缩组每次缩容最小允许减少1台云主机,该数值设置过大可能导致缩容活动失败。
        • 冷却时间:设置冷却时间。
          • 冷却时间:弹性伸缩组执行完成一次伸缩活动后的一段时间,在该时间内,弹性伸缩组处于锁定状态,不执行其它伸缩活动。
          • 需输入大于0的整数,单位:秒/分。
        • 定时生效:缩容任务从定时生效时间开始,按照已设置的缩容周期进行云主机缩容。
          Note: 若选择按月、按周或按天缩容,支持设置定时生效时间。
    图 3所示:
    图 3. 伸缩策略配置


  4. 确认信息

    查看将要创建的弹性伸缩组,支持跳转修改。

    图 4所示:
    图 4. 确认信息


管理弹性伸缩组

ZStack Cloud主菜单,点击资源中心 > 云资源池 > 资源服务 > 弹性伸缩组,进入弹性伸缩组界面。

弹性伸缩组支持以下操作:
操作 描述
创建弹性伸缩组 创建一个新的弹性伸缩组。
编辑 修改弹性伸缩组的名称与简介。
启用弹性伸缩组 将处于停用状态的弹性伸缩组启用。
停用弹性伸缩组 将处于启用状态的弹性伸缩组停用。
加入云主机调度组 将弹性伸缩组内所有云主机加入至云主机调度组中。加入后,云主机调度组绑定的调度策略将对弹性伸缩组内的云主机生效。
移除云主机调度组 将弹性伸缩组内所有云主机从已绑定的云主机调度组中移除。移除后,云主机将不再按照该云主机调度组关联的调度策略进行调度。
修改镜像 修改用于创建弹性伸缩组的镜像。
Note: 修改镜像仅对后续新生成的云主机生效,原有云主机镜像不变。
删除弹性伸缩组 删除弹性伸缩组。