ESS弹性伸缩是阿里云计算ACP考试的必考内容(约占10%),但绝大多数的阿里云用户都没有将ESS弹性伸缩应用到实际项目中去的机会,很多的ACP考生都缺乏对ESS的足够使用经验,对ESS的理解难免存在盲点,ACP考试时在ESS部分的考题丢分甚至是折在这上面的人不在少数。最近正好讲授了一次为期七天的阿里云技术培训,在学员的要求下对ESS的内容专门抽出了一讲来介绍,本着让一次性的工作发挥出更大价值的角度出发,把培训的相关内容再用文字整理出来分享给对ESS感兴趣或者要考ACP的同学。
下面这张来自于阿里云官网的架构图可是说是浓缩了ESS的精华,透过这张图就可以基本上掌握ESS核心的概念了。
- 弹性伸缩,一定要伸缩的,伸缩任务的触发机制有四种,这张图都有了,分别是定时任务触发、自定义任务触发(手动或API调用)、健康检查任务触发(监控服务器是否处于运行状态)、云监控任务触发(根据阿里云监控对CPU、内存、网络等ECS服务状态的监控结果进行触发)。
- 假如因为某种任务触发了弹性伸缩动作,伸缩活动执行程序就会根据伸缩组中的伸缩规则和伸缩配置进行伸缩活动,这里的关键知识点就是伸缩规则(加一台、减一台、调整到N台这些)和伸缩配置(镜像、实例类型等)这些都是从属于伸缩组的概念,而上面的四种任务触发机制是独立于伸缩组之外的。
- 创建了伸缩活动,就会涉及到冷却时间这个概念,在ESS中冷却时间是指成功执行伸缩活动后的一段锁定时间,可以通过两种方式来 设置冷却时间,一种是在伸缩组中指定一个默认的冷却时间,另一种是在伸缩规则中指定该规则触发后的冷却时间,但也可以不指定而直接使用伸缩组中的默认时间。针对冷却时间这个概念,很多人不知道的是:手动执行任务、定时任务、健康检查任务触发的伸缩活动可以不理会冷却时间而直接执行。
- 伸缩活动除了对伸缩组内的ECS数量产生影响,还会自动添加RDS白名单和SLB的后端服务器,对应的RDS和SLB在创建伸缩组的时候指定,并且RDS和SLB是可选的,ESS最主要的处理对象就是ECS实例,添加和减少ECS实例的数量要满足伸缩组有关最大实例数和最小实例数的限制,这里有一个例外是健康检查任务触发的伸缩活动中,移除不健康ECS实例,不受最小实例数限制,在移除不健康ECS实例后,有可能导致伸缩组的总实例数少于最小实例数,此时伸缩弹性服务会自动创建所需数量的ECS实例使得伸缩组的总实例数满足最小实例数设定。
以下是ESS相关概念之间的关系图示:
在掌握了这些相关概念之后,ESS弹性伸缩的配置使用流程如下图所示:
- 第一步创建伸缩组,必选的配置有最大、最小实例数、将来创建ECS实例所使用的专有网络、虚拟交换机,可选的配置有关联的RDS和SLB。
- 第二步创建伸缩配置,设置伸缩活动中使用的ECS的实例类型、规格、系统镜像,最后还要让伸缩配置生效,在一个ESS伸缩组中可以同时有十个伸缩配置,但只能有一个是生效的配置。
- 第三步生效伸缩组,伸缩组在创建完成后并没有直接生效,而是需要手动进行生效操作,在将伸缩组生效后将根据最小实例数自动生成所需数量的ECS并加入到伸缩组中,生成的ECS实例的类型、规格、镜像与当前生效的伸缩配置一致。在这一步还可以手工添加其他ECS实例到伸缩组,也可以将不需要的ECS从伸缩组中移除。
- 第四步创建伸缩规则,有简单规则和其他类型的规则可选,简单规则就是增加或减少以及设置到指定的数量,目标追踪规则与其说是伸缩规则倒不如说是一种报警任务,因为创建目标追踪规则后将自动创建和关联报警任务,当伸缩组的监控指标低于追踪的目标值将自动减少ECS实例,当伸缩组的监控指标高于追踪的目标值将自动增加ECS实例。
- 第五步创建触发任务,可以创建定时任务和报警任务,定时任务只需要设定在某个时间,对某个伸缩组执行一条伸缩规则。报警任务则可以将伸缩组整体的某个监控指标(例如CPU、内存、网络流量等)作为判断依据,设置大于或者小于某个值后执行增加或者减少ECS实例数的伸缩组规则。
除了以上这些关于ESS的概念和使用流程之外,还需要掌握以下这些知识要点:
- 假如手工将提前创建的包年包月的ECS移入到了伸缩组中,自然不希望ESS将这些实例移除,可以确认下伸缩组的移除策略的第一条是否是最早伸缩配置对应的实例(OldestScalingConfiguration),并且为了保证移入的ECS实例数量满足伸缩组的最小实例数要求,还需要确认伸缩组的最小实例数大于手工移入的实例数。假如这些手工加入伸缩组的ECS实例的运行出现了故障,还是会被ESS的健康检查机制所发现,一旦发现了有实例故障不论是自动加入的ECS实例还是手工加入的实例,ESS首先会尝试对故障的ECS进行重启,重启成功则实例可以继续留在伸缩组,重启失败的实例将被移除。
- 除了通过移除策略保证手工添加的ECS不被移除,还可以通过将这些手工移入的ECS实例的状态设置为保护中,处于保护中的ECS实例将不再被ESS的监控机制跟踪和监控,自然也就不会被自动移除,在关联SLB中的权重也不会发生变化。
- 在ESS中和保护状态类似的ECS状态是备用中,处于备用状态的ECS实例也不会被ESS的监控机制跟踪和移除,但在关联SLB中的权重会变成0,也就是不会被分配任何流量。
- 除了备用中和保护中,ESS中的ECS实例还有一种状态叫做挂起中,某些ECS实例需要关联到Redis等其他的阿里云服务器,而ESS目前还不支持对这些服务的自动操作,就可以通过设置一个生命周期挂钩将伸缩事件关联到某个消息主题,通过订阅该消息的管理程序来自动完成Redis服务的关联操作。
我要总结的ESS知识点就这些了,希望对你有用。