前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2017 Openstack Days China | 大规模云计算环境下的运维实践

2017 Openstack Days China | 大规模云计算环境下的运维实践

原创
作者头像
腾讯技术工程官方号
修改2017-08-22 10:00:10
1.7K0
修改2017-08-22 10:00:10
举报

作者:潘晓东

企业IT部潘晓东专注于云计算技术,在虚拟化、云计算、服务运维领域有超过十年的工作经验。本文是将其在OpenStack Days China的分享进行整理,内容上从稳定、可控、可运营三个方面,将其在大规模运算环境Tstack运维过程中所积累的经验进行总结分享。

1腾讯私有云Tstack现状

纸上得来终觉浅,绝知此事要躬行。说到云计算运维实践,必须有要实践的来源。腾讯私有云Tstack,目前运行了10000+ OS,可以算是国内最大的私有云平台之一。目前部署在深圳,天津,上海,成都四个区域,共拥有14个集群。在容灾架构上,采用两地三中心架构。与此同时,能够支持公有云私有云的统一管理,提供混合云的解决方案。更加难能可贵的是,Tstack上线5年时间里,可用率高达99.99%。下面将从三个方面介绍Tstack的运维使用经验。

2稳定重于泰山

稳定性对于一个线上服务平台来说,是非常重要的,脱离了稳定性谈服务运维就变得苍白无力。腾讯私有云主要从以下几个方面进行稳定性建设:

稳定性建设的第一要素,就是要从服务架构的层面去保证服务的高可用性,这样即使底层硬件发生故障时,层面能够自动容错。Tstack的管理节点,就是采用了高可用的架构设计。服务代理层、基础服务层、数据库、消息队列,都采用了相应的高可用架构,服务代理层采用HAProxy+Keepalive的模式,通过VRRP协议来保证服务高可用。基础服务层则是采用多实例模式,单一节点故障并不会影响整个服务。同样,MySQL采用Galera集群实现主主高可用模式,消息队列采用RabbitMQ的镜像集群模式。任何一个节点失效,都不会影响服务,从架构层面消除了单点。

我们知道,OpenStack对虚拟机调度是根据CPU、内存、磁盘等情况进行综合决策的,但是并没有考虑虚拟机业务的情况。在实际生产中,我们经常要搭建MySQL高可用集群,比如主备模式,在没有进行虚拟化之前,主备模式需要2台物理机,任何一台物理机宕机都不会影响服务。但是在云计算环境中,OpenStack就有可能将做了高可用的两台MySQL虚拟机调度到同一台物理主机上,这样此物理机故障或者维护,将影响业务,业务层的高可用就失效了。TStack根据自己的使用经验, 对业务进行了高可用调度考虑,避免了此问题的出现,保证了业务层高可用的有效性。与此同时,TStack虚拟机的资源使用模型,会有个综合的评估,会将CPU密集型、内存密集型、磁盘密集型分散调度,避免资源争抢,力求利用最大化。即使在虚拟机分配调度是不能准确预估资源的使用情况下,或者是在运行的过程中,虚拟机的使用情况发生了变化,Tstack也会更加历史运行数据,迁移虚拟机,力求动态均衡资源分布。

在云计算环境中,网络情况是复杂的,一般包括:管理网、业务网、存储网和带外网。单纯从某个网络或者某个节点去检查虚拟机的运行情况,可能都是不可靠的。TStack从计算节点的多个网络进行心跳发送,避免监控的不准确性,通过控制中心对主机的网络状况进行综合判断,当处理故障时,自动迁移,无需人工干预。

提升业务稳定性的方法,远不止以上三点,我们在运维的过程中,不断发现问题,不断改进和优化,才能确保服务的稳定运行。

3尽在掌控之中

要实现服务的安全运维,可控也是服务的关键指标。只有对每个服务的特点、性能了然于胸,才能真正保证服务的稳定运行。

性能是服务运行的关键指标,只有服务的性能是优化的,才能够更好的保障服务的稳定运行,才能在更大的流量爆发时扛住压力。采用计算机体系结构的方法论,TStack主要从三个方面进行性能优化:

