概述
ZStack Cloud提供基于负载均衡的云主机弹性伸缩,可根据用户业务的负载变化,按照预定义的策略,自动调整伸缩组内云主机的数量,提高云平台资源的使用效率,降低运维成本,保证业务平稳运行。目前支持KVM云主机的弹性伸缩。
伸缩模式
弹性伸缩组触发机制
- 伸缩组内云主机负载超过阈值时触发弹性扩容
- 若伸缩组处于冷却时间内,则不执行弹性扩容。
- 若伸缩组内云主机数量已达上限,则不再新增云主机。
- 伸缩组内云主机的数量不会大于最大云主机数量。
- 伸缩组内云主机数量低于最小云主机数量时触发弹性扩容
- 若伸缩组内云主机数量已达上限,则不再新增云主机。
- 伸缩组内云主机的数量不会大于最大云主机数量。
- 伸缩组内云主机负载低于阈值时触发弹性缩容
- 若伸缩组处于冷却时间内,则不执行弹性缩容。
- 若伸缩组内云主机数量已达下限,则不再减少云主机。
- 伸缩组内云主机的数量不会小于最小云主机数量。
- 伸缩组内云主机数量高于最大云主机数量时触发弹性缩容
- 若伸缩组内云主机数量已达下限,则不再减少云主机。
- 伸缩组内云主机的数量不会小于最小云主机数量。
- 云平台将删除不健康的云主机,若删除后伸缩组内云主机数量小于最小云主机数量,则执行弹性扩容策略,自动添加云主机。
典型应用场景
- 弹性扩容:
某电商公司在双十一、春节等大型节日期间发起抢红包、秒杀等促销活动,负载激增,需及时、自动增加云主机进行扩容,避免访问延时和资源超负荷运行。
- 弹性缩容:
当节假日过后,该电商公司的业务负载明显回落,需及时、自动减少云主机进行缩容,避免资源浪费。
- 弹性自愈:
为保障该电商公司核心业务的正常运作,要求处于健康运行的云主机数量不能低于某个阈值。
准备工作
admin请提前安装最新版本的ZStack Cloud,并部署完成创建云主机必要的资源。详情可参考《用户手册》的安装部署章节。
本教程将详细介绍弹性伸缩服务的使用方法。
快速使用流程
- 创建弹性伸缩组。
- 管理弹性伸缩组。
弹性伸缩组
弹性伸缩组是一组具有相同应用场景的云主机集合,可根据用户业务变化自动实现弹性伸缩或弹性自愈。
- 创建弹性伸缩组
- 查看弹性伸缩组详情
- 编辑弹性伸缩组
- 启用弹性伸缩组
- 停用弹性伸缩组
- 加入云主机调度组
- 移除云主机调度组
- 修改镜像
- 删除弹性伸缩组
创建弹性伸缩组
在ZStack Cloud主菜单,点击,进入弹性伸缩组界面。点击创建弹性伸缩组,弹出创建弹性伸缩组界面。
- 基础配置。可参考以下示例输入相应内容:
- 区域:显示当前区域
- 伸缩组名称:设置弹性伸缩组名称。命名规则:长度限制1~128字符,输入内容只能包含中文汉字、英文字母、数字、空格和以下7种英文字符
- _ . ( ) : +且不支持以空格开头或结尾 - 简介:可选项,可留空不填
- 起始云主机数量:设置起始云主机数量
- 初次创建伸缩组时组内云主机数为设置的初始值。
- 需输入整数,单位:台,取值范围:1~1000,且需在最小云主机数量与最大云主机数量之间,请结合实际情况设置。
- 最小云主机数量:设置最小云主机数量
- 弹性缩容时组内云主机数不能低于设置的最小值。
- 需输入整数,单位:台,取值范围:1~1000,请结合实际情况设置。
- 最大云主机数量:设置最大云主机数量
- 弹性扩容时组内云主机数不能高于设置的最大值。
- 需输入整数,单位:台,取值范围:1~1000,请结合实际情况设置。
- 若选择配置负载均衡功能(推荐):
- 负载均衡:选择某一负载均衡器。
- 需提前创建负载均衡器,并绑定一个或多个监听器。
- 监听器:选择负载均衡器后,必须选择监听器。
- 待选列表显示了该负载均衡器绑定的全部监听器。
- 若选多个监听器,将分别通过不同端口对同一组云主机进行监听。
- 网络:选择三层网络,用于创建云主机。
- 若未使用负载均衡服务,支持选择VPC网络和扁平网络。其中,VPC网络需加载到VPC路由器。
- 若使用负载均衡服务,所选网络必须包含在负载均衡的后端网络中。
- 健康检查方式:建议选择负载均衡。
- 云主机:实时检查云主机健康状态,若检测到云主机处于不健康状态(包括:停止状态、未知状态、已删除状态),将自动移除不健康云主机并创建新的云主机,确保组内健康云主机数不低于设置的最小值。
- 负载均衡:负载均衡器自带的健康检查机制。
- 健康检查宽限时间:选择负载均衡健康检查后,必须设置健康检查宽限时间。
- 健康检查宽限时间:弹性伸缩组内云主机创建启动后的一段时间,在该时间内,云主机相关应用服务可能仍在启动中,弹性伸缩组不进行负载均衡健康检查,超过该时间,将基于负载均衡健康检查机制监控云主机健康状态。
- 需输入大于10秒的整数,单位:秒/分/小时,请结合实际情况设置。
- 负载均衡:选择某一负载均衡器。
- 若选择不配置负载均衡功能:
- 负载均衡器:留空不选。
- 网络:选择三层私有网络。Note: 目前支持VPC网络和扁平网络场景的云主机弹性伸缩。
- 健康检查方式:
- 云主机:实时检查云主机健康状态,若检测到云主机处于不健康状态(包括:停止状态、未知状态、已删除状态),将自动移除不健康云主机并创建新的云主机,确保组内健康云主机数不低于设置的最小值。
- 立即启用:选择是否创建后立即启用弹性伸缩组,默认不立即启用。
如图 3所示:图 3. 基础配置 
- 伸缩云主机配置可参考以下示例输入相应内容:
- 云主机名称:设置云主机名称
- 组内云主机统一命名规则: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上述样例脚本实现以下功能:- 创建云主机时,创建用户test,使用ssh-key。
- 开机写入文件/etc/hosts,创建/tmp/temp目录,并创建文件写入内容。
- 设置hostname,开启root用户,允许ssh密码登录,修改root密码。
- 执行
命令。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盘下创建b64、b64_1、gzip三个文件。
Note: 使用User Data时,若一个二层网络下有多个三层网络,且这些三层网络属于同一个CIDR,仅第一个三层网络的UserData工作,因此会导致其他网络下的云主机内部监控无法正常工作。 - Linux云主机导入User
Data,云主机镜像需提前安装cloud-init。
如图 4所示:图 4. 伸缩云主机配置 
Note: 若将模板配置中的资源删除(例如计算规格、镜像、网络等),将导致弹性伸缩组创建失败。 - 云主机名称:设置云主机名称
- 伸缩策略配置。设置伸缩策略配置有资源策略与周期策略两种策略类型:
- 资源策略:以资源使用率为标准配置扩容策略与缩容策略,适用于无法预测的用户业务变化,实现自适应的云主机扩容及缩容
- 触发条目:设置触发条目,包括:
- 云主机内存平均使用率:弹性伸缩组内单个云主机内存使用率之和/弹性伸缩组内云主机总数量。
- 云主机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: 若选择按月、按周或按天缩容,支持设置定时生效时间。
- 扩容策略:
如图 5所示:图 5. 伸缩策略配置 
- 资源策略:以资源使用率为标准配置扩容策略与缩容策略,适用于无法预测的用户业务变化,实现自适应的云主机扩容及缩容
- 确认信息
查看将要创建的弹性伸缩组,支持跳转修改。
如图 6所示:图 6. 确认信息 
查看弹性伸缩组详情
- 总览:
展示弹性伸缩组的名称和简介、基本信息(包括:启用状态、云主机数量范围等)、资源模板(弹性伸缩组内云主机的模板配置信息)、伸缩策略(包括:扩容策略、缩容策略)等信息。其中,名称和简介、扩容策略、缩容策略支持修改。
- 云主机:
- 展示弹性伸缩组内当前健康运行的云主机列表。
- 弹性伸缩组基于健康检查机制(推荐负载均衡健康检查)监控云主机的健康状态,若检测到不健康云主机,将自动将其移除并创建新的云主机,确保组内健康云主机数不低于设置的最小值。
- 展示弹性伸缩组的监控状态,包括以下两种
- 采集正常:弹性伸缩组可以正常采集云主机监控数据。
- 数据不足:弹性伸缩组无法正常采集云主机监控数据,可能原因如下:
- 新创建的云主机,采集监控数据需等待一段时间;
- 云主机状态异常,请检查云主机状态。
- 若所选伸缩策略配置的触发条目为“云主机内存平均使用率(需安装agent)”或“云主机CPU平均使用率(需安装agent)”,则需在云主机内部安装agent,否则将无法采集到监控数据。
- 伸缩记录:展示弹性伸缩组进行伸缩活动的记录信息,可调整合适的时间段进行搜索。
- 审计:查看此弹性伸缩组的相关操作。
编辑弹性伸缩组
修改弹性伸缩组的名称与简介。
启用/停用弹性伸缩组
- 启用弹性伸缩组:将已停用的弹性伸缩组启用。
- 停用弹性伸缩组:将弹性伸缩组停用。Note:
- 若弹性伸缩组已触发伸缩活动,停用弹性伸缩组,正在执行的伸缩活动不受影响,该伸缩活动执行完成后,将停止触发新的伸缩活动;
- 若弹性伸缩组处于检测中,停用弹性伸缩组,监控报警/健康检查机制将立即停止检测弹性伸缩组,并停止触发新的伸缩活动。
加入/移除云主机调度组
- 加入云主机调度组:将弹性伸缩组内所有云主机加入至云主机调度组中。加入后,云主机调度组绑定的调度策略将对弹性伸缩组内的云主机生效。
- 移除云主机调度组:将弹性伸缩组内所有云主机从已绑定的云主机调度组中移除。移除后,云主机将不再按照该云主机调度组关联的调度策略进行调度。
修改镜像
删除弹性伸缩组
删除弹性伸缩组,将一并删除组内全部云主机,请谨慎操作。
补充说明
- 弹性伸缩组内云主机上运行的业务应用必须无状态并且可横向扩展。
- 弹性伸缩会自动释放云主机,建议不要对弹性伸缩组内云主机手动挂载云盘、网卡、安全组等,若组内云主机保存有状态信息,相关数据将会丢失。
- 弹性伸缩组无法纵向扩展,即:无法自动扩缩云主机的计算规格、网络带宽等配置。
- 若需要修改外部监控触发条目为内部监控使用条目,请删除弹性伸缩组并重新创建。
- 关于弹性伸缩服务,提供以下全局设置:
- 当弹性伸缩组使用负载均衡健康检查机制时,可设置云主机在负载均衡中健康状态检查的时间间隔。
设置方法:进入,设置负载均衡弹性伸缩组健康检查间隔即可,默认为10,单位为秒,用于设置弹性伸缩组在负载均衡中健康状态检查的时间间隔,最小值不能低于10秒,最大值不能高于1000秒。
- 当弹性伸缩组使用负载均衡健康检查机制时,可设置云主机在负载均衡中健康状态检查的线程数。
设置方法:进入,设置负载均衡弹性伸缩组健康检查线程数即可,默认为10,单位为线程,取值范围[10,1000]的整数,用于设置弹性伸缩组在负载均衡中健康状态检查的线程数。
- 当弹性伸缩组使用云主机健康检查机制时,可设置删除组内不健康云主机的时间间隔。
设置方法:进入,设置组内不健康实例删除间隔即可,默认为30,单位为秒,取值范围[10,1000]的整数,用于设置删除弹性伸缩组内不健康实例的时间间隔。
- 当弹性伸缩组使用云主机健康检查机制时,可设置删除组内不健康云主机的线程数。
设置方法:进入,设置组内不健康实例删除线程数即可,默认为10,单位为线程,取值范围[10,1000]的整数,用于设置删除弹性伸缩组内不健康实例的线程数。
- 可设置弹性伸缩组内云主机数量检查的时间间隔。
设置方法:进入,设置组内实例数量检查间隔即可,默认为20,单位为秒,取值范围[10,1000]的整数,用于设置检查弹性伸缩组内实例数量的时间间隔。
- 当弹性伸缩组使用负载均衡健康检查机制时,可设置云主机在负载均衡中健康状态检查的时间间隔。
注意事项
- 若弹性伸缩组重复执行伸缩策略,如不断创建和删除云主机,可能为以下原因:
- 新创建的云主机无法在容忍时间内达到健康状态,云平台触发弹性自愈策略,删除不健康的云主机并重新创建,造成循环,需检查云主机健康检查策略或更改健康检查机制。
- 缩容阈值或扩容阈值设置不合理。例如:设置触发条件为CPU低于40%缩容,CPU高于45%扩容,若弹性伸缩组只有一台云主机,组内云主机平均CPU负载为60%,触发扩容后增加至两台云主机,组内云主机平均CPU负载降为30%,造成循环,需设置扩容缩容策略至合理的阈值范围。
- 若弹性伸缩组未执行伸缩策略,但不断触发报警,可能为以下原因:
- 最大云主机数量和扩容触发条件设置不合理,当弹性伸缩组云主机数量已达上限,组内云主机平均负载仍然高于扩容阈值,则不断触发报警,需设置最大云主机数量和扩容触发条件至合理的阈值范围。
典型场景实践
背景信息
场景设定:假定某电商公司已部署一套最新的ZStack Cloud环境,由于业务需要,现要部署一套业务云主机,并使用弹性伸缩组提供基于负载均衡的云主机弹性伸缩服务。
本场景主要介绍云主机内部监控触发弹性伸缩。
- 创建弹性伸缩组。
- 功能验证:弹性自愈、弹性扩容、弹性缩容。
操作步骤
-
创建弹性伸缩组。
在ZStack Cloud主菜单,点击,进入弹性伸缩组界面,点击创建弹性伸缩组,弹出创建弹性伸缩组界面。
创建弹性伸缩组分为以下四步:
查看将要创建的弹性伸缩组,支持跳转修改。
如图 10所示:图 10. 确认信息 
- 功能验证。





