Puppet自动化集群管理基础篇

开发 开发工具 架构 自动化
Puppet作为开源的集群管理框架,有着简单易用、快速部署、使用范围广等特性,已经积累了超过250家的用户,包括阿里巴巴、新浪、Oracle等大公司。本文作者将带领大家了解puppet技术及其简单的应用。

Puppet作为开源的集群管理框架,有着简单易用、快速部署、使用范围广等特性,已经积累了超过250家的用户,包括阿里巴巴、新浪、Oracle等大公司。本文作者将带领大家了解puppet技术及其简单的应用。

背景简介

在传统的服务器集群管理中,每增加一台服务器,都需要对该服务器进行相应的配置。如果服务器数量少,那逐一对服务器进行配置是没问题的。但是在目前的生产环境中,服务器数量动辄就是成千上万台。传统的集群管理方案耗时耗力,已无法快速有效的适应生产环境的需求。目前,在公司内部存在3万多台的web服务器,如何对其进行快速部署成为公司内部亟待解决的问题。主要需求包括:

  • 突然有一天,某机房DNS出问题了,需要换个DNS。
  • 基于某个模板的业务快速上线。
  • Apache的配置需要将robots文件的配置修改。
  • 快速安装某个软件某个模块。
  • 修改了某个配置,需要重启对应服务。
  • 某天我们对某台机器做某个测试修改了配置,又某天我们对另外一台机器测试又修改了一个配置,越积越多。

如何快速的解决以上情况所引起的生产环境失效的问题,我们对自动化集群管理工具puppet进行了调研,从软件包、配置文件和服务三种类型的资源出发,对服务器集群进行了自动化管理设计。

puppet

1. Puppet是什么

Puppet是一种跨平台、C/S架构的集中配置管理系统,可以用于管理linux、windows、unix、mac等平台下的用户、软件包、文件、服务和cron任务等,并且可以妥善处理资源之间的依赖关系。其使用ruby语言开发,但是使用者并不需要了解ruby语言,因为其仅仅依赖于一种以pp为后缀的文件,在puppet框架搭建好后,就只剩下模块的开发,模块开发采用描述性语言和基本的逻辑控制语句,简单易懂,非常适合于管理和部署大规模的集群系统。

2. Puppet架构

Puppet使用C/S架构,分为puppet server(master)和puppet client(agent)。master是配置和管理中心,管理着所有的节点。系统管理员需要在master上编写每个节点所对应的pp文件来描述不同节点的资源集合和目标状态。各个agent会周期性的查询master,来获取自己的配置,并将结果以报告的形式传送给master。

puppet

puppet使用ssl认证,在client与master通讯认证通过后,证书会存储在master上,当仅有一台master时,这不会产生问题。但是,在我们的设计中,为了保证高可用和高并发,master是集群,master集群的前面是负载均衡,同一client与master多次通信时,无法保证连接的是同一个master,也就是说无法保证证书的获取。为此,puppet官方建议搭建单独的CA认证服务器,从而实现证书的统一中心化管理。因此在大规模集群管理系统中,常见的puppet架构如上图,本公司同样也采用了该架构搭建集群管理系统。

3. Puppet工作流程

Puppet既可以单机运行,也可以通过C/S架构的方式运行,不过在大多数情况下还是基于C/S架构的方式来运行,其交互过程如下图所示。

puppet

  • agent通过ssl向master建立认证。
  • 建立认证后,puppet调用agent的facter,探测出主机的一些内置变量,如主机名、系统版本号、ip地址和负载等信息。Agent将这些信息通过ssl加密发送到master端。
  • Master接收到agent的主机信息请求后,根据域名或ip地址将他们发送到本机的manifests或ENC,进行节点配置信息的查询。
  • 在解析过程中,首先进行语法检查,如果有语法错误,则停止,返回错误信息,否则继续解析生成catalog。
  • Puppet客户端agent对服务端生成的catalog进行应用。
  • Puppet客户端agent对catalog进行代码验证并执行,并将结果记入日志。
  • 将agent信息以报告的形式上报master。
  • 流程结束。

4. Puppet安装与配置

基于公司内部已有的DNS域名解析和LVS负载均衡服务,围绕puppet的整个集群管理系统架构图,在centos环境下,puppet安装与配置方法如下:

(1) Master

目前使用了4台master用于管理15000台左右的服务器,如果后期master压力增大,再适当的扩容。配置步骤如下:

1)安装puppet的相关包,包括puppet-server、Apache、mod_ssl、mod_passenger。

puppet

在安装以上包的同时,系统会自动安装facter包和一些ruby依赖包。

2)编辑 /etc/puppet/puppet.conf配置文件。

puppet

3)复制CA服务器上的证书,主要是打包CA服务器上的ssl目录,并放到master上的ssl目录下。

4)初始化master,生成必须文件。

puppet

5)建立/etc/httpd/conf.d/puppet.conf配置文件。

puppet

6)创建虚拟主机的DocumentRoot。

puppet

7)启动puppet。

puppet

2. CA

将master和agent的认证机制放在单独的CA服务器上,可以方便master集群的管理和扩容。配置步骤如下:

1)安装puppet的相关包,包括puppet-server、Apache、mod_ssl、mod_passenger。

puppet

2)编辑/etc/puppet/puppet.conf配置文件。

3)创建/etc/puppet/autosign.conf配置文件,如果内容是“*”,表示所有主机都可访问。

puppet

4)启动一下puppet master,实现初始化,生成key和自认证。

puppet

5)为master服务器生成证书。

6)建立/etc/httpd/conf.d/puppet.conf配置文件,文件的设置参照master的配置。

7)创建虚拟主机的DocumentRoot,参照master的配置。

