爱之深,责之切。从近期的一些公司线上故障,在灾备能力上引发不小的争议,“异地多活”、“集群管理”、“自动化运维”等话题也异常的活跃,基本都在讨论目前互联网企业的应急反应以及IT运维处理能力。自己也看了一些个人的观点和总结,周末抽了点时间,把我们在这方面的一些实践经验分享出来,供大家讨论,希望写出的东西能展现我的诚意。
本文内容主要是基于360私有云-HULK云平台的技术积累和挑战,这也是我们将运维这个服务产品化的结果。在过去几年中我们从百十台服务器,几个机房,发展到数万台服务器,几十个机房这种大规模的体系里面,以最基本、最通用的LNMP架构阐述前端WEB服务和后端数据库服务,分享这“一前一后”在异地多活、集群管理等方面的实践经验。
前端Web服务
在偌大的技术体系里面,前端Web服务随着硬件条件的升级,给大家带来的体验我们并无法用多少娇艳的措施来形容。可以这么理解,为了更好的用户体验,以及高可用的要求,我们的Web服务器都采用多机房、多网络运营商部署,各WEB集群以项目划分,基于项目的复杂关联关系在HULK平台中记录。
1.独享的Web服务器
通过独享,其隔离性和安全性相对更好,不过独享就会带来资源利用率的问题。解决这个问题得益于良好的虚拟化、容器化支持。Web服务器都是虚拟机,资源按需分配、动态伸缩SLA较低的业务,我们可能在超配率50%-100%的虚拟化集群分配2+2,电信2台、网通2台,辅以多运营商代理方案。
2.“无状态”的Web服务器
主要是指将Web服务器与业务逻辑解耦,让Web服务器池作为实现具体功能的集群,通过Hulk存储业务逻辑的相关子系统(zookeeper、puppet等)告知Web服务器具体的执行方案。这样大量的无状态,无差别的Web服务器就可以通过负载均衡设备动态、快速的进行切换,真正实现了资源的“云端共享”。
3.Web项目的域名解析
按运营商线路、区域划分,例如北京联通用户的请求是到某个北京联通机房的集群,华东各省的电信用户的请求到某个上海电信的机房集群,这样我们可以做到机房及地域上的容灾,假设某个机房或者某个地域的故障,我们将用户请求以就近、***体验策略进行调整,保证是活着的。
看到这里大家可能会问,那么多机房,每个机房又那么多小的业务集群,每个业务集群上不同的域名,怎么管理?为了把这些复杂繁琐的工作简单化,我们将各个环节串接、管理起来,通过大家常见运维的工具化、平台化、可视化去让整个管理方式更加简单明了。HULK云平台,我更喜欢称之为产品化,他是我们的管家,更需要强大、精确。达到可以通过鼠标的滑动完成集群管理、负载均衡上下线、新建域名解析、生成故障预案、按预案切换,等复杂易出错任务,这些功能不仅运维工程师需要,还要把业务开发同事加入进来,自助完成。极大的简化了相关的配置管理工作。
集群配置管理
在HULK中集群配置管理部分,如上文所述,Web服务器集群是项目独享的,各个集群的环境也不一样,简单的举个例子,像PHP环境就能够支持PHP5.3、PHP5.4、PHP5.5版本等。
服务器集群为项目提供运行环境(软件、配置文件、进程),而这些都可以统称为“配置”(Configuration)。因此,集群的“配置”管理,关系到项目的快速部署、扩容、升级、回滚等问题。
下面是我们的工具栈,实现一种统一、可控、快速的配置管理。
首先要解决的是软件的问题,外面的软件包直接拿过来安装是不可能的,我们有自己的版本要求、安全要求、编译参数要求、安装路径要求等。所以我们有自己的软件仓库,涵盖所有核心应用软件,给软件仓库供血的是一套自动化的RPM构建系统。
其次是Hulk平台与软件仓库的对接,Hulk可以通过API查询软件仓库的信息,比如软件包名字、版本,Hulk对仓库里的这些软件包又做了二次管理,例如同一名字但是版本不同的软件包,还有某几个软件包划分为一个组,整体安装等等。由于Hulk同时记录着服务器集群的信息,因此,将这二者整合,就实现了对任意服务器集群,选装任意的软件包。
“对任意服务器集群,选装任意的软件包”,是如何实现的呢?
我们通过Hulk作为控制中心,把这些“配置”信息发送给另外一个基于Puppet构建的系统。而我们的Puppet系统是采用Master-Agent架构,Master集群多机房部署,可以水平扩展,自己开发的众多Puppet Module部署于Master集群,不同的Module实现不同的配置逻辑,受控服务器(Agent)就近与Master集群通信,获取配置、完成配置、汇报结果。
除了Hulk主动触发的配置任务,Agent上还有定期的配置同步机制。简单说,就算误删除了一个核心软件,不用任何人为干预,也会把该软件补回成删除之前的状态。
另外,配置的同步都是批量进行的(上百台机器的集群很常见),为此,我们实现了灰度上线,“新配置”会先同步到一台服务器上,在成功且测试之后,就可以选择批量同步了,如果不成功,还可以回滚至旧配置。
(本文未完,待续。请继续关注51CTO,后面将呈现更精彩的内容!)
关于作者:
孔德亮(微信号:randykong),奇虎360云事业部总监,跨领域技术专家,现任360私有云、公有云项目负责人。
孔德亮2009年加入奇虎360,随着360业务快速发展,他也开始了内部创业之旅,先后负责应用运维、DBA、基础架构等工作,通过逐步积累形成了私有云平台。众所周知,运维的工作“脏、苦、累”,一旦出现问题,运维人员似乎永远是那个背黑锅的人,所以,他希望能够将技术产品化,使业务团队在借助云平台的力量,缩短研发周期、降低运维成本,同时能让IT技术人员在灵活的操作体验中感受愉悦。