Puppet使用概述1(安装篇)

       随着系统平台规模的不断壮大,系统环境也变得越来越复杂,需要管理的设备也越来越多,这时候仅仅使用脚本维护已经慢慢的有些吃力了,比较明显的是系统管理的效率比较差、出错率增大。这时候集中管理工具的优势就很明显了。 集中管理配置工具有很多,比如puppet,cfengine,chef,saltstack等,本文主要简单介绍下puppet。

一、 puppet 系统架构

       Puppet是开源的基于Ruby的系统配置管理工具,puppet是一个C/S结构, 当然,这里的C可以有很多,因此,也可以说是一个星型结构. 所有的puppet客户端同一个服务器端的puppet通讯. 默认情况下每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置服务器. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息. 下图展示了一个典型的puppet配置的数据流动情况


二、 puppet工作流程


1.客户端Puppet向Master发起认证请求,或使用带签名的证书。

2.Master为Client签名授权。

3.客户端Puppetd调用Facter,Facter探测出主机的一些变量,例如主机名、内存大小、IP地址等。Puppet将这些信息通过SSL连接发送到服务器端。

4.服务器端的Puppet Master检测客户端的主机名,然后找到manifest对应的node配置,并对该部分内容进行解析。Facter送过来的信息可以作为变量处 理,node牵涉到的代码才解析,其他没牵涉的代码不解析。解析分为几个阶段,首先是语法检查,如果语法错误就报错;如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”(catelog),然后把伪代码发给客户端。

5.客户端接收到“伪代码”,并且执行。

6.客户端在执行时判断有没有File文件,如果有,则向fileserver发起请求。

7.客户端判断有没有配置Report,如果已配置,则把执行结果发送给服务器。

8.服务器端把客户端的执行结果写入日志,并发送给报告系统。


三、 puppet的安装使用

下面是3台服务器的基本环境,使用CentOS 6.4 x64默认发行版本,内核版本2.6.32-358.el6.x86_64,Master作为puppet服务器,Client1/Client2作为puppet客户端

1.配置DNS解析

Master、Client1/2操作:

Puppet要求所有机器有完整的域名(FQDN),由于测试环境没有搭建DNS服务器,所以直接修改hosts配置解析(注意要先设置主机名再安装 Puppet,因为安装 Puppet 时会把主机名写入证书,客户端和服务端通信需要这个证书)

vi/etc/hosts

192.168.100.100    master master.test.com

192.168.100.201    test1  test1.test.com

192.168.100.202    test2  test2.test.com

修改/etc/resolv.conf

默认search域为localdomain,所以需要指定search域为test.com

sed -i 's@^search.*@search test.com@g' /etc/resolv.conf


2.配置时间同步

Master、Client1/2操作:

Puppet 要求所有机器上的时钟保持同步,所以需要安装和启用 ntp 服务

yum -y install ntp

chkconfig ntpd on

service ntpd start

ntpdate time.nist.gov

echo "* */12 * * * root /usr/sbin/ntpdate time.nist.gov >/dev/null &" >>/etc/crontab


3.安装 puppet 服务

Master、Client1/2操作:

a.Puppet 需要 Ruby 的支持,所以需要先安装ruby环境

yum -y install ruby*

Puppet 不在CentOS 的基本源中,需要加入 PuppetLabs 提供的官方源:

yum -y install wget

wget http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm

rpm -ivh puppetlabs-release-6-7.noarch.rpm


b.设置防火墙和Selinux

chkconfig iptables off

service iptables stop #或者开放8139、8140

sed -i 's@SELINUX=.*@SELINUX=disabled@g' /etc/selinux/config #需要重启生效


Master操作:

a.安装Facter

Facter用来获取客户端系统信息(如主机名、ip、系统版本等,并作变量使用)

yum -y install facter


b.安装Puppet服务端

yum install puppet-server

chkconfig puppet on

service puppetmaster start


Client1/2操作:

a.安装 puppet 客户端(已安装ruby和puppet源)

yum install puppet


b.配置puppet

对于puppet 客户端,修改/etc/puppet/puppet.conf,添加如下参数:

server= master.test.com  #指定Master地址

listen= true  #监听端口8139

report= true #开启report

runinterval= 600 #设置自动同步时间600秒

service puppet restart


4.设置证书

Puppet 客户端使用SSL 和master通信,为了和服务器端通信必须有合法的 SSL 认证,第一次运行 puppet 客户端的时候会生成一个 SSL 证书并指定发给 Puppet 服务端。

Client1/2操作:

客户端请求证书

puppet agent --server=master.test.com

为了详细了解注册的过程及方便排错,可以考虑增加如下参数:

--no-daemonize #前台输出日志

--verbose#输入更加详细的日志

--debug#更加详细的日志,排错的时候使用

--test #表示测试

puppet agent --no-daemonize --verbose --server=master.test.com


Master操作:

Puppet 服务端收到客户端的证书后必须签字(sign)才允许客户端接入(如果使用后面的自动签名证书,则此步骤可跳过)

puppet cert list --all

puppet cert--sign test1.test.com

puppet cert--sign test2.test.com

puppet cert list --all #注意前面的+

至此,客户端和服务端就配置完成。

服务端自动签发证书设置:
自动签名可减少在Master上的签名操作,但也有可能带来其他隐患(比如同一个授权域名内全部有效),设置master自动签发所有的证书,只需要在/etc/puppet 目录下创建 autosign.conf 文件,添加授权的域名即可

echo "*.test.com" >>/etc/puppet/autosign.conf

这样就会对所有来自test.com的机器的请求,都自动签名而不需要在Master上一个一个签名。


5.测试Puppet

在服务端创建配置文件,用来在客户端的 /tmp 目录下创建check.txt文件,内容为A file,用户、用户组为nobody,权限为0600

Master操作:

# vi/etc/puppet/manifests/site.pp

node default {

       file { "/tmp/check.txt":

       ensure => file,

       content => "A file.\n",

       owner => 'nobody',

       group => 'nobody',

       mode => 0600,

       }

}

Client1/2操作:

手动同步服务器配置:

puppet agent -t

puppet默认设置自动时间已经设置为600秒

查看客户端文件状态

可以看到,客户端已经获取服务器端的配置更改。Master和Client已经建立同步...



你可能感兴趣的:(puppet,运维自动化)