本文介绍如何使用弹性伸缩同时管理阿里云实例和托管实例(非阿里云实例)。您可以通过云助手将非阿里云服务器注册为阿里云托管实例,并在托管实例上安装云监控Agent,然后将该托管实例添加到伸缩组中,便可以对伸缩组中的阿里云实例和托管实例进行统一监控,根据监控指标的变化自动扩缩容阿里云实例。
前提条件
已注册阿里云账号。如果还未注册,请先注册阿里云账号。
已准备能够访问公网的非阿里云服务器。
应用场景
本文适用于非阿里云服务器上运行着一些存在明显峰谷波动的无状态业务,并且很难根据业务的波动自行进行扩缩容的场景。
基于以上场景,您可以借助云助手、云监控以及弹性伸缩功能,完成将非阿里云的云服务器注册为阿里云托管实例并安装云监控的Agent,然后将该托管实例添加到伸缩组中。弹性伸缩可以对伸缩组中的阿里云实例和托管实例进行统一监控,根据监控指标的变化自动扩缩容阿里云实例,帮助您快速应对业务的波动。其具有以下优点:
业务高峰时,快速自动扩容阿里云ECS实例,承载业务流量。
业务低峰时,快速自动缩容阿里云ECS实例,帮助您节省成本。
概念介绍
本文涉及的主要概念如下所示:
名称 | 说明 | 相关链接 |
托管实例 | 您可以将非阿里云服务器通过云助手注册为阿里云托管实例。注册完成后,该服务器即可以使用阿里云提供的多种在线服务(例如云助手、弹性伸缩、系统运维管理和云效等服务)。 | |
云助手Agent | 安装在阿里云服务器或非阿里云服务器中的轻量级插件,使用云助手发送到阿里云实例或非阿里云实例上的命令都会通过云助手Agent完成。 | |
云监控Agent | 无论您的主机是云服务器ECS,还是其他云厂商的虚拟机或物理机,通过在主机上安装云监控Agent,云监控都可以为您提供主机的系统监控服务。 |
操作步骤
步骤一:注册非阿里云实例为阿里云托管实例
在注册托管实例前,请您提前准备好非阿里云服务器,本示例以注册3台非阿里云服务器作为阿里云托管实例为例,更多信息,请参见阿里云托管实例。
创建注册码。
在ECS管理控制台上创建托管实例的注册码,生成安装脚本并保存到本地。具体操作,请参见步骤一:创建注册码。安装脚本示例(例如
Linux(.deb)
类型)如下:# 下载云助手客户端deb包。 sudo wget https://aliyun-client-assist.oss-accelerate.aliyuncs.com/linux/aliyun_assist_latest.deb # 安装最新版本云助手客户端。 sudo dpkg -i aliyun_assist_latest.deb # 注册托管实例。 sudo aliyun-service --register --RegionId "cn-hangzhou" \ --ActivationCode "a-hz011wm7BNH3JnTMyx22****VJ6d" \ --ActivationId "A4C23294-D8E9-5591-87A2-CCA2****2AC9"
安装云助手Agent并注册托管实例。
获取安装脚本后,您需要在3台非阿里云服务器上安装云助手Agent并将其注册为阿里云托管实例。
登录非阿里云服务器。
在非阿里云服务器上,直接粘贴上述安装脚本,运行该脚本安装云助手Agent并注册托管实例(注册成功后会自动为该实例分配一个ID)。
查看托管实例。
托管实例注册成功后,在ECS管理控制台的ECS云助手页面的托管实例页签下,查看并记录该托管实例ID。3台托管实例分别命名为Test-01、Test-02、Test-03,如下图所示。
说明阿里云托管实例ID均以
mi-
开头,阿里云ECS实例ID均以i-
开头。
步骤二:安装云监控Agent
关于云监控Agent的更多信息,请参见安装和卸载云监控插件。
登录托管实例。
执行以下命令,安装云监控Agent。
ARGUS_VERSION=3.5.9.11 /bin/bash -c "$(curl -s https://cloudmonitor-agent.oss-cn-hangzhou.aliyuncs.com/Argus/agent_install_necs-1.8.sh)"
执行以下命令,查看云监控Agent状态。
ps aux | grep argusagent | grep -v grep
显示类似如下信息,说明云监控Agent状态正常,即表示已成功安装云监控Agent。
root 12590 0.0 0.1 33440 6924 ? Ss 15:55 0:00 /usr/local/cloudmonitor/bin/argusagent -d root 12592 0.0 0.4 850972 16096 ? Sl 15:44 0:00 /usr/local/cloudmonitor/bin/argusagent
说明在云监控控制台的主机监控页面,您也可以看到该托管实例已安装云监控Agent,例如可以看到托管实例的CPU使用率、内存使用率以及磁盘使用率等情况。
步骤三:将托管实例添加至伸缩组
注意事项
在操作本步骤前,您需要注意以下事项:
您需要根据实际业务需求选择合适的监控指标为伸缩组创建报警任务,更多信息,请参见报警任务概述。
如果伸缩组中存在阿里云实例和托管实例时,报警任务会以伸缩组中当前所有实例的整体监控指标作为报警依据,由于托管实例目前仅支持Agent的监控指标,建议您选择Agent类型的报警指标。
伸缩组不会管理托管实例的生命周期,您只能手动将托管实例从伸缩组中移出,移出后托管实例并不会被释放。
操作步骤
创建伸缩组。
仅ECS类型的伸缩组支持管理托管实例,故本步骤需创建ECS类型伸缩组(例如Scalinggroup_ecs),具体操作,请参见创建伸缩组。
创建并启用伸缩配置。
具体操作,请参见配置伸缩配置(ECS实例)。
启用伸缩组。
具体操作,请参见启用或停用伸缩组。
创建伸缩规则。
本步骤以创建2条简单规则类型的伸缩规则为例,具体操作,请参见创建伸缩规则。
伸缩规则(Add1):表示增加1台ECS实例的扩容伸缩规则。
伸缩规则(Reduce1):表示减少1台ECS实例的缩容伸缩规则。
创建报警任务。
本步骤以(Agent)CPU使用率监控指标为例,创建2条报警任务,确保伸缩组中所有实例的整体CPU平均使用率维持在40%~60%之间,具体操作,请参见配置报警任务。
报警任务(ScaleOutAlarm):报警指标选择(Agent)CPU使用率监控时,监控指标选择Average(平均值)>=60%,报警触发规则选择扩容伸缩规则(Add1)。即当伸缩组中所有实例的整体CPU平均使用率大于60%时,自动触发增加1台ECS实例。
报警任务(ScaleInAlarm):报警指标选择(Agent)CPU使用率监控时,监控指标选择Average(平均值)<= 40%,报警触发规则选择缩容伸缩规则(Reduce1)。即当伸缩组中所有实例的整体CPU平均使用率小于40%时,自动触发减少1台ECS实例。
将3台托管实例手动添加至伸缩组(Scalinggroup_ecs)中。
重要伸缩组中的托管实例只能手动从伸缩组中移出。
在伸缩组(Scalinggroup_ecs)详情页,单击实例列表页签。
单击托管实例页签,然后单击添加托管实例。
在弹出的添加托管实例页面,选择需要托管的实例,然后单击图标。
单击确认添加。
您可以在托管实例页签下查看到已添加的托管实例。
监控验证
场景一:伸缩组仅含3台托管实例且托管实例无负载
如果伸缩组中的当前托管实例没有负载,即托管实例的整体CPU平均使用率小于40%,理论上系统会自动触发报警任务(ScaleInAlarm)导致伸缩组中减少1台实例,但由于伸缩组中仅包含托管实例且该实例只能手动添加和移出,实际会产生如下情况:
例如在22:01~22:07时间段,托管实例的CPU平均使用率小于40%,系统触发的报警任务(ScaleInAlarm)执行异常。
例如在22:01~22:07时间段,实际执行缩容伸缩活动时被拒绝(实例数量并没有减少),您可以单击查看拒绝原因查看详情。
场景二:伸缩组中仅含3台托管实例且托管实例CPU使用率维持在90%左右
通过压测工具(例如lookbusy工具)对伸缩组中的托管实例进行压测时,如果伸缩组中当前3个托管实例的CPU使用率维持在90%左右,即伸缩组中实例的CPU平均使用率大于60%,实际会产生如下情况:
例如在22:14~22:25时间段,托管实例的CPU平均使用率大于60%,系统自动触发报警任务(ScaleOutAlarm)执行成功。
例如在22:14~22:25时间段,执行扩容活动导致伸缩组中新增2台阿里云ECS实例(即由原来的3台增加为5台实例)。待最终稳定后(例如在22:25之后检测CPU平均使用率维持在40%~60%之间),扩容伸缩活动结束。
场景三:对伸缩组中的3台托管实例取消压测
基于场景二,当前伸缩组中有2台阿里云ECS实例和3台托管实例,CPU平均使用率维持在40%~60%之间。如果对伸缩组中的3个托管实例取消压测后,伸缩组整体实例CPU平均使用率小于40%时,理论上系统会自动触发报警任务(ScaleInAlarm)导致伸缩组中减少实例,但由于托管实例只能手动添加和移出,实际会产生如下情况:
例如在22:48~22:54时间段,执行缩容活动导致伸缩组中减少2台阿里云ECS实例(即由原来的5台减少为3台实例)。待最终稳定后(例如在22:55之后检测CPU平均使用率仍然小于40%),由于托管实例只能手动移出,故缩容伸缩活动执行失败。
例如在22:55后,伸缩组中整体实例的CPU平均使用率仍小于40%,系统自动触发报警任务(ScaleInAlarm)减少伸缩组中的实例,但由于伸缩组中只有3台托管实例且该实例只能手动移出,故报警任务执行异常。