上个月帮客户做电商活动的支撑,预估流量是平时的10倍,要是手动扩容,不仅慢,还容易漏配,活动开始前半小时才发现扩容不够,差点出事故。后来用腾讯云的弹性伸缩(AS)做了自动扩缩容,整个活动期间零故障,成本比手动扩容省了45%。
今天就手把手教大家配置腾讯云弹性伸缩,所有步骤和代码都可以直接用。
1. 腾讯云弹性伸缩核心概念:扩缩容组、告警策略、冷却时间
弹性伸缩的核心逻辑是:根据配置的告警规则,自动增加或减少CVM实例的数量,不需要手动干预。
几个核心概念先搞懂:
– 启动配置:创建CVM实例的模板,包含镜像、机型、系统盘、安全组等配置
– 扩缩容组:一组CVM实例的集合,弹性伸缩的操作对象
– 告警触发策略:触发扩缩容的规则,比如CPU利用率>80%扩容,<30%缩容
– 冷却时间:单次扩缩容完成后,等待一段时间再触发下一次,避免频繁扩缩容
2. 实战准备:创建CVM镜像与启动配置
首先我们需要一个定制化的CVM镜像,里面已经装好了应用和运行环境,扩容的时候直接用这个镜像创建实例,不需要手动部署。
步骤1:创建CVM实例并制作镜像
- 创建一个按量计费的CVM实例,安装好应用依赖、配置好环境变量
- 运行以下Shell脚本,清理实例的唯一标识,避免镜像创建的实例冲突:
#!/bin/bash
# 清理实例唯一标识
rm -rf /var/lib/cloud/instances/*
rm -rf /var/lib/cloud/instance
# 清理SSH host key
rm -f /etc/ssh/ssh_host_*
# 清理历史日志
rm -f /var/log/*.log
- 到腾讯云控制台,找到这个CVM实例,点击「更多」-「镜像与快照」-「创建自定义镜像」,等待镜像制作完成。
步骤2:创建启动配置
到腾讯云控制台「弹性伸缩」-「启动配置」,点击「新建」,选择刚才制作的镜像,配置机型、系统盘、安全组、密钥等,保存即可。
3. 3步配置弹性伸缩组(附API代码)
第一步:创建扩缩容组
到「弹性伸缩」-「扩缩容组」,点击「新建」,配置以下内容:
– 名称:比如「电商活动扩容组」
– 启动配置:选择刚才创建的启动配置
– 子网:选择和你的业务VPC相同的子网
– 最小实例数:2(保证最低有2个实例运行)
– 最大实例数:20(最多扩容到20个实例)
– 期望实例数:2(初始实例数)
第二步:配置告警触发策略
在扩缩容组的「告警触发策略」标签页,点击「新建」:
1. 扩容策略:CPU利用率>80%,持续1分钟,增加2个实例,冷却时间300秒
2. 缩容策略:CPU利用率<30%,持续3分钟,减少1个实例,冷却时间300秒
如果你需要用API创建策略,可以用以下Python代码(需要先安装腾讯云SDK:pip install tencentcloud-sdk-python):
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.as.v20180419 import as_client, models
import os
# 替换为你的腾讯云SecretId和SecretKey
cred = credential.Credential(os.environ.get("TENCENTCLOUD_SECRET_ID"), os.environ.get("TENCENTCLOUD_SECRET_KEY"))
httpProfile = HttpProfile()
httpProfile.endpoint = "as.tencentcloudapi.com"
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = as_client.AsClient(cred, "ap-guangzhou", clientProfile)
# 创建扩容策略
req = models.CreateScalingPolicyRequest()
req.AutoScalingGroupId = "asg-xxxxxxxx" # 你的扩缩容组ID
req.ScalingPolicyName = "CPU大于80%扩容"
req.ScalingPolicyType = "SIMPLE"
req.AlarmPolicy = {
"MetricName": "CpuUsage",
"ComparisonOperator": ">",
"Threshold": 80,
"Period": 60,
"ContinuousTime": 1,
"Statistic": "AVG"
}
req.ScalingAdjustment = 2 # 增加2个实例
req.Cooldown = 300
resp = client.CreateScalingPolicy(req)
print(resp.to_json_string())
第三步:配置实例健康检查
在扩缩容组的「实例管理」标签页,开启实例健康检查,自动替换不健康的实例,保证业务高可用。
4. 效果验证:模拟流量洪峰测试
我们用wrk压测工具模拟流量,逐步增加并发量,可以看到:
– 当CPU利用率超过80%时,1分钟内自动扩容2个实例
– 当CPU利用率低于30%时,3分钟后自动缩容1个实例
– 整个过程不需要手动干预,业务零中断
成本对比:如果是手动扩容,需要按最高流量预留实例,活动期间的成本是1200元/天;用弹性伸缩的话,按实际用量计费,成本是660元/天,省了45%。
5. 成本优化技巧:按需实例+竞价实例混合部署
腾讯云的扩缩容组支持混合使用按需实例和竞价实例,竞价实例的成本是按需实例的30%,我们可以配置80%的实例用竞价实例,20%用按需实例,保证稳定性的同时进一步降低成本,混合部署的成本可以再降40%。
👤 作者简介
一枚在大中原腹地(河南)卖公有云的从业者,主营腾讯云/阿里云/火山云,曾踩坑无数,现专注AI大模型应用落地。关注公众号「公有云cloud」,围观AI前沿动态~
博客:y1cloud.cn