8)启动puppet,参照master的配置。

3. Agent

Puppet客户端安装比较简单,配置步骤如下:

1)安装puppet的相关包,包括addops-puppet、addops-puppet-agent-extra(公司内部包)。其中第一个包为yum源包,第二个包为puppet的扩展包,其依赖于puppet包,并且会自动修改配置文件中的ca_server、server和node_name_value三个变量的值。

2)测试运行:puppet agent --test,默认同步的环境为production,可以手动添加环境参数,如--environment=staging,即可改为临时环境。

5. Puppet配置解读

puppet的主配置文件puppet.conf位于/etc/puppet/(社区版)目录下,其中主要包含了main、master和agent三个命名空间,依次介绍如下:

1)main通用配置选项

  • confdir:配置文件存放目录,默认在/etc/puppet。
  • vardir:动态数据存放目录,默认在/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:当有自定义facter变量时,需要指定该值为true。
  • ca_server:认证服务器的名称。

2)Master服务端配置选项

  • user:后台进程执行的用户。
  • group:后台进程执行的组。
  • certname:进行ssl认证时的变量名,默认为主机名。
  • node_name_value:节点名称,默认为主机名。
  • mainfest:mainfest站点文件的名字,默认为site.pp。
  • bindaddress:后台进程绑定的网卡地址接口。
  • masterport:后台进程执行的端口,默认为8140。
  • ca:当认证服务器位于单独的服务器上时,需要指定该值为false。

3)Agent客户端配置选项

  • classfile:显示从服务端加载到的类列表。
  • localconfig:本地缓存配置目录。
  • runinterval:客户端的检测时长,默认为30分钟检测一次。
  • listen:监听进程,用于监听服务端下发的同步信息。
  • report:值为true时,向master端发送报告。
  • node_name_value:节点名称,默认为主机名。
  • certname:认证名称,默认为主机名。
  • Server:master的认证名称,即certname变量的值。

6. Puppet资源简介

资源是puppet系统的核心,抽象的足够彻底,相似的资源被抽象成了一种资源类型,如程序包资源、文件资源、服务资源和exec资源等。资源属性与其实现方式剥离开来,仅仅描述资源的状态,而不是其具体的实现过程,即可达到资源的同步。

(1) 资源定义

资源定义即向资源类型的属性赋值,也称为资源类型的实例化。资源的定义在pp文件中完成,其目录结构一般如下所示:

puppet

Files文件夹用于存放该软件包的配置文件,manifests文件夹用于存放资源的实例,即类文件,templates用于存放模板。

定义的资源语法如下:

puppet

Type即为资源的类型,比如程序包资源package,文件资源file等,title是一个字符串,在同一类型中必须唯一,每个属性用“,”隔开。通过将class、条件控制语句与资源的定义相结合,即可实现资源的模块化,达到易复用的效果。

(2) 常用资源

基于公司内部运维组的需求,puppet主要从程序包、配置文件、服务、exec四个方面展开应用,本文主要对前两种资源展开介绍。另外,我们可以利用“Puppet describe 资源名称”命令查看资源的详细描述。

1)程序包package

puppet

Package资源的描述如上图所示,下来我们将对package资源的主要属性进行介绍:

  • name:包名,可以省略,如果省略,将继承title的值。
  • ensure:指定软件包的状态,安装、卸载还是升级。需要卸载时,指定为“absent”;需要保证新版本时,指定为“latest”;需要保证某一版本时,指定为版本号。
  • source:指定程序包的来源。如果本地yum仓库已经包含该包,则可以不指定。
  • provider:指明安装方式。

使用案例如下:

puppet

其中,package_name和package_ensure是传入的参数值,通过对属性以参数的形式赋值,可以大大提高模块的复用性。

2)配置文件file

file资源的描述如上图所示,下来我们将对file资源的主要属性进行介绍:

  • ensure:文件的状态,值有absent、present、file、directory和link。
  • path:文件路径,不指定时为title的值。“ensure=>absent”共用。
  • owner:文件的属主。
  • Group:文件的属组。
  • Mode:文件的权限。
  • Source:文件来源。

使用案例如下:

服务和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.html
  • https://www.cnblogs.com/keerya/p/8040071.html#_label0_2
  • https://blog.51cto.com/superleedo/1899823
  • https://www.ibm.com/developerworks/cn/opensource/os-cn-puppet/index.html

【本文是51CTO专栏机构360技术的原创文章,微信公众号“360技术( id: qihoo_tech)”】

戳这里,看该作者更多好文

 

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2012-05-04 19:45:30

puppet自动化运维

2012-05-05 22:27:46

puppet自动化运维

2012-05-05 21:22:40

2012-05-05 21:48:43

puppet自动化运维

2012-05-05 21:43:27

puppet自动化运维

2012-05-05 21:03:35

puppet自动化运维

2012-05-05 22:10:13

puppet自动化运维

2013-04-16 14:55:21

自动化运维Puppet实战

2012-05-05 21:28:44

2014-08-04 17:30:57

自动化运维puppet

2015-12-30 14:50:45

Kubernetes容器技术Docker

2014-08-04 10:10:35

IT运维自动化运维

2010-11-08 09:15:46

Puppet入门教程自动化

2015-10-21 15:08:25

电缆自动化

2015-09-16 11:13:51

ChefWindows集群运维

2010-12-06 09:59:58

2013-10-25 09:18:56

StarCluster服务器集群管理自动化Amazon云

2011-08-02 11:31:35

Cfengine系统管理

2022-02-22 10:58:45

闭环自动化网络

2017-12-17 21:58:18

点赞
收藏

51CTO技术栈公众号