规划:

    node1.9527du.com(192.168.60.22)  为 puppet master 端

    node2.9527du.com(192.168.60.128) 为 puppet agent  端

    node3.9527du.com(192.168.60.134) 为 puppet agent  端

目的:

    为node2.9527du.com节点安装LAMP平台,安装完成之后,使用kick机制升级该节点bash的程序包;

    为node3.9527du.com节点安装MySQL数据库服务。

该实验的模块如下图:

自动化运维工具puppet的使用_第1张图片

一、因为 puppet 工作在:master/agent 模型。各节点之间的通讯是基于主机名称的。所以,要使用到DNS地址解析服务器。

这里为了方便,使用hosts文件来解析主机名。

1、在主节点配置好hosts文件。

[root@node1 ~]# cat /etc/hosts
192.168.60.22   node1.9527du.com node1
192.168.60.128   node2.9527du.com node2
192.168.60.134   node3.9527du.com node3

2、复制该hosts文件到另外两个节点。

[root@node1 ~]# scp -p /etc/hosts 192.168.60.128:/etc/
[root@node1 ~]# scp -p /etc/hosts 192.168.60.134:/etc/

3、在分布式系统应用中首先要保证各节点的时间同步。

[root@node1 ~]# hostname;date;ssh node2.9527du.com 'hostname;date'; ssh node3.9527du.com 'hostname;date'
node1.9527du.com
Sun Oct 12 23:12:20 CST 2014
node2.9527du.com
Sun Oct 12 23:12:27 CST 2014
node3.9527du.com
Sun Oct 12 23:12:02 CST 2014

二、puppet master 端的安装配置

1、所需要安装的程序包:

[root@node1 puppet]# rpm -qa | grep -e "puppet" -e "facter"
facter-1.6.18-3.el6.x86_64
puppet-2.7.25-1.el6.noarch          -----> puppet agent 端程序包
puppet-server-2.7.25-1.el6.noarch   -----> puppet master 端程序包

说明:

   当puppet agent端向puppet master 端请求 katalog 文件时,会发送sends:节点名称node names和facts.

   而facts就是puppet agent所在主机的一些信息。如:

[root@node1 puppet]# facter | grep -e 'lsbdistdescription' -e "osfamily"
lsbdistdescription => CentOS release 6.5 (Final)
osfamily => RedHat

说明:

    puppet master 也就是根据agent发送过来的这些信息来。选择安装程序包使用的工具的。

 facter-1.6.18-3.el6.x86_64 就是收集这些信息的。


2、让 puppet master 端,运行在前台,并详细显示初始化时候信息,观察puppet master工作是否OK?

[root@node1 ~]# puppet master -v   --no-daemonize
info: Creating a new SSL key for ca
info: Creating a new SSL certificate request for ca
info: Certificate Request fingerprint (md5): E2:86:B9:E4:51:45:00:F9:89:0E:D3:80:AC:6D:47:A6
notice: Signed certificate request for ca
notice: Rebuilding inventory file
info: Creating a new certificate revocation list
info: Creating a new SSL key for node1.9527du.com
info: Creating a new SSL certificate request for node1.9527du.com
info: Certificate Request fingerprint (md5): 10:41:62:36:4F:6D:D0:6B:66:6D:F6:87:68:E1:43:FF
notice: node1.9527du.com has a waiting certificate request
notice: Signed certificate request for node1.9527du.com
notice: Removing file Puppet::SSL::CertificateRequest node1.9527du.com at '/var/lib/puppet/ssl/ca/requests/node1.9527du.com.pem'
notice: Removing file Puppet::SSL::CertificateRequest node1.9527du.com at '/var/lib/puppet/ssl/certificate_requests/node1.9527du.com.pem'
notice: Starting Puppet master version 2.7.25

说明:

    puppet工作在:master/agent模型,puppet master端与agent端通讯使用的是SSL加密协议进行通讯的。所以,各节点的认证是通过CA颁发的证书来互相认证对方的身份。

所以,在有个CA为puppet节点签署证书才可以的。其实,puppet master 既是CA又是master端。所以初始化,puppet master 端时,首先生成CA需要的证书,再为node1.9527.com

节点生成证书。

3、如果,第2步没有问题的话,Ctrl + c 关闭掉,再以后台方式启动。

[root@node1 ~]# service puppetmaster start
Starting puppetmaster:                                     [  OK  ]

4、查看puppet master 端监听的端口。

[root@node1 ca]# ss -anptl | grep puppet
LISTEN     0      5                         *:8140                     *:*      users:(("puppetmasterd",2084,5))
[root@node1 ~]# netstat -anptl | grep ruby
tcp        0      0 0.0.0.0:8140                0.0.0.0:*                   LISTEN      3179/ruby


三、在 node3.9527.du.com 节点安装配置 puppet agent 端;

1、puppet agent 端所需要安装的程序包;

[root@node3 2.7.25]# rpm -qa | grep -e "puppet" -e "facter"
facter-1.6.18-3.el6.x86_64
puppet-2.7.25-1.el6.noarch

2、让 puppet agent 端以前台方式运行,并使用【-v】选项输出运行时的详细信息。

[root@node3 2.7.25]# puppet agent --server=node1.9527du.com -v --no-daemonize
info: Creating a new SSL key for node3.9527du.com  -----> 生成该节点SSL key密钥
info: Caching certificate for ca
info: Creating a new SSL certificate request for node3.9527du.com
info: Certificate Request fingerprint (md5): 84:80:BF:44:8B:EE:29:00:F8:E4:F5:14:AE:34:52:F1  ------> 请求puppet master签署证书

说明:

    使用:【--server】选项,指定该agent端属于哪个 puppet master的。

    说明:其实agent端初始化的时候,也就是生成节点证书,请求 puppet master 端签署证书的。

3、puppet master 端CA签署证书

(1)、查看puppet master端是否收到node3.9527du.com节点的签署证书的请求

[root@node1 ~]# puppet cert --list
  "node3.9527du.com" (84:80:BF:44:8B:EE:29:00:F8:E4:F5:14:AE:34:52:F1)

(2)、puppet master 端的CA签署node3.9527du.com节点的证书

[root@node1 ~]# puppet cert --sign node3.9527du.com
notice: Signed certificate request for node3.9527du.com
notice: Removing file Puppet::SSL::CertificateRequest node3.9527du.com at '/var/lib/puppet/ssl/ca/requests/node3.9527du.com.pem'

4、当node3.9527du.oom节点拥有证书后,就会向puppet master端发送catalog文件的请求了。

[root@node3 2.7.25]# puppet agent --server=node1.9527du.com -v --no-daemonize
info: Caching certificate for node3.9527du.com
notice: Starting Puppet client version 2.7.25
info: Caching certificate_revocation_list for ca
info: Caching catalog for node3.9527du.com
info: Applying configuration version '1413130794'
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished catalog run in 0.02 seconds

说明:

    重启puppet agent端,agent就会向puppet masterv 发送请求katalog文件。由于在puppet master端没有为该节点提供站点清单文件。

    所以,不会看到应用资源时候输出的信息。

    下面为,该节点node3.9527du.com提供站点清单文件。


4、为node3.9527du.com提供站点清单文件。

(1)、提供资源清单,且使用类(class)方式封装资源清单。

说明:该类的作用是安装mysql-server程序包,并为MySQL数据库服务提供定制的统一的配置文件。

自动化运维工具puppet的使用_第2张图片

(2)、制作站点清单文件:

wKiom1RDoFCzVdG7AACetdTcULw706.jpg

(3)、在site.pp文件中导入所有站点文件

自动化运维工具puppet的使用_第3张图片

5、测试

(1)、没有启动puppet agent端的情况下查看node3.9527du.com节点是不安装了mysql-server程序包。

[root@node3 ~]# rpm -qa | grep "mysql-server"

说明:

    从上述命令输出结果,得知。node3.9527du.com并没有安装mysql-server程序包。

(2)、启动puppet agent 端,让它运行在前台,使用-v选项输出运行时的一些信息,

说明:

    虽然默认puppet agent端每隔30分钟会向puppet master 端发送请求catalog文件的。

但每次启动或重启,puppet agent端,agent端都会向puppet master端发送请求catalog文件的请求的。

如下图:

自动化运维工具puppet的使用_第4张图片(3)、查看是否真的安装了程序包和mysqld服务真的启动了?

[root@node3 ~]# rpm -qa | grep "mysql-server"; netstat -anptl | grep "mysqld"
mysql-server-5.1.71-1.el6.x86_64
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      8848/mysqld

说明:

   该节点请求自己的站点清单文件,并应用。都是没有问题的。


四、在 node2.9527.du.com 节点安装配置 puppet agent 端;

1、puppet agent 端所需要安装的程序包;

[root@node2 ~]# rpm -qa | grep -e "puppet" -e "facter"
facter-1.6.18-3.el6.x86_64
puppet-2.7.25-1.el6.noarch

2、让 puppet agent 端运行在前台,并使用【-v】选项输出运行时的详细信息。

[root@node2 ~]# puppet agent --server=node1.9527du.com -v --no-daemonize
info: Creating a new SSL key for node2.9527du.com
info: Caching certificate for ca
info: Creating a new SSL certificate request for node2.9527du.com
info: Certificate Request fingerprint (md5): C5:90:09:58:7C:EB:20:E4:A6:7D:40:B8:5F:B2:A3:54

3、puppet master 端CA签署证书

(1)、查看puppet master端是否收到node3.9527du.com节点的签署证书的请求

[root@node1 ~]# puppet cert --list
  "node2.9527du.com" (C5:90:09:58:7C:EB:20:E4:A6:7D:40:B8:5F:B2:A3:54)

(2)、puppet master 端的CA签署node2.9527du.com节点的证书

root@node1 ~]# puppet cert --sign node2.9527du.com
notice: Signed certificate request for node2.9527du.com
notice: Removing file Puppet::SSL::CertificateRequest node2.9527du.com at '/var/lib/puppet/ssl/ca/requests/node2.9527du.com.pem'

4、为node2。9527du.com节点提供站点清单文件

(1)、为node2.9527du.com 节点提供资源清单1

自动化运维工具puppet的使用_第5张图片

(2)、为node2.9527du.com提供的资源清单2

自动化运维工具puppet的使用_第6张图片

(3)、为node2.9527du.com提供站点清单

wKiom1RDo_HggJ9hAAC6DVKs7ow247.jpg

5、测试

(1)、没有启动puppet agent端的情况下查看node2.9527du.com节点是否安装了lamp平台所需要的程序包。

[root@node2 ~]# rpm -qa | grep -e 'php-[0-9]' -e 'mysql-server' -e 'httpd-[0-9]'

(2)、启动puppet agent 端,让它运行在前台,使用-v选项输出运行时的一些信息,

自动化运维工具puppet的使用_第7张图片

(3)、查看是否真的安装了lamp 平台

[root@node2 ~]# rpm -qa | grep -e 'php-[0-9]' -e 'mysql-server' -e 'httpd-[0-9]'
mysql-server-5.1.71-1.el6.x86_64
httpd-2.2.15-29.el6.centos.x86_64
php-5.3.3-26.el6.x86_64
[root@node2 ~]# netstat -anptl | grep -e "httpd" -e "mysqld"
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      7744/mysqld        
tcp        0      0 :::8080                     :::*                        LISTEN      7846/httpd

说明:

   从上述测试结果得知,node2.9527du.com请求自己的站点清单文件是没有问题的,应用资源时也OK!!


五、把node2.9527du.com节点配置支持:kick。完成紧急升级bash程序包的任务。

    默认puppet agent 每隔30分钟,会向 puppet master 请求katalog文件。但是,有时候我们对服务器执行的配置维护操作需要立即生效的。

    如:我们的bash程序出现漏洞要升级所有服务器的bash程序包,不能等puppet agent端过来请求catalog文件。这时候就需要使用到puppet 的kick机制。把需要执行的任务,推送给puppt agent端。

1、把puppet agent端,配置成工作在kick模型。

(1)、puppet agent 要监听在某个套接字,等待puppet master端推送过来的数据。

[root@node2 ~]# cat /etc/puppet/puppet.conf | grep "listen"
    listen = true

(2)、配置访问控制

[root@node2 ~]# vim /etc/puppet/namespaceauth.conf
[puppetrunner]
allow *.9527du.com
[root@node2 ~]# vim /etc/puppet/auth.conf
path /
auth any

path /run
method save
allow node1.9527du.com

2、启动puppet agent端

[root@node2 ~]# service puppet start
Starting puppet:                                           [  OK  ]

查看puppet agent 监听的端口

[root@node2 ~]# ss -anpt | grep "puppet"
LISTEN     0      5                         *:8139                     *:*      users:(("puppetd",7928,5))

3、为node2.9527du.com节点提供站点清单文件

(1)、为node2。9527du.com节点提供的升级bash程序包的资源清单

自动化运维工具puppet的使用_第8张图片

(2)、在node2.9527du.com节点清单原来的基础上声明多一个类,该类的功能是升级bash程序的。

wKiom1RDpuew1NdgAADeMLp-ayA401.jpg


4、重新启动puppetmaster服务

[root@node1 ca]# service puppetmaster reload
Stopping puppetmaster:                                     [  OK  ]
Starting puppetmaster:                                     [  OK  ]

5、测试是否能够让node2.9527.com节点紧急升级bash程序

  提供的bash升级包为:

                   bash-4.1.2-15.el6_5.1.x86_64.rpm

(1)、puppet agent端升级前的bash程序包版本如下:

[root@node2 ~]# rpm -qa | grep bash
bash-4.1.2-15.el6_4.x86_64

(2)、puppet master 向node2.9527du.com节点推送任务

wKioL1RDp9nSjrB3AACXJhb-dFc209.jpg(3)、查看node2.9527.com端是否执行升级bash程序包的任务

自动化运维工具puppet的使用_第9张图片

说明:

    升级程序包已经成功!!!