1.并行计算:在云计算控制节点中,为实现高可用,同时提高性能,采用的是多实例模式,通过多实例,提高服务的性能和吞吐率。在程序内部,例如nova、neutron中,采用多线程和协程的技术,提高服务性能。比较值得一提的是预处理技术,在虚拟机迁移中,提供提前分发流表,迁移完成以后,网络立刻可用,使虚拟机在OpenStack上迁移的停机时间从数秒降低到100s一下。

2.缓存技术:在Ceph对象存储中,对象的元数据索引存放在硬盘上,不利于对象的list等从操作,通过将对象的元数据缓存在Redis中,可以很好的提升对象浏览的速度,提高吞吐率。同时在块存储中,通过开启RBD缓存,提升块存储的效率。同时,通过适当的提升Token的缓存时间,提升Keystone的效率。

  1. 压缩技术:压缩技术也是常用的一种优化技术。虚拟机迁移常常基于一种precopy算法,这是一种循环拷贝算法,主要原理是迭代拷贝虚拟机内存,每次都拷贝上次拷贝过程中修改过的内存,如果内存修改速度大于网络传输速度,这个拷贝就失效,那么虚拟机迁移的停机时间就很长。在迁移过程中,启用压缩传输,能够有效提高虚拟机传输的带宽,降低虚拟机迁移的停机时间。在对存储的优化中,压缩和去重是两种常有的技术。在Ceph中,TStack植入压缩存储引擎,支持lzo, snappy等快速压缩算法,对Ceph的块进行压缩。不过最近社区也开始支持此功能了。

服务可用是做服务的最低诉求,在任何时刻,都要保证服务的可用性,即使在是恶劣的环境下,也不能完全中断服务,至少核心业务的服务是不能中断的。TStack主要从三个方面来保证服务的柔性可用。

  1. 资源预留: 每个计算节点给宿主机预留1/16的内存,来保证libvirt、nova、ovs等服务的正常运行,同时采用CPU绑定技术,给宿主机预留2-4核作为nova等基础服务的资源使用。如果是超融合架构,则每个ceph osd预留一个核为其提供计算能力。在网络方面,采用管理网,业务网,存储网分离的模式,确保每个网络不相互干扰。

2.速度限制: 在云计算环境中,虚拟机与虚拟机之间虽然采用了KVM做了隔离,但是他们不可以避免的出现资源争抢,只是程度不同而已。比如,超融合架构下,TStack采用Cgroup进行了资源限制。另外也可采用cpulimit对CPU运行进行灵活限制,采用TC对网络进行限流。

3.过载保护: 服务运维常见的一个问题就是,当服务压力过大时,必须能够保证关键业务的运行,保障生命级业务的正常运行,因此,服务分级是必须的,在压力过大时,必须能够区分关键业务和非关键业务,确保正确疏散关键业务的压力。另外,在服务发布时,需要做的柔和发布,通俗的说,就是一台一台启动或者重启,不能一股脑全部启动或者重启,避免雪崩现象发生;与此同时,需要做好限速,在流量高峰期能够对业务进行可控限制。

灰度发布也是可用运营的一个重要部分,做好灰度发布,能够保证产品发布时对业务的影响降到最小。当我们的新版本开发完成,我们首先会到测试环境下进行测试,测试通过以后,会到一个灰度环境进行小流量试运营,因为测试环境下,无论怎么模拟,和线上环境还是会有差异,到灰度环境下,进一步发现问题,进行修复。根据版本功能改动的大小,决定灰度的时间的长短,可用是一天,一星期,或者一个月。在线上环境,可用先部署一部分机器,观察服务正常以后,再进行全部发布,做好回滚方案,一旦有问题,快速回滚。

4运营任重道远

可运营是一个云计算环境的重要保障。就拿车来举例子,不管是什么样的车,无论性能多好,加速多快,关键是要有方法去驾驶它,否则这辆车就会失去方向。云计算环境也一样,无论我们提供硬件有多好,功能有多强大,对于运维人员来说,可运营是最关键的。TStack从以下几个方面去保障服务的稳定运营:

