开发者学堂课程【企业运维之弹性计算原理与实践:【视频】-《CMS&ESS》】学习笔记(一),与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1039/detail/15319
【视频】-《CMS&ESS》
内容介绍:
一、CMS
二、ESS
三、演示
一、CMS
1.课程简介
本节课主要讲解ECS的计算以及ESS周边的产品关联性比较紧密的产品ESS,CMS,OOS这些都会讲解到,本次课程面对的是初级的同学或者零基础是0~1入门阶级的课程,学完本次课程能对云上产品有一些基本的了解,在控制台或者云上能够正常的使用一些产品了解其基础的使用方法,平时也会做一些对比,例如ECS和IDC物理机有什么区别,前面讲解了ECS的基础包括云的一些概述,ECS的运维安全操作,机器内部出现异常该如何排查,些流程都可以看到,
今天的课程主要围绕CMS,CMS是云监控ESS是弹性射窗产品,这两个是与ECS关联非长大的产品,使用到的频率非常高,今天的课程目标是了解CMS基础概念和配置,云上产品例如ESS弹性计算弹性伸缩是怎样的产品或者如何去使用,CMS会讲解结和的案例,云上的实力是怎样通过云监控触发的,ESS完成自动扩容和缩容的动作后面会做简单的演示,课程主要分为三部分,首先介绍CMS,再介绍ESS产品,最后讲解实践案例。
2.云监控
如果在平时不使用云的情况下可能需要关注像操作系统的一些指标,最简单常见的例如CPU,内存,带宽以及其他的一些指标,其他中包含很多,这些是平时比较常用的指标,其他中可能还包括io,io ps或者吞吐量,pps希望能够在直观的情况下看到一些指标而且针对这些指标可以设置阈值告诉大家监控值达到了多少,会发送一些通知,云监控分为采集指标,云监控是一项针对阿里云资源和互联网应用进行监控的服务是阿里云自身提供的监控系统可以实现组件内部的监控以及对云上事件的监控,采集指标就是刚才提到的,当然,讲解的重点是ECS,云监控不只是能够监控ECS可以监控云服务,云服务包括slb,RDS,针对这些云产品,像SOS仓库也可以做一些监控动作,RDS连接数达到多少要触发告诫等等,都可以通过云监控实现
第二个是自定义监控,云上提供了很多基础指标CPU内存带宽这些是比较基础的,有一些客户可能有特殊的需求除了这些指标,可能还需要别的指标,以前需要大家自己搭建一套监控系统或者自己开发一套,例如RDS这种监控的监控系统,自己进行上报数据,云监控为了兼容这一块提供了自定义数据的上报,可以通过调用API命令行shell脚本支持命令行的方式将业务方需要的数据采集下来上报到上去,
第三个是站点监控,有一些网站比如阿里云点com需要关注的指标一个是rt,Request time请求时间,请求时间响应变大了以后证明站点响应时间变长了可能会影响到客户的访问,需要关注这些指标,还有其他的站点监控,例如能不能访问,如果不能进行访问业务会受到影响,还可以针对状态码进行监控,平常使用的是HTTP站点返回时都会返回一个200M的状态码,两百表示机器是正常返回的情况,其他可能还有别的请求,比如返回500或者502,504超时了,这些情况站点可能已经访问不到了,会获取到异常的状态码,在站点控制可以设置一些阈值,通知大家当检测的状态码是多少时例如大于500,大于400 一般认为是有异常的要么就是有响应报错或压根就访问不到了针对这些需要做站点的监控,现在站点监控部仅仅局限于刚才所讲的操作,还有一些可以做telnet的监控,可以探索tcp的端口是不是通的,PIN,在监控中有很多监控项,提到的主要是这几类,
另外监控方面除了采集指标,还包括采集事件,事件在前面进行讲解过ECS有运维的系统事件,如果ECS中发生了重启或者ECS做了变配会触发系统事件运维事件,系统事件触发以后可以在云监控中订阅事件,可以设置实例发生停止或者重启时云监控会自动接收到事件的通知云监控触发后续的动作,后续动作可以告急也可以调用消息队列或者其他地方有其他程序订阅消息来完成后面的一系列动作,这就是时间的监控当然事件不仅仅局限于ECS,其他的云产品也是一样的所以是云服务事件不仅仅是在ECS中的,其他云服务事件产生也是可以支持的,这是采集事件的部分,不需要进行采集,事件会自动推送过去的,关键是看是否配置订阅,如果订阅了事件类型,当这个事件触发以后会通知到执行后面配置的告知动作,
后面远射下来就是指标库,在帮助文档中有详细的介绍有哪些指标?每一项都是什么解释都是有专门的,包括CPU,CPU是列出最详细的,有ESS user不同的一些指标都是为采集的,包括连接数TCP连接数也是可以进行采集的,不同的状态Tom established 或者其他的一些状态半连接状态都是可以采集到的,每个状态有多少连接数是有精准采集的,采集需要注意的一点,是不是实时的,所有的监控系统都有采集的周期,包括一些自己搭建的sabbath也是有采集协议的,采集频率大概是一分钟上报一个点,一分钟内会采集多次聚合采集最大,最小或者平均值报三个值上来,这就是采集逻辑在一分钟内才多个点做聚合上报到server端,然后控制台就可以通过拉取数据就能产生事件监控指标,事件包括主动运维事件,在之前ECS因为是中有讲过,主动运维事件包括宕机迁移,物理机存在异常宕机了需要将ECS这台虚拟机迁移到一台正常的机器上保证能够正常运行,这种被称之为主动运维事件,是大家主动发现存在硬件异常或者其他风险而需要做响应进行处理时会通过主动运维推送出来,接下来是操作事件,状态事件,实例状态发生改变或者对实例进行操作停止或者重启就是操作和状态事件,其他事件是在这些之外的事件,感兴趣的可以自己查看。
拿到这些指标以后要设置很多规则,例如CPU跑到百分之百或者90%了需要做后面的动作,后面的动作是可以执行到后面来第一是通知,通知渠道可以有语音通知,短信通知,邮件通知以及钉钉群通知可以电话报警,短信报警,钉钉群相当于回调到机器人,将钉钉机器人加到群里会将回调信息通知到群里,还有一些其他的云服务,不光是有常规的通知渠道也可以将消息推送到mq消息队列,一端有其他服务进行监听消费消息队列里面的数据,一旦有消息过来就可以触发,通过自己写服务回调的他那边,那边可以执行一系列的操作,例如对业务做切换,最简单的CPU如果打满了通过回调到克服自己开发的处理系统上,这套系统可以做的,别的不可以做可以做一些松容进行扩容,第2点除了可以做扩容还可以将CPU使用率从百分之百降到10%,这时也可以回调做缩容,这时就完美的结合了起来,其他的一些产品可以推送到日志服务,消息服务以及函数计算中,这里面都可以配置一些其他的动作完成后续的操作,如果客户检测到某个异常状态需要业务上进行切换,消息队列或者函数计算里面都是可以客户自己定义书写一些代码的做后续操作,一旦触发这个动作可以自己执行需要的逻辑来完成业务的调整,这种情况可能使用的不是特别多,可能弹性作用的比较多一点,大部分场景是弹性伸缩扩容,
云监控除了这样链路以外也提供了open API,这个API可以通过接口上报数据或者通过接口进行查询数据,或者通过接口进行修改规则都可以,这一点的用处是可以给控制台,控制台进行展示都是通过接口搭取的,也可以客户那边自己开发系统调用这个接口,把监控的一些数据直接展示到客户自己的系统上,可以完美的解决,不需要员工登陆机器而且很多客户在上来之前已经有一套很完善的运维系统了,可能根本不想每次登陆控制台去查,更迫切的需要将数据直接集成到自己的控制台上,在内部系统就可以查找到所有的信息,这些接口就可以完成这件事。以上就是云监控的大致框架一些功能以及流程是怎样的。
云监控的应用场景大概已经清楚了,第一个是原产品监控,云产品包括slb,RDS,kafka,日志监控等,几乎覆盖所有的主流云产品监控,像日志监控监控到某一条日志出现多少次了就发一条告诫通知都可以进行配置以及监控异常都可以做监控告知,
主机监控是要重点讲解的,是对ECS的全面监控,覆盖常见的内存指标这些指标可能目前还是属于比较基础的指标,有些东西在主机监控里可能看不到会比较关心软中断出现的频率抖动top数量这些需要在内口里面去采的,在云监控中目前没有办法做到监控,需要依赖大家发一些工具完成这件事,这是更深层次的东西了,现在覆盖到了内存,内存根据大家机器类知识Four million类似的信息,带宽例如bps存储量,pps包的数量,每秒存储包的数量,中间可能是两个指标,磁盘its也有存储量和网络是差不多的,还有一些磁盘延时的情况,连接数现在提供的有两种,一种是在低层做采集在控制台叫做同时连接数,同时绘画数量和C数量,还有一个连接数是在云监控Agent内部去采集的数量,包括TCP的数量,可能会遇到同时连接数和云监控采集的连接数对不上,其实很简单就是底层采集的是会话数,会话数是五元组,五元组是原端口,目标端口,IP,目标IP和协议这五项最近是一条Session采集到的是这个在主机内部采集到的用SS采的Time wait.数量或者Established已建立的数量采集的是这个状态,和session是有区别的Session中可以包括PIN,SNP也是一条Session,这是他们之间会有差异的地方。还有其他很多的指标后续会进行讲解。
应用场景还包括站点监控,站点监控是http监控,HTTPS监控,TCP,UDP,DNS这些主流的探测方式,http和HTTPS都是可以做一些状态码或者响应延时的监控,遇到什么监控异常就触发谁,TCP可以用telnet,Telnet在客户端模拟三次握手构建一个三次握手的包零构件就成功了认为端口是大通的,UDP类似于NC,NC是发HTTPS探测包的都是以这种探测方式,DNS使用客户端探测DNS解析查看是否出现异常。
最后一个应用场景是自定义监控,针对一些系统没有自带的监控可以通过自行写脚本的方式进行上报,这个不是今天的重点。
3.云监控-主机监控
这个图里可以看到通常会有很多的问题,例如CPU使用率上升,吞吐量使用率,IOPS都是一些非常高频的业务问题,在云监控中不仅仅是提供CPU使用率达到多少,在云监控中可以更精确的到某一个进程CPU使用率,内存使用率,可以在进程级别做一些监控,这个地方很多用户觉得安装了云监控可能觉得不好用很多用户将其卸载,但是现在以后很多时候会遇到一旦出现了业务问题,比如CPU使用率过高将业务进行重启,重启以后恢复好,要查找原因当时是什么进程打满了,事后查找没有办法查到,需要事前将监控agent装载好,不用担心会影响性能因为云监控都是进行了严格的控制控制了在CPU的资源使用率,是采集客户端的使用率是上限已经进行了非常严格的控制,需要强调的一点是主机监控中分为两部分,
第一部分是操作系统的监控,另一部分是基础监控,操作系统监控是云监控采集数据大概的流程是在机器内部安装,软件会在机器内定期采集数据,采集完成以后做汇聚上报给云监控的服务端,这个就是操作系统监控,在系统内部使用agent程序采集的数,这个监控包括了一些内存的信息,磁盘CPU使用率,带宽都是有的,
另一方面是基础监控,技术监控在操作系统监控没有安装Agent的情况下是没有办法采集的,在这种情况下,底层也会有一些基础的采集数据,包括session数量,CPU使用率,带宽使用情况都可以通过基础监控进行采集,基础监控在ECS外部底层做的一些采集,session是在底层的网络组件采集的通过底层转发这个码所以可以在底层采集到有多少session,CPU使用率其实在虚拟化层面通过虚拟化的一些手段采集到CPU的使用率,因为ECS是一台虚拟机是跑在一台物理机上的,在虚拟化层面可以采集到CPU使用率,带宽要通过ECS底层的一些网络组件转发出去,在底层网站也可以拿到带宽的使用率,这些信息在基础监控是可以采集到的,其他的一些信息,比如内存在底层是没有办法采集到的因为内存需要在机器内部实时查看监控的信息,数据才能够查看到,包括磁盘在基础监控也是可以采集到的,因为是基于块儿存储的在快存储中可以采集到一些磁盘信息,这是两个区别,推荐使用操作系统监控,因为在其内部采集的数据会更准确一些,先不讲其他监控其他监控采集的数据都是准确的主要讲CPU使用率,CPU使用率大家有时可能看到基础监控和系统内部采集到的有比较大的差异,还是在系统内部使用命令查看或者top命令查看是接近更真实的情况,
通常建议安装起来,因为云监控基础版的也是没有任何费用的,可以帮助做一些监控采集,整个流程就是在机器内安装Agent,有很多时候是自己安装的,在控制台也有设置,可以设置在购买新机器时自动安装,如果勾选了这个选项在新开机器时会自动将客户端安装上,在没有勾选的情况下如果再去创建里面是没有agent的,这时需要手动进行安装Agent,在云监控的控制台提供一键安装的脚本和命令,Agent运行以后就是采集数据和上报,上报是通过网络进行上报的可能有时会遇到设置了一条防火墙规则发现云监控没有数据了,遇到这种问题时问题和操作根本关联不上,为什么设置防火墙规则云监控就没有数据了,所以要了解云监控也是通过网络进行上报的,Agent运行在组织内部如果机器出现了CPU使用率打满或者磁盘打满,带宽打满哪一种资源打满时,Agent上报时要利用这些资源,可能会出现上报异常,所以有时会看到一个监控CPU跑到了百分之百然后CPU突然就没有数据了,有可能这是机器内部已经异常了,Agent已经没有办法正常进行工作了所以数据上不来,后面可能是断崖式的,这是一个基本的现象看到这种情况时,不用怀疑agent有什么问题,一般类似于操作系统内部存在异常导致上报上来没有数据,上报完以后云端会做一些处理,处理好以后会匹配一些报警规则,报警规则是客户自己进行设置的比如CPU达到90%这是命中规则,规则会通报相应的报警如果没有命令规则就没有后面的东西了,推送报警,有语音电话,短信以及其他的一些推送方式,这些推送方式一般根据报警规则设置的告诫级别决定的,如果设置最严重的级别就需要进行语音通知了有人响应进行处理,如果是低的级别只需要发送邮件就可以了,可能这个事件出发以后对运行没有什么影响,推送邮件或者钉钉就可以,这是数据采集的部分以及基础监控和操作系统监控的区别,操作系统监控其实才是最推荐的数据来源。
4.云监控-Agent 安装
如果没有安装在控制台会提供安装入口
这个是无数据的可能是还没有上报上来,因为agent安装上以后需要申报的过程,因为刚开始采集,可能还需要等待两三分钟数据才会传上来,提供了自动安装或者脚本安装,自动安装可以选择升级或者对没有安装的进行安装或者安装并级到最新版本,这是会调之前提到的产品叫做云助手,调云助手去在机器类执行脚本,如果云部分也没有安装可能这里就会失败,压根安装不上去,装不上去剩下的方式就是通过脚本的方式,因为有很多用户不希望安装太多云助手工具,需要自己做一些取舍如果卸载掉就无法享用到云上的比较便捷的脚本的动作了,这种情况可以选择脚本,脚本点开会生成一条命令,这个命令会随着服务的迭代会不断进行变化建议大家通过制台获取最新安装路径,这里是下载了share脚本执行了一下,脚本里面就将agent安装好了,安装好以后等待两三分钟就可以看到数据上传上来了,这就是agent的安装
5.云监控-创建告警规则
将Agent安装的数据上来下一步要做告警规则的配置,这里简单举三个例子磁盘,内存和CPU一样举了一个例子,可以针对一个实例做一个告警也可以针对多个实力创建告警规则,告警规则中包含监控指标,前面有个agent大家可以看到表示这个指标来源于Agent采集,如果没有Agent指标可能是来源于基础监控,告警触发规则分了三个级别,crit是最顶级的级别比如连续三个周期使用率,采集周期例如刚才提到的是一分钟一次一分钟一个点,连续三分钟平均值超过了95%就会触发crit级别,告警级别可能没有那么严重,但是需要管理人员关注一下,可能连续三个周期大于80%就通知,剩下是info级别是最低级的级别,这个事情发生以后关注或者不关注都是无所谓的没有那么紧急,可以根据自己业务需求,有的客户可能业务是大量写磁盘的盘负载本身可能就很高,监控的指标就会有一些差异,可能指标长时间都是大于80%的,80~90之间业务可能都是正常的这也是可以理解的,要看业务的具体需求,包括内存也是一样的可能有一些业务就是使用内存型的业务,例如RDS大量的缓存在内存中,本身消耗内存很大,这个就根据自己的业务进行调整就可以。每一条告警都可以关注告警联系组,报警联系组可以在控制台进行设置将某一些联系人设置到同一个联系组,例如运维团队十个人,十个人可能都需要关心消息就将这十个人全部加到一个组,有消息发到那一个组就可以了。云监控做了基础的演示,后面还会和ECS做比较时会进行详细的演示。
二、ESS
1.ESS概述
ESS在云上叫做弹性伸缩,看到这个名字,可能就会有一个想法,在云上伸缩可能是扩容机器,弹性伸缩是指可以更自由的做一些弹性的扩容或者缩容,通常情况下用户会指定策略,自动调整组内云服务器的数量,适用于无状态的应用进行水平扩展,扩展扩容时有两种方式,一种是水平扩展,另一种是垂直扩展,水平扩展是指增加机器,垂直扩展是指机器加配2核4G升级到四核8G,但是有一个问题是扩容机器时扩CPU,扩内存需要机器做重启才能够生效,这时可能不能适用于很多情况,因为很多情况下不允许业务在高峰期重启机器,这个操作是不现实的,通常建议使用水平扩展的方式使用云监控,当监控到某一指标,例如CPU,内存,磁盘大于设置的阈值例如80%,弹性伸缩会触发到规则通知ESS,ESS会执行添加机器的动作,添加的机器来源于做的配置,在创建伸缩组时伸缩配置可以指定伸缩的机器用什么规格放到哪一个VPC下面以及镜像用哪一个都是可以指定的,会按照指定的配置将机器创建出来加入到业务的伸缩组里,在检测到CPU使用率回落了业务高峰期过去了,这时会触发云监控触发规则调用ESS,ESS做缩容动作将刚才添加的机器在删除掉,这个过程可以帮助用户做很好的成本控制,很多业务高峰时可能需要100台机器80%的时间可能都是业务低峰期,业务低峰期是没必要用100台机器放在那儿空着,平时放20台机器就可以,如果一直放100台机器成本会非常高,ESS可以解决的问题是在业务来临时自动按照配置伸缩出机器将业务高峰期扛过去,扛过去以后再根据设置的阈值CPU回落就将相应的伸缩的机器在松容掉降低成本,这就是ESS目前帮助解决的问题,其实在很多场景,例如客户双十一要做大型的活动促销,这时ESS是大规模扩容的状态监控会发现业务高峰,只需要扩出来以后扛过去就可以了,这种活动一年可能也就一两次没必要全年放那么多机器在那里,需要临时使用即可。
2.弹性伸缩基本概念
弹性伸缩最简单的组件是伸缩组,伸缩组是ESS核心单元里面放的是同一个业务所有的机器都放在同一组中,这个组里面包含了一些实例,配置,包含了多可用区实例数多规格健康检查或者包含了一些关联的RDS或者slb以及扩容策略都是放在伸缩组中的,需要将一套业务环境全部添加到一个组里,监控是根据组内已有的实例CPU,内存综合的使用情况决定后面伸缩扩容的配置以及回缩的配置,
伸缩配置是在前面创建了伸缩组以后扩容的时候需要按照什么规则进行扩什么样的规格什么样的配置CPU多少格进行扩容需要被告知,如果不告,知不知道想要的是什么扩出的东西是否能使用,扩容尽量选择相同规格的,也有特殊情况,比如某个规格的库存不足了,这时可以选择多规格或者多可用区设置策略,某一个可用区不足了,另一个可用区用也是可以的,因为同一个地域的不同可用区内网都是互通的,调用RDS,slb都是能够内网互通的
另一方面是镜像,镜像在扩容时因为其内存会有业务最简单的例如有word path的博客程序,如使用全新的镜像扩出来这里面是没有业务的,没有业务请求到这台机器上访问会出现异常没有任何作用,需要在业务配置好以后基于业务环境做自定义镜像,要保证用这个镜像创建的机器启动起来以后业务能访问,要保证这个状态才能使用自定义镜像的方式进行扩容,网络配置包含一些网络类型VPC还是什么,要选择哪一个VPC,要选择哪一个安全组,以及在扩容时需要做一些配置比如要关联到哪个SLB后面这些都需要进行配置,与创建ECS过程是类似的,有的用户可能会想做了一个web集群有入口,后端可能有很多的机器这里有三台机器,请求都是从负载均衡过来的SLB,
下面是ECS,请求过来以后业务会产生数据,有一些用户可能会上传一些数据,这些数据如果不做后面的共享存储数据就在某个机器上,或者业务代码都在这个机器上要保证每一次伸缩出来的机器都是包含最新代码的,镜像是固定死的,以前做的镜像是什么样子就是什么样子,这时可以使用user data,User data在前面讲过是自定义数据,客户在创建机器时可以指定脚本或者其他的,在开机时自动执行,在扩容时也可以在里面加user data让他在扩容出来的机器自动执行脚本拉去最新代码,最新数据或者做业务的配置都是可以完成的,可以自动化的完成业务配置能够以最新的状态运行起来,这是user data的作用,
另外一个是资源组,资源组与业务的使用没有太大关系,大家关心的点是有的客户可能让资源组做一些业务的划分,将一整套业务环境加到一个资源组中方便用户进行管理做一些区别,RAMrole是进行决策的,ESS可以关联角色实现ak访问API的功能,这个场景可能比较少见云用户业务可能会调取API可能恰好使用了ak的方式,所以需要将这个角色加入进去,最常见的是ack容器服务,容器服务在扩容时一般容器都会关联一个角色,因为容器中会有很多组件调用NAT网关,SLB添加服务的时候都需要调用接口完成一些访问,都是通过角色的方式完成的,
DDH是翻译的数组机,因为云上ESS是虚拟机,虚拟机上一个物理机跑了很多虚拟机,这些虚拟机可能归属于不同的客户,在某些场景下有一些客户可能需要物理机只为自己使用不想与其他用户共享,这时使用DDH可以实现,DDH是专有的数据机出售给你完全是你自己一个人在进行使用,在进行创建时也可以将ESS指定到某一个DDH上,前提是要存在DDH,
创建完伸缩配置以后要进行伸缩规则的创建,伸缩规则例如刚才提到的场景要监控CPU达到多少使用率以后触发申诉活动,这就是伸缩规则,规则中包含了一些监控指标以及报警任务和伸缩的通知,伸缩方式,生命周期规则都是包含在伸缩规则中的,在这里面进行配置哪种情况下要进行伸缩,伸缩多少台都需要在规则中定义好,或者哪种情况下要缩容,缩容是减少多少台这些都是有详细说明规则和配置要求的,规则中也包含很多的伸缩方式,例如通过监控的方式进行触发这是报警任务的方式,第二种是通过定时任务有的客户业务可能比较固定,业务就是在晚上8:00存在业务高峰假设是完全固定的,然后在9:00在执行收缩将伸缩的机器扩出来,9点种业务过去了再定时将业务缩容回去,这是针对不同业务场景的如果预测不到自己的业务高峰是什么时候可以使用报警的方式,如果能够完全预测可以使用定时的功能自动完成伸缩的活动,可以对接OOS,MNS,因为大部分的服务器后面可能不仅仅是这样的,
还会有一层RDS里面有数据库或者reads,RDS还有打印单,新扩的机器可能不在打印单中,那就无法进行访问,这时可以对接OSS,RDS常用的reads这些功能都是集成的自动添加打印单功能在ESS中,还有一些情况不支持自动配置时可以对接OSS推送消息到MNS或者OSS让其触发执行添加版本打印单或者删除版本打印单,这是自定义的方式,常见的一些云服务已经能够自动完成了,不能完成,也可以通过这种方式进行对接。
3.弹性伸缩的工作原理
这里包含了很多伸缩方式,第一种是定时方式到达某一时刻时执行任务,第二种是自定义任务伸缩一台或者伸缩两台是自己定义的,还有两种方式是健康检查和云监控触发,都是多种伸缩方式,根据自己的业务情况进行详细的配置,可以通过高警触发,手动触发,或者定时触发都可以,
通过健康检查情况或者性能情况都是在伸缩组中完成的,伸缩组中可能有很多台机器业务通过SLB放进来,可以放到不同的机器中,些组内的机器设置监控指标达到某一个值时触发阈值,就会执行相应的动作,架构上有RDS数据库不只是这些,还可能有reads,要根据实际情况查看后面甚至可能还会挂在nurse,因为业务可能有一些共享数据阔的机器也需要访问这些数据,所以需要再挂载一个nurse这是大概的架构,触发任务以后会执行伸缩的规则,
伸缩活动是当规则触发的时候要执行动作,动作是扩容机器或者缩容机器这个动作就称之为伸缩活动,这个动作可能会有伸缩终端或者缩容失败或者成功的状态,需要关注失败是什么原因在申诉活动中可以看到报错信息,伸缩程序在执行伸缩的时候有增加多少台需要什么类型的实例创健伸缩活动去执行,多少台是规则中定的,规则出发时要伸缩多少台或扩容多少台是规则中已经定好的,可以自定义进行配置,ECS的类型有CPU是多少核的内存是多少g的是在伸缩配置中完成的,这些都确定好以后创建伸缩活动,然后可以创建机器,创建好机器以后拉入到伸缩组,这就是整个流程,
申诉活动中创建ESS也有缩容,这里没有展示缩容,将ESS拿出来释放掉就好,这些动作执行完以后还有一个设置是冷却时间,冷却时间,在玩游戏时可能会接触到,在冷却时间期间没有办法执行下一个伸缩活动,这是为了防止频繁的进行伸缩动作反而带来了不必要的额外开销,伸缩状态设置冷却执行完一次以后在我任务出发过来,不会执行伸缩动作,保证业务不会频繁的被扩出很多机器,但是也不一定通过这种方式做,在伸缩组中要配置实例数量时会设置上限,业务是否是不限扩,业务可能扩到50台就是极限了再多成本承受不了,大家在成本方面要做一些平衡,扩到50台,即使达不到要求也不要再进行扩容了,因为在扩容成本就承受不住了需要这样的性质,也可以设置最小的实例数,ESS保证最少有五台机器,最多可能是50台机器达到这样设置的限制。
4.伸缩模式
伸缩模式包括健康模式,固定模式,手工模式,定时模式以及动态模式,康模式是伸缩组对健康做的检查,可以检查伸缩组里面的实例,不健康的实例是什么例如将实例关机了,关机以后再伸缩组中认为是不健康的实力因为没有运行没有办法承担业务访问流量,所以认为是不健康的实力状态,这是需要配置的,配置需不需要自动释放或者移除不健康的实力,有一种情况是伸缩组里的保护状态或者备用状态,保护状态是机器在进行缩容时可能有一台机器是不能缩掉的要将其设置成保护状态,这个状态添加上以后即使在缩容时统也不会自动将这个实力缩放掉,属于一种保护状态一定要确保这个实力是在伸缩组内的,不能做任何的释放或者移除动作,伸缩组里没有实力的情况下监控指标无法得到,监控指标如果没有拿到数据伸缩动作也无法执行,还有一些情况是有些机器本身有一台业务机器,把这一台加到了伸缩组中,伸缩组在进行缩容时如果是按时按量的,不设置限制可能在缩容时会缩容掉,说容以后一台机器就坏了,所以要有这样的保护状态就是为了防止这种情况出现,伸缩组对所有模式默认提供健康检查,也是健康检查的模式,健康模式检查其实和SLB的检查模式不一样,SLB的健康检查是探索端口或者ITP状态是否不一样,这个是查力状态是否是正常的,是对实力健康状态的检查。
固定模式是可以指定最小的数量保证伸缩组,例如伸缩组最小五台实例,保证伸缩组中至少有五台,低于舞台会调用接口自动进行扩容保证最小数量充足,适合业务波动不大,有较高要求的客户,一般和监控模式使用监控是指云监控,
另一种是手工扩容,这种方式不是十分智能,因为本身就叫手工,需要人工手动进行触发,有些用户可能会自己观察数据发现监控异常,手动点击规则,要执行某一条规则点击一下,进行执行规则扩容或者缩绒执行后面的动作,当然也可以通过API执行,这里提供了很智能自由的方式,客户可以结合自己本身的运维系统做自动的调用,比如自己的系统发现了什么异常需要扩容或者缩绒可以调接口上来进行触发动作,完全不依赖云上的监控这是非常自由的一种方式,都是手工进行调整,最大,最小值维持在最大最小区间,
定时模式可能是业务固定在每周五1:00的业务,在这时进行增加就可以了,适合业务波动有一定规律的场景。
动态模式可以基于监控指标自动进行调整,适合业务波动没有明显规律的场景,可能没有固定的高峰和低峰在这个时间某一时段业务访问上来了,有较多的人访问是比较随机的情况可以使用这种方式自动进行管理。
5.动态模式-预测模式
根据伸缩组最近1~14天的CPU使用率,内网出入流量等进行建模,这样就大概了解了,业务是这样波动的,大概预测到了CPU使用率是这种波动类型,通过机器学习预测算法预测未来两天整体的使用情况,绿色的业务场景是这样可能出现业务高峰时并自动进行扩缩容操作,其实这就是监控,可能发现业务就是固定波动的,例如中午才有高峰下午又下去了,这种就是非常有规律的波动,这种有规律的波动可以进行预测其他情况下,如果大家对自己的业务比较了解,也可以不使用这种预测的方式,预测本身没有业务方自己熟悉自己的业务,这只是根据历史的波动情况决定的,不能代表百分之百的准确性,根据CPU的指标预测也是一样的,这些基础的监控指标进行判断,这种是预测模式。
其实包含多种缩模式可以灵活的进行组合,定时任务是指定时间自动完成扩缩容动作,
手动可以加一些动态模式,可以添加包年包月的方式,包年包月不会被移出去是因为是为业务保护好的,包年包月到期之前没有办法删除实力,即使调用删除也是删不掉的,使用帮您包月可以做业务的基座,因为业务平时肯定会有低峰,地方是可以使用包年包月的机器可以一直存在,释放也释放不掉,一直在那,弹性伸缩是根据实质的需求做动态的扩容,平时的基座相当于绿线一直有一定数量的机器在做基座服务,这就是手动加动态的模式。
例如动态模式CPU使用率的负载情况这只是举例,还有其他情况,例如带宽或者其他的监控指标可以自动进行伸缩,
定时加动态模式也是同样的,在配置的基础上可以根据监控指标做进一步调整,可以设置定时指标扩一台,在扩容一台的基础上可以添加规则,如扩了一台,还有业务需要呃,例如CPU还是打满的还需要再扩,可以结合动态规则再做进一步调整,相当于对定时的修正,因为业务有规律了,可能每天扩十台大部分场景是能满足阔十台的,有少部分情况下可能今天用户数陡增,这是定时库,十台是不可以了,可以结合动态规则在扩一点机器,最大程度保证业务是正常使用的,这是伸缩模式的组合,稍后会为大家演示这种场景。
6.生命周期挂钩+通知
生命周期挂钩是因为有一些场景在ECS缩容时可能需要关心的一点是将机器从SLB摘掉,摘掉的动作会有影响,在摘的时候是根据CPU使用率回落了再摘,在摘机器时,其实不知道机器上是否有业务在使用,有可能还有一部分业务负载上面还有一部分业务在上面运行,很多用户可能还在访问这台机器,只是这台机器CPU的综合使用率或者监控指标没有达到伸缩的要求,这时需要生命周期挂钩,挂钩在创建或者移除的时候可以在挂的期间对实例进行操作,例如新建实力时要添加打印单做一些预处理,需要等一下才能挂进去在移除的时候同样,可以等一下再进行移除,等待是为了ECS上的全部处理完再将机器拆掉,当然时间需要根据自己的业务情况定义,比如是活动挂起的时间很长如果你的业务一个用户最多保持在一个机器活跃60秒,这种情况可以等待一两分钟就可以将机器移除了,因为在机器移除之前可以将SLB机器权重调为0,因为新的请求不再进来老的请求如果在上面没有处理完还是在ECS上面的,这是在等待一段时间释放就好了
在扩容时RDS打印单,加打印单独过程可能需要painting需要进行等待的动作,因为要回调,这个地方完成以后再进行回调在将其attach到SLB上,请求才能够正常进来,在前面就将请求放进来如果RDS打印单还没有加完或者还没有生效可能会导致请求失败,这就是在扩容前做的预处理的动作,最后才将ECS放到组里加到SLB后面,锁容是在SLB移除的时候以后要做等待的动作,是在等上面的业务处理完成,处理完成以后才能将其从SLB摘掉,摘掉以后再做停止,白名单删除到最后的释放实例,无论是这里释放实力还是hook回调都会通知事件的订阅中心,这里可以对接很多消息队列的类型,因为在这个地方要加白名单,比如刚才提到的使用OSS模板去做,或者在删除之前也要进行调用通知某一个业务方,让其及时获得伸缩活动的结果以及伸缩活动的详情能够对后面的业务做一些相应的处理,OSS是使用的比较多的,因为OSS模板比较好写,是一个自动化的运维模板,可以使用这个模板在OSS内部执行命令,完成一系列的部署动作或者使用它做一些组合可以调用open API,可以使用其调用API执行一系列的动作例如扩带宽,调接口将带宽进行扩做升配的动作或者删除实力都是可以的,后面是通知云监控,云监控有时间监控可以通知那边进行后续的操作,大概就是整个的链路从扩容到返回完成删除实例。
7.弹性伸缩的增强能力
弹性伸缩的增强能力包括成本最优策略,默认高可用,支持停机不计费成本最优策略可以按照vCPU价格排序,优先创建单VCPU价格低的实例规格,这是成本的控制,还可以按量加spot组合,按量是指按照小时结算使用费用满一小时结算这小时的费用,spot是竞价实力,竞价实例的缺点是价格可能会低一点,在出现库存不足竞价时别人出价更高时或者价格波动会释放实力,spot实力不要放重要业务,存放一些随时可以释放掉的业务就可以这是基于成本的考虑,如果需要更稳定,更保险可以使用按量或者包年包月的。这些可能不是最新的数据,可以做一个参考,只是举一个例子每个规格都对应不同的CPU使用价格,然后排一个优先级,优先级越小就越高,肯定会优先选择价格最低这一栏扩这种类型,这是在成本方面的考虑。
默认高可用在刚刚进行扩容时会遇到很多问题,比如某个可用区资源不足或者某个规格资源不足,在扩容时可以考虑选择多个实例一次性可以创建多个保证建成功率,业务可能会严格要求使用某一规格,比如GPU的实力必须使用GPU显卡,规格是固定的就那么几种规格,可能需要考虑a规格,如果满足不了需要考虑别的可用区再创建实力出来,A可用区c可用区d可用区每个可用区都可以扩多台,多台中还可以选择多种规格,不同的规格都放在里面满足成功率,在使用时有一些考虑是建议SLB后面挂统一规格的机器,因为SLB要负载均衡,负载相同的请求到同一个机器上保证每一台机器的负载CPU使用率,磁盘使用率是在近水平的,这样才能保证SLB十个请求过来可能挨个分给后面十台服务器,这样能够保证每台资源都在相对水平,避免某一台机器CPU或者其他资源情况出现明显跑高,请求出现在这台机器上可能会出现概率的失败,为避免这种情况,建议使用相同规格,在实际业务当中,相同规格不能保证百分之百满足,因为库存或者其他原因这种情况下更需要保证的是业务稳定,没有相同规格,没有关系业务一定要跑起来,也不能挂掉,可以考虑跨可用区,但是跨可用区存在的问题是可用区之间是通过专线打通的,但是如果数据在a可用区,ECS如果放在b可用区,会存在跨可用区的访问,正常一般的业务没有影响,因为可能会增加毫秒级的延时,通过专线访问可能有几十上百公里的路程,所以可能会增加延时,常规的业务可能没有影响,但是一些非常高明版的业务可能对一毫秒也有比较高的要求,所以考虑只在一个可用区创建实力,常规业务建议放在多个可用区也可以实现异地容灾的情况。
停机不计费前面也讲过这些ECS有停机不收费的功能,不收费不是指完全不收费,计算资源,网络资源可以不收费,存储资源是要收费的,因为实力停机以后CPU可以不使用了,节省出来网络不使用也可以节省出来,每个ECS有系统盘数据盘,这时即时系统关机了盘上的东西也是存在的,也要占用存储资源,所以存储需要计费,这是基于成本的考虑实力费用为零,只收取存储费用,实力不收费不是指完全不收费存储其实是收费的,有些用户可能需要在业务高峰的时候将大量机器拉起来,业务低峰时将机器关机可能有业务洪峰,这时不想当时再创建机器,创建机器要考虑启动时间,初始化时间可能想只开一下机就可以了,存储都是准备好的只需要将实力开机,所有的东西就启动起来了,这是停机不收费,在弹性伸缩中也可以支持,整体的模式是非常灵活的。
8.配置流程
这里先进行简单学习,后面会做演示,过程大概是创建伸缩组,创建伸缩配置,伸缩配置包括刚才提到的OSS规则什么类型的实例,启用伸缩组,伸缩组启动以后创建伸缩规则,伸缩规则可以选择多个类型。