puppet是一种Linux、Unix平台的集中配置管理系统,所谓配置管理系统,就是管理机器里面诸如文件,用户,进程,软件包这些资源,其设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。它是一个客户端/服务器(C/S)架构的配置管理工具,在中央服务器上安装 puppet-server 服务器(puppet master),在需要被管理的目标服务器上安装 puppet 客户端软件(puppet client)。当客户端连接上服务器后,定义在服务器上的配置文件会被编译,然后在客户端上运行。客户端每隔半小时主动会和服务器通信一次,确认配置信息的更新情况,如果有新的配置信息(或者配置有变化),配置文件将会被重新编译并分发到客户端执行。当然,也可以在服务器上主动触发更新指令来强制各客户端进行配置更新。它要求所有机器有完整的域名(FQDN),如果没有 DNS 服务器提供域名的话,可以在两台机器上设置主机名(注意要先设置主机名再安装 Puppet,因为安装 Puppet 时会把主机名写入证书,客户端和服务端通信需要这个证书)。
这里使用两台机器(系统为centos6.2)作演示:master:192.168.0.212 client:192.168.0.107
亲,下面让我进入体验下吧~
1.配置好主机名以及时钟同步
1.1配置主机名:
[root@gyv8 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=gyv8
[root@gyv7 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=gyv7
[root@gyv7 ~]# echo ”192.168.0.107” > /etc/hosts;echo “192.168.0.212” >> /etc/hosts
[root@gyv8 ~]# echo “192.168.0.212” > /etc/hosts;echo “192.168.0.107” >> /etc/hosts
1.2设置时间同步(下面的操作在每台机器上都执行):
yum install ntp
chkconfig ntpd on
ntpdate pool.ntp.org
service ntpd start
或者使用笨办法:
date -s 09/12/2013
date -s 13:01:30
clock -w
0 */1 * * * /usr/sbin/ntpdate 210.72.145.44> /dev/null 2>&1#在crontab里添加该行
2.安装puppet服务
2.1由于puppet需要ruby的支持,所以在安装puppet之前先安装ruby环境:
yum -y install rubyruby-libs ruby-rdoc ruby-devel
2.2 puppet不在 CentOS 的基本源中,需要加入 PuppetLabs 提供的官方源:
wgethttp://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
yum -y installpuppetlabs-release-6-1.noarch.rpm
yum update
2.3 安装puppet server:
[root@gyv8 ~]# yum -y install puppet-server
[root@gyv8 ~]# chkconfig puppet on
[root@gyv8 ~]# service puppetmaster start
关闭防火墙或者添加如下的规则:
[root@gyv8 ~]# /etc/init.d/iptables stop#service iptables stop
-A RH-Firewall-1-INPUT-m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT
2.4 安装puppet client:
[root@gyv7 ~]# yum -y install puppet
2.5 Puppet 客户端使用 HTTPS 和服务端(master)通信,为了和服务器端通信必须有合法的 SSL 认证,第一次运行 puppet 客户端的时候会生成一个 SSL 证书并指定发给 Puppet 服务端:
[root@gyv7 ~]# puppet agent --no-daemonize --onetime --verbose--debug --server=gyv8
2.6 Puppet 服务端接受到客户端的证书后必须签字(sign)才能允许客户端接入,sign 后用 puppet cert list �Call 查看会发现 client.vpsee.com 前面多了一个 + 后,表示 “加入” 成功:
[root@gyv8 ~]# puppet cert list --all
[root@gyv8 ~]# puppet cert --sign gyv7
[root@gyv8 manifests]# puppet cert list --all #出现下面“+”表示OK
+ "gyv7" (SHA256)
A7:F1:51:72:FE:4F:B5:B4:F7:57:33:06:60:CB:9F:4C:90:7F:98:17:E0:68:AF:DE:A6:2E:0C:39:09:9C:66:6D
+ "gyv8" (SHA256)
D8:45:19:68:86:1A:13:8A:81:B3:41:CF:9F:65:BA:30:4A:D8:E9:D6:82:BD:0A:0A:BC:A9:6D:63:43:2F:8C:B1
这样,客户端和服务端就配置好了,双方可以通信了。
3. 检验
现在可以在服务端写个小例子来测试一下。这个例子作用很简单,用来在客户端的 /tmp 目录下新建一个 linuxblind.txt 文件,内容为 hello, Mr.linuxblind!. 在服务端编写代码:
[root@gyv8 ~]# cat /etc/puppet/manifests/site.pp
node default {
file {
"/tmp/linuxblind.txt":
content => "hello, Mr. linuxblind!\n";
}
}
在客户端上执行 puppet,运行成功后会在 /tmp 看到新生成的linuxblind.txt:
[root@gyv7 ~]# puppet agent --test --server=gyv8
Info: Retrieving plugin
Info: Caching catalog for gyv7
Info: Applying configuration version'1378965936'
Notice: Finished catalog run in 0.05seconds
[root@gyv7 ~]# cat /tmp/linuxblind.txt
hello, Mr. linuxblind!
设置客户端的守护进程:
[root@gyv7 ~]# puppet agent --test --server=gyv8 --verbose --waitforcert 60 # --server=gyv8:指明puppet server节点,--verbose:输出冗余信息,--waitforcert 60:连接server检查的时间间隔为60分钟。