监控是对服务运行情况感知的基础设施。可用说,监控就是运维人员的眼睛,通过监控能够发现服务各种运行细节,了解服务的运行状况。监控主要从以下几个方面去考虑:

  1. 覆盖度:覆盖度永远无法到100%,每次出现问题,最后发现监控都可用优化,TStack汲取腾讯18年的运维经验,从硬件、软件、服务、监控本身等方面,尽量提高云计算环境的监控覆盖度。
    1. 实时性: 为了提高实时性,可以加快采集频率,这样监控就可用做到秒级,但是频率太快,监控的压力非常大。为了在实时性和数据量上进行均衡,TStack选择的是最小频率为1分钟。
    2. 报警收敛:运营环境中的情况非常复杂,一个网络抖动,可用可能产生大量报警,如果没有很好的报警收敛策略,就可能导致短信网关堵住,影响后面的报警发出。同时需要做好报警分级,避免运营人员淹没在海量的报警中,而真正重要的报警却被忽略了。
    3. 精准性: 大多数监控因为数据太多,对历史数据都有平滑处理,TStack因为采用了强大的数据库后端,可用保证1年内不对数据进行平滑处理,方便历史数据的查看。
    4. 报表体系: 由于监控的采集了大量的数据,如果不进行筛选处理,运维人员就会淹没的海量监控数据中,只要服务不报警,运维人员对运维的运行状况毫无感知。事实上,服务的压力已经越来越大,这就需要对关键监控指标进行提取,做成报表,每天推送,让运维人员感知业务发生的变化。

标准化也是云计算环境运维的一个关键要素。俗话说,没有规矩,不成方圆。云计算运维环境的标准化尤其重要,运维环境、运维操作、服务扩容等都需要有完善的标准化流程,才能为业务保驾护航。

  1. 运维环境标准化: 首先,要有操作人员的权限控制,开发人员、测试人员、运维人员需要有不同的权限,比如开发测试人员只能有只读权限,运维人员才能有可用写可执行权限;其次, 服务配置需要规范起来,参数前面写好注视,相同配置采用拷贝方式等,目的是让配置统一起来,方便后面的排错;再次,程序目录需要统一规范起来,要么全部部署在/home下面,要么全部部署在/opt下面,这个看各个公司的习惯,最忌讳随心所欲,当出现故障时,还找不到目录,这是不应该出现的事情;最后,建议采用统一的启动关闭方式,因为每个程序启动的方式不尽相同,会给运维人员带来很多麻烦,最好程序有都有一个start.sh和stop.sh的脚本,让人一看就知道是怎么启动和关闭。
  2. 运维操作标准化: 首先,必须采用工单管理的方式,先把操作单发出来,经过审批,才能执行。工单必须写清楚具体的操作步骤和操作命令,写的模糊的工单,会让人有多种理解方式,很容易出错;其次,按单操作也很重要,最忌讳运维人员看到单子以后,发现单子与自己理解的意思不一样,按照自己的方式操作了,那就事情了工单的意义。即使工单有错误,需要和发单人员核实以后,重新审批才能操作;再次,操作需要采用双人或者多人的方式,一人操作,一人旁边观察,出现问题随时打断,提高操作准确性;最后,回滚备份是必不可少的,我们很难保证操作完成以后,一定不出问题,因此,随时都要做好备份,方便回滚。
  3. 服务扩容标准化: 服务扩容是经常发生的事情,在云计算环境,服务扩容也是有标准的。首先,需要对服务的计算模型进行评估,得出最佳的计算、存储、网络的比例,做成Set模型。在服务扩容的时候,按照Set模型,一个Set一个Set添加,这样能够保证服务的最优配比,规范运维环境,提高资源利用率。

俗话说:常在河边走,哪有不湿鞋。在云计算环境中,人工操作太多,总有可能出现故障。提高服务的自动化程度,能够大大减少运维故障。比如在添加计算节点的时候,我们尽量采取自动化添加,避免了手动操作的随意性。同时,采用自动化操作,即便出错,所以的错误也会一致。相比手动操作,更加容易排错。TStack运维中,采用了大量的自动化操作,通过蓝鲸平台,进行代码发布,线上部署,能够有效的减少运维故障,提高运维效率。

总结:云计算环境离不开运维的存在,可用说,好的运维是云计算服务稳定的可靠保障。首先,需要从服务架构上去保证服务的高可用性;其次,需要采用一些稳定可用的方式去管理服务,如高性能、柔性可用、灰度发布等;最后,需要从监控、标准化、自动化等三个方面保证服务的可运营性。其实,关于云计算的运维方法远不止这些,以上只是TStack运营过程中的一点经验总结。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1腾讯私有云Tstack现状
  • 2稳定重于泰山
  • 3尽在掌控之中
  • 4运营任重道远
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档