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

Puppet自动化集群管理基础

时间:2023-03-13 15:07:23 科技观察

Puppet作为一个开源的集群管理框架,具有简单易用、部署速度快、使用范围广等特点。积累了超过250个用户,包括阿里巴巴、新浪、甲骨文等大公司。.本文作者将带领大家了解傀儡技术及其简单应用。背景介绍在传统的服务器集群管理中,每增加一台服务器,都需要对服务器进行相应的配置。如果服务器数量少,一台一台配置服务器是没有问题的。但是在现在的生产环境中,服务器的数量动辄上万台。传统的集群管理方案费时费力,无法快速有效地适应生产环境的需求。目前,公司有3万多台Web服务器,如何快速部署成为公司内部亟待解决的问题。主要需求包括:突然有一天,某机房的DNS出问题了,需要更改DNS。基于模板的业务可以快速上线。Apache的配置需要修改robots文件的配置。快速安装某个软件的模块。如果修改了配置,需要重启相应的服务。一天我们在某台机器上做了某项测试,修改了配置,又一天又测试了另一台机器,修改了一个配置,越积越多。如何快速解决上述情况导致的生产环境故障,我们对自动化集群管理工具puppet进行了研究,从软件包、配置文件、服务三类资源设计了服务器集群的自动化管理。1.什么是傀儡?Puppet是一个跨平台、C/S架构的集中式配置管理系统。可用于管理linux、windows、unix、mac等平台的用户、软件包、文件、服务、cron任务等。并能妥善处理资源之间的依赖关系。它是用ruby语言开发的,但是用户不需要懂ruby语言,因为它只依赖一个以pp为后缀的文件。Puppet框架搭建完成后,只剩下模块的开发,模块开发采用描述性语言和基本逻辑控制语句,简单易懂,非常适合管理和部署大型集群系统。2.Puppet架构Puppet采用C/S架构,分为puppetserver(master)和puppetclient(agent)。Master是配置管理中心,管理所有节点。系统管理员需要在master上编写每个节点对应的pp文件,描述不同节点的资源收集和目标状态。每个agent会周期性的向master查询获取自己的配置,并将结果以报告的形式发送给master。Puppet使用ssl身份验证。client与master通信认证通过后,证书将保存在master上。当只有一个master时,这不会造成问题。但是在我们的设计中,为了保证高可用和高并发,master是一个集群,master集群的前端是负载均衡。当同一个client多次与master通信时,不能保证连接的是同一个master,也就是说不能保证获取到证书。为此,puppet官方推荐搭建单独的CA认证服务器,实现证书的统一集中管理。因此,在一个大型的集群管理系统中,常见的puppet架构如上图所示,我们公司也是采用该架构搭建集群管理系统。3.Puppet工作流程Puppet可以在单机上运行,??也可以通过C/S架构运行,但大多数情况下还是基于C/S架构。交互过程如下图所示。代理通过ssl建立对主服务器的身份验证。认证建立后,puppet调用agent的facter检测host的一些内置变量,如主机名、系统版本号、ip地址和负载。Agent通过ssl加密将信息发送给master。Master收到agent的主机信息请求后,根据域名或ip地址发送到本机manifest或ENC,查询节点配置信息。在解析的过程中,首先检查语法,如果有语法错误,则停止并返回错误信息,否则继续解析生成目录。Puppet客户端代理应用服务器生成的目录。Puppet客户端代理验证并执行目录上的代码,并将结果记录在日志中。将代理信息以报表的形式上报给master。该过程结束。4.Puppet安装配置基于公司已有的DNS域名解析和LVS负载均衡服务,围绕puppet的整个集群管理系统架构图,在centos环境下,puppet安装配置方法如下:(1)掌握目前使用4个master用于管理大约15,000个服务器。如果后面master压力增大,适当扩容。配置步骤如下:1)安装puppet相关包,包括puppet-server、Apache、mod_ssl、mod_passenger。在安装上述包的同时,系统会自动安装facter包和一些ruby依赖包。2)编辑/etc/puppet/puppet.conf配置文件。3)复制CA服务器上的证书,主要是将CA服务器上的ssl目录打包,放到master上的ssl目录下。4)初始化master并生成必要的文件。5)创建/etc/httpd/conf.d/puppet.conf配置文件。6)创建虚拟主机的DocumentRoot。7)启动人偶。2、CA将master和agent的认证机制放在单独的CA服务器上,方便master集群的管理和扩展。配置步骤如下:1)安装puppet相关包,包括puppet-server、Apache、mod_ssl、mod_passenger。2)编辑/etc/puppet/puppet.conf配置文件。3)创建/etc/puppet/autosign.conf配置文件,如果内容为“*”,表示所有主机都可以访问。4)启动puppetmaster,实现初始化、生成密钥和自认证。5)为主服务器生成证书。6)创建/etc/httpd/conf.d/puppet.conf配置文件,该文件的设置参考master的配置。7)创建虚拟主机的DocumentRoot,参考master的配置。8)启动puppet,参考master配置。3、AgentPuppet客户端的安装比较简单,配置步骤如下:1)安装puppet的相关包,包括addops-puppet、addops-puppet-agent-extra(公司内部包)。第一个包是yum源码包,第二个包是puppet扩展包,依赖puppet包,会自动修改配置文件中的ca_server、server、node_name_value三个变量的值。2)测试运行:puppetagent--test,默认同步环境为production,可手动添加环境参数,如--environment=staging,可改为临时环境。五、Puppet配置解读Puppet的主要配置文件puppet.conf位于/etc/puppet/(社区版)目录下,主要包括main、master、agent三个命名空间,依次介绍如下:1)主要通用配置选项confdir:配置文件存放目录,默认在/etc/puppet.confvardir:动态数据存放目录,默认在/var/lib/puppet。logdir:日志存放目录,默认在/var/log/log。rundir:PID存放目录,默认在/var/run/puppet。statedir:状态存储目录,默认为$vardir/state。ssldir:SSL证书存放目录,默认为$vardir/ssl。trace:发生错误时显示跟踪信息,默认为false。filetimeout:检测配置文件状态变化的时间,单位秒,默认15秒。syslogfacility:指定syslog功能的级别,默认为daemon级别。manifestdir:系统启动文件存放目录,默认在/etc/puppet/manifests。basemodulepath:模块的存放目录,默认为/etc/puppet/modules,可以指定多个。pluginsync:当有自定义因子变量时,需要将此值指定为true。ca_server:认证服务器的名称。2)主服务器配置选项用户:执行后台进程的用户。group:执行后台进程的组。certname:ssl认证的变量名,默认为主机名。node_name_value:节点名,默认为主机名。mainfest:mainfest站点文件名,默认为site.pp。bindaddress:后台进程绑定的网卡地址接口。masterport:执行后台进程的端口,默认为8140。ca:当认证服务器位于单独的服务器上时,该值需要指定为false。3)代理客户端配置选项classfile:显示从服务器加载的类列表。localconfig:本地缓存配置目录。runinterval:客户端检测时长,默认为30分钟。listen:监听进程,用于监听服务器发送的同步信息。report:当该值为true时,向master发送报告。node_name_value:节点名,默认为主机名。certname:证书名称,默认为主机名。Server:master的认证名称,即certname变量的值。6.Puppet资源介绍资源是Puppet系统的核心,抽象的足够透彻。类似的资源被抽象成一种资源类型,如包资源、文件资源、服务资源、exec资源等。资源属性与其实现方法分离,仅通过描述资源的状态即可实现资源同步,无需描述其具体的实现过程。(1)资源定义资源定义是指给资源类型的属性赋值,也称为资源类型的实例化。资源的定义在pp文件中完成,其目录结构一般如下:Files文件夹用于存放软件包的配置文件,manifests文件夹用于存放资源实例,即类文件,templates用于存放模板。定义资源语法如下:Type为资源类型,如package资源包、file资源文件等。title为字符串,在同类型中必须唯一,各属性之间用“,”隔开.通过将类和条件控制语句与资源的定义相结合,可以实现资源的模块化,达到易于重用的效果。(2)常用资源基于公司内部运维团队的需求。Puppet主要应用在四个方面:package、configurationfile、service、exec。本文主要介绍前两种资源。另外,我们可以使用“Puppetdescriberesourcename”命令来查看资源的详细描述。1)包packagePackage资源的描述如上图所示。接下来介绍包资源的主要属性:name:包名,可以省略。如果省略,title的值将被继承。ensure:指定包的状态,是安装、卸载还是升级。需要卸载时,指定“不存在”;当需要保证新版本时,指定“latest”;当需要保证某个版本时,指定版本号。source:指定包的来源。如果本地yum仓库已经包含该包,则可以不指定。provider:安装方式。用例如下:package_name和package_ensure是传入的参数值,通过参数的形式给属性赋值可以大大提高模块的复用性。2)配置文件文件资源的描述如上图所示。接下来介绍文件资源的主要属性:ensure:文件的状态,取值有absent、present、file、directory和link。path:文件路径,不指定则为title的值。“确保=>缺席”共享。所有者:文件的所有者。组:文件的组。模式:文件的权限。来源:文件来源。用例如下:service和exec资源这里不再赘述,可以通过上述命令查看资源的详细介绍和参数的使用。从以上案例可以看出,使用puppet描述语言,结合常用的逻辑控制语句,可以快速开发出不同资源的类模块。结论随着服务器群规模的扩大,公司越来越关注自动化配置以降低管理部署的成本。Puppet作为一个开源的集群管理框架,使用简单,部署速度快,应用广泛。拥有超过250家用户,包括Zynga、Twitter、Citrix、Oracle、Shopzilla、Google、RedHat、新浪、阿里巴巴、豆瓣、好乐麦、趣游、PPTV等大公司。本文主要介绍puppet架构、安装方法,和资源使用案例,属于puppet集群管理的基础章节。随着puppet集群规模的扩大,未来我们将继续在puppet中引入facter工具、hiera工具、模块编写规范、master集群扩展等,逐步构建一个规模大、健壮的puppet自动化管理集群。相关文章:https://puppet.com/docs/puppet/6.4/puppet_index.htmlhttps://www.cnblogs.com/keerya/p/8040071.html#_label0_2https://blog.51cto.com/superleedo/1899823https://www.ibm.com/developerworks/cn/opensource/os-cn-puppet/index.html【本文为栏目组织原创文章360技术微信公众号》360技术(id:qihoo_tech)》】点此查看该作者更多好文