当前位置: 首页 > 科技观察

集中运维管理-Puppet管理之路

时间:2023-03-20 12:53:34 科技观察

大数据时代高扩展性和容错性的特点对运维提出了更高的要求。系统管理不再是厌倦安装操作系统、配置优化系统参数、打补丁、安装软件、配置软件、添加某项服务的时代。为了提高效率,避免重复工作,减少错误,积累知识,系统管理员开始做一些局部的自动化。但这些还远远不够。为了满足运维的要求,需要更彻底地应用自动化运维工具。本文将介绍如何使用配置管理自动化工具Puppet完成系统的安装、监控和告警工作,剖析Puppet给系统管理员带来的便利,同时介绍Puppet的架构和工作原理。从系统安装到自动化软件部署、配置和回滚,再到服务器可用性、性能和安全维护,都需要运维管理者全面掌握。为了有效地完成工作,熟悉几款优秀的开源软件是必不可少的。如表1所示。表1常用运维工具分类对于我来说,工具箱中最得心应手的工具是Kickstart、Puppet、Zabbix和Cacti。运维工作难点常见的运维工作流程包括:安装系统→优化系统和配置→安装软件→配置软件→添加监控→检查。以后可能会有增加服务→配置变更→打补丁修复漏洞等,你觉得繁琐吗?尤其是当你负责的设备很多,自己无法完成时,就需要一些工具来帮忙了。运维工作面临的各种不确定性更是让人头疼。在10台机器上改应用还是很简单的,但是如果增加到几千、几万台机器,就变得很复杂了。重复性的劳动也会让人感到疲倦和乏味,久而久之,他们也可能会厌倦工作。使用Puppet可以解决这些问题。自我自动化以提高工作效率和减少出错的机会。许多公司正在逐步采用自动化来实现上述任务。一些公司选择自己开发一套工具,因为可以根据自己的需要进行定制,但这真的有必要吗?让我们看看这样做的缺点。1.重新发明轮子:构建脚本的挑战和繁琐。2、无法保证程序的可维护性(语言)。3.支持不同平台。4、重装系统后的注意事项。整个系统的协调和规划需要很长时间,而且随着人员的流动,技能水平的高低不一,还会出现新的问题。而且,单独开发的系统不可能只支持一个平台——跨平台开发意味着更多的不确定性。自动化配置工具比较表2比较了两种最常用的自动化运维工具Puppet和Cfengine。表2Puppet和Cfengine的功能对比但是我真正想说的是:上面的对比意义不大,工具就是你怎么用,怎么用到最好,发挥它的优势,以及与您的业务相结合。我们不应该选择工具,而应该深入研究它。#p#Puppet分析在使用任何软件之前,我们都需要了解它的工作原理,否则会给后续的使用带来很多不便。Puppet采用非常简单的C/S架构,所有的数据交互都通过SSL进行,保证安全。其工作流程如图1所示。图1Puppet工作流程1.客户端Puppetd向Master发起认证请求,或者使用签名证书。2.Master告诉客户你是合法的。3、客户端Puppetd调用Facter,Facter检测主机的一些变量,如主机名、内存大小、IP地址等,Puppetd通过SSL连接将这些信息发送给服务器。4、服务器端的PuppetMaster检测客户端的主机名,找到manifest对应的节点配置,解析内容。Facter发送的信息可以作为一个变量进行处理,节点涉及到的代码被解析,其他不涉及的代码不解析。解析分为几个阶段。首先是语法检查。语法错误会报错;如果语法正确,解析将继续。解析的结果会生成中间的“伪代码”(catelog),然后将伪代码发送给客户端。.5.客户端收到“伪代码”并执行。6、client在执行过程中判断是否有File文件,如果有则向fileserver发起请求。7、客户端判断是否配置了Report,如果配置了,将执行结果发送给服务端。8、服务器端将客户端的执行结果写入日志,发送给上报系统。当一千多台服务器,当你的服务器越来越多的时候,你可能会发现Puppet的执行效率开始下降,服务器已经不能满足你的需求了。这里有几个选项可以解决这个问题。LoadBlancer使用非常简单的master扩展方案来提高master计算“伪代码”的能力。通常这种架构可以支持大约1000台服务器。当然,这也要看你的系统是否足够“复杂”。图2LoadBlancer方案该架构有两种常用的实现方式:Apache+Passenger和Nginx+Mongrel。本文将以后者为例,简要介绍其工作方式。1、PuppetMaster运行多个进程:PuppetMaster+Mongrel,端口18140PuppetMaster+Mongrel,端口18141PuppetMaster+Mongrel,端口18142PuppetMaster+Mongrel,端口181432。Nginx通过upstream为PuppetMaster实现负载均衡。Nginx监听8140端口,将文件传递以外的请求转发给上述四个PuppetMaster实例之一。Nginx会验证客户端证书,但是CA颁发的证书需要配置为允许请求。我们也可以然后配置8141来提供证书颁发。3.如果使用fileserver,Nginx也可以直接处理。#p#Puppet认证负载均衡只有多个master就够了吗?一台机器还是有风险的,所以我们需要有容错能力,把master分布在不同的机器上,CA认证也是很重要的一环,我们可以用下面的架构来做热备份。如图3所示。这种架构还可以扩展。我们再回顾一下Puppet的工作原理;Puppet客户端和Nginx使用HTTPS连接,Nginx和各个Mongrel之间的连接使用HTTP连接。Nginx负责客户端证书的校验,Nginx只需要CA的公钥来做校验。这样做的好处是不需要在多台管理机之间同步客户端证书等设置,只需要CA的公钥,公钥可以复制使用。但这有一个缺点:删除客户端证书不是很方便。但是可以使用一台master管理机,其他管理机会实时从这台管理机同步证书。图3Puppet认证负载均衡方案Puppet管理机集群的思路如下:1.将CA配置同步到每台机器上,包括公钥和私钥;2、使用CA为每台管理机颁发证书;3、各管理机LoadBalancer的方式,8140提供配置管理,8141提供证书颁发;4、管理机之间可以使用keplived实现高可用和故障转移,包括HA等,架构可以随意扩展;5.各管理机配置分发有Production和Development两种,简单的通过Git发布到管理机;6、测试时只修改Development部分,指定给个别客户端,成功后推送到Production;7、配置一台主CA管理机,解决删除认证问题。#p#合理规划所有的事后救援计划都不如使用前的合理规划。你需要非常清楚现在的业务状态和运维的现状。知道自己需要解决什么问题,然后分解,一步步分解。推荐使用Git来管理Puppet;标准化HostName,采用DNS管理;fileServer是独立的,不经常变化的放在fileserver,经常变化的放在templates;与自定义操作系统通信。很多人可能不明白为什么要定制操作系统。它最大的优点是可以帮助你在系统初始化和安装过程中制作一些Puppet需要的软件包。通过购买设备时获得的SN号,可以在WebUI系统中显示。注册本机信息,开机后即可完成所有配置。如果你的WebUI比较好,可以调用监控系统的API来完成监控。这不是很***吗?结语相信看完本文后,您不仅会对Puppet有一个整体的了解,同时也会更加熟悉自动化运维的要点。可能会让你开始考虑使用Puppet来解决自己运维工作中很多重复性的工作,或者解决你现在面临的架构问题。想对很多想学习Puppet或者正在使用Puppet的系统管理员说,工作原理非常重要。很多人就是不了解工作原理,所以在使用过程中遇到问题就手忙脚乱。读者朋友一定要开动脑筋解决问题。作者为linuxtone.org创始人之一,新浪微博平台运维总监刘宇。负责新浪微博、新浪视频、看点、微盘、音乐等业务的CDN运维。写了《Puppet集中化管理》。