工作流程:
1)客户端puppet调用facter(facter是通过ssl加密收集及检测分析客户端配置信息的一个工具),facter探测出主机的一些变量,如主机名,内存大小,ip地址等。Puppet把这些信息通过ssl连接发送到服务器器端
2)服务器端的puppetmaster通过facter工具分析检测客户端的主机名,然后找到项目主配置文件mainfest里面对应的node配置,并对该部分内容进行解析。Facter发送过来的信息可以作为变量处理,node牵扯到的代码才解析,其他没牵涉的代码不解析,解析分为几个阶段,首先进行语法检查,如果语法没错,就继续解析,解析的结果生成一个中间的“伪代码”,然后把伪代码发送给客户端。
3)客户端接收到伪代码,并执行,客户端把执行的结果发送给服务器。
4)服务器把客户端的执行结果写入日志。
整体思路:
1.搭建NTP服务器,在所有计算机上同步,搭建DNS服务器来实现各主机间的通信(本文档修改hosts文件)
2.搭建master服务器,配置puppet主配置文件
3.搭建client服务器,配置puppet主配置文件,在client中向master提交申请,并在master中注册client
4.在/etc/puppet/modules/某一服务的名称/manifests路径下创建4各配置文件,创建一个测试节点,并将节点载入puppet,使得master服务器可以通过站点文件找到其他配置文件
5.client可以主动拉取信息,也可以通过master服务器推送同步
设置NTP服务器:
rpm -q ntp //查看是否安装NTP
vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8
service ntpd start
搭建puppetmaster
1)规划服务器主机名
vim /etc/sysconfig/network
HOSTNAME=master.test.com //根据实际情况修改
根据实际情况搭建DNS服务器实现各计算机间通过主机名的通信,本文档通过修改hosts文件来实现
vim /etc/hosts
192.168.1.1 master.test.com
192.168.1.2 client.test.com
........
2)同步时间服务器
ntpdate NTP服务器的IP
3)安装compat-readline、ruby、facter、puppet
useradd -s /sbin/nologin puppet
rpm -ivh compat-readline*.rpm ruby-*.rpm
tar xzf facter-*.tar.gz -C /usr/src
cd /usr/src/facter-*
ruby install.rb
tar xzf puppet-*.tar.gz -C /usr/src
cd /usr/src/puppet-*
ruby install.rb
复制配置文件模板
cp /usr/src/puppet-*/conf/redhat/filesserver.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/puppet.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/server.init /etc/init.d/puppetmaster
chmod +x /etc/init.d/puppetmaster
修改配置文件
vim /etc/puppet/puppet.conf
[main]
.......//省略部分
modulepath = /etc/puppet/modules:/usr/share/puppet/modules //在main模块下手动添加
启动puppet主程序
/etc/init.d/puppetmaster start
搭建puppetclient(所有客户端都这么设置)
与puppetmaster前三个步骤一样,做一样的操作,就是设置主机名根据实际情况修改
1)规划服务器主机名(略)
2)同步时间服务器(略)
3)安装compat-readline、ruby、facter、puppet(略)
复制配置文件模板
cp /usr/src/puppet-*/conf/redhat/filesserver.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/puppet.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/client.init /etc/init.d/puppetclient
chmod +x /etc/init.d/puppetclient
修改配置文件
vim /etc/puppet/puppet.conf
[main]
....../省略部分
server = master.test.com //在main模块最后手动填入puppet主服务器的主机名
4)申请与注册
Client端:
puppet agent –server=master.test.com –no-daemonize –verbose //向主服务器申请
这个指令的作用是将puppet agent不用守护进程的模式启动,好处是能看到与服务器端的通信及证书签名的过程,方便debug。 默认puppet每2分钟向服务器端申请一次签名直到获得服务器端发来的经过签名的证书才start agent 服务
Master端:
puppet cert sign –all //注册所有申请的客户端
配置实例
Master端:
1)创建需要的目录(这里以自动修改sshd服务端口号为例)
mkdir -p /etc/puppet/modules/ssh/{manifests,templates,files}
mkdir /etc/puppet/manifests/nodes
mkdir /etc/puppet/modules/ssh/files/ssh
chown -R puppet /etc/puppet/modules/
manifests:此目录为存放配置文件的目录,里面必须包含一个init.pp的文件,这是该模块的入口文件导入一个模块的时候,会从init.pp开始执行。可以把所有的代码都写道init.pp里面,也可以分成多个pp文件,init再去包含其他文件
定义class类名的时候必须是ssh,这样能实现调用
files目录是该模块的文件发布目录,puppet提供一个文件分发制/etc/ssh/sshd_conf
templates目录包含erb模版文件
2)创建模块配置文件install.pp
vim /etc/puppet/modules/ssh/manifests/install.pp
class ssh::install{
package{ "openssh":
ensure => present
}
}
3)创建模块配置文件config.pp
vim /etc/puppet/modules/ssh/manifests/config.pp
class ssh::config{
file { "/etc/ssh/sshd_config":
ensure => present,
owner =>"root",
group =>"root",
mode => "0600",
source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",
require => Class["ssh::install"],
notify => Class["ssh::service"],
}
}
4)创建service.pp
vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service {
service {"sshd":
ensure => running,
hasstatus =>true,
hasrestart =>true,
enable =>true,
require =>Class["ssh::config"]
}
}
5)创建模块主配置文件,将以上配置文件加载进去,输入以下信息
vim /etc/puppet/modules/ssh/manifests/init.pp
class ssh{
include ssh::install,ssh::config,ssh::service
}
6)建立服务器ssh统一维护文件
cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
chown puppet /etc/puppet/modules/ssh/files/ssh/sshd_config
7)创建测试节点配置文件,并将ssh加载进去
vim /etc/puppet/manifests/nodes/ssh.pp
node 'client1.test.com'{
include ssh
}
......省略N台Client
8)将测试节点载入puppet,即修改site.pp
vim /etc/puppet/manifests/site.pp
import "nodes/ssh.pp"
9)修改服务器端维护的sshd_config配置文件
vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 1122
/etc/init.d/puppetmaster restart
实现效果
1)客户端主动拉取同步信息
puppet agent -t
2)服务器主动推送同步
Client端配置
vim /etc/puppet/puppet.conf
listen = true //使puppet监听8139端口
vim /etc/puppet/auth.conf
path /
allow * //在path / 模块下添加,允许任何服务器推送
/etc/init.d/puppetclient start //在客户端上启动服务
Master推送同步:
puppet kick client1.test.com