1.Puppet简介
Puppet是一个开源的自动化配置和部署工具,puppet是基于C/S架构的,服务端被称为Puppet master,客户端软件被称为Puppet agent,Puppet master服务器端保存着所有对客户端服务器的配置代码,Puppet agent则通过一个使用标准SSL协议进行加密和验证的链接与Puppet master进行通信。
2.Puppet工作原理
1)客户端Puppetd向Master发起认证请求。
2)客户端puppet调用Facter,Factert探测出主机的变量信息,Puppetd将这些信息通过SSL连接发送到服务器端。
3)服务器端的Puppet Master检测客户端的主机名,然后找到manifest对应的node配置,并对该内容进行解析,并将伪代码发送给客户端。
5)客户端接收到伪代码并执行,将执行结果返回给服务器。
6)服务器把客户端的执行结果写入日志。
3.物理环境
角色 |
OS |
IP |
hostname |
master |
Centos6.4_64 |
192.168.1.191 |
master.puppet.net |
slave |
Centos6.4_64 |
192.168.1.192 |
slave.puppet.net |
4.获取puppet软件包
在puppet的官方网站(https://puppetlabs.com)下载最新的安装版本puppet-3.1.1.tar.gz。
也可以在Linux终端用wget下载。
wgethttp://puppetlabs.com/downloads/puppet/puppet-3.1.1.tar.gz --no-check-certificate
wgethttp://puppetlabs.com/downloads/facter/facter-1.6.18.tar.gz--no-check-certificate
5.puppet安装配置
5.1配置主机名,Puppet是通过主机名(FQDN)通信的,在master和agent的/etc/hosts文件里面添加下面两行。
192.168.1.191master.puppet.net
192.168.1.192slave.puppet.net
5.2Puppet master端的安装。
1)Puppet是用ruby语言开发的,因此在安装puppet之前先安装ruby。
yum �Cy install ruby
2)安装facter。
tar �Czxvf facter-1.6.18.tar.gz
cd facter-1.6.18
ruby install.rb
3)安装puppet。
先添加puppet用户。
useradd �CM �Cs /sbin/nologinpuppet
tar �Czxvf puppet-3.1.1.tar.gz
cd puppet-3.1.1
ruby install.rb
4)启动puppet master进程。
puppet master
#查看帮忙文档
puppet help
puppet master第一次启动的时候,会创建本地认证中心,给自己签发证书和key,可以在/etc/puppet/ssl里面看到。
#查看puppet的进程。
ps �Caux | grep �Cv “grep” | grep “puppet”
5.3Puppet slave端的安装。
1)Puppet是用ruby语言开发的,因此在安装puppet之前先安装ruby。
yum �Cy install ruby
2)安装facter。
tar �Czxvf facter-1.6.18.tar.gz
cd facter-1.6.18
ruby install.rb
3)安装puppet。
先添加puppet用户。
useradd �CM �Cs /sbin/nologinpuppet
tar �Czxvf puppet-3.1.1.tar.gz
cd puppet-3.1.1
ruby install.rb
6.puppet agent 证书申请流程。
agent第一次连接master的时候会向master申请证书.如下
1)puppet agent --server master.puppet.net--waitforcert 60 �Ctest
2)在master端查看客户端的证书申请请求.
puppet cert --list
3)在master端给客户端签发证书.
puppet cert --sign slave.puppet.net
4)当证书签发成功后,agent可以和master之间建立连接.
puppet agent --servermaster.puppet.net --waitforcert 60 --test
7.Puppet master-slave客户端测试。
1)master端修改配置文件vim/etc/puppet/manifests/site.pp
node default {
file{"/tmp/magme.txt":
content => "hello,magme!,This is puppet master test file!!!";
}
}
2)agent端测试.
puppet agent --servermaster.puppet.net --test
3)在agent端的/tmp目录中会出现magme.txt文件,说明puppet安装配置成功.
cat /tmp/magme.txt
8.puppet单机测试.
在任意目录中,新建vim test1.pp
notify {'notice':
message => 'hello puppet' ,
}
应用该文件.
puppet apply test1.pp
9.实用案例:
文件分发:
通过puppet可以向被管理机上推送文件,方法是使用file类型的source属性
1:修改/etc/puppet/fileserver.conf
2:修改/etc/puppet/manifests/site.pp
实例:要把server服务器上/opt目录下的mysql-5.1.49-linux-i686-icc-glibc23.tar.gz传输至client服务器的/opt目录下,文件名不变。
第一步:Vi /etc/puppet/fileserver.conf
[files]
path /opt/
allow 192.168.133.0/24
第二步:vi/etc/puppet/manifests/site.pp
file
{ "/opt/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz":
source =>"puppet://$puppetserver/files/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz",
}
第三步:
在client客户端执行更新命令
puppetd --test --server testsns
此处“$puppetserver”是puppet Server端的名称,即hostname,网上教程都是在hosts里指定,生产环境下用内部的DNS上作解析,像我公司一个www平台就有70台linux服务器,一个个添加hosts,不搞死人去。
修改文件属性:
实例:把/tmp/dd142/ puppet-2.6.13.tar.gz文件的权限改为puppet用户,并设置权限为666。
第一步:编辑Server端的site.pp
vi /etc/puppet/manifests/site.pp
---内容如下
file
{ "/tmp/dd142/puppet-2.6.13.tar.gz":
owner => "puppet",
group => "puppet",
mode => 666,
}
----
第二步:在client端执行命令
puppetd --test --server testsns
执行SHELL命令或shell脚本:
实例:通过puppet分发执行shell脚本,在客户端的opt目录下新建一目录shelldir。
第一步:编辑Server端的site.pp
vi /etc/puppet/manifests/site.pp
exec {"exec-mkdir":
cwd => "/opt",
command => "sh /opt/lgh.sh",
user => "root",
path =>"/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
}
第二步:在client端编辑一shell脚本
第三步:在client端执行命令
puppetd --test --server testsns
在/opt目录下查看shelldir有没有建立。
服务检查及修改:
可以通过puppet对一些服务进行检查。puppet是通过service命令操作的。所以,只能针对在/etc/init.d/目录下的服务
实例:把客户端的防火墙起来(原来是关闭的)
vi /etc/puppet/manifests/site.pp //清空site.pp,再新建
service
{ iptables:
ensure => "running",
}
cron计划任务:
接上面的shell程序实例,在17:30执行/opt/lgh.sh。
cron { "cron-shell": #title部分,可用来作为注释。
command => "sh /opt/lgh.sh" #要执行的命令
user => "root", #添加到root用户下的crontab中
minute => "30", #即第一个星号
hour => "17" #即第二个星号
}
登录客户端查看效果
10.遇到的问题??
.Could notretrieve information from environment production source(s)puppet://server.puppet.com/plugins
解决方法:网上说把两端/etc/puppet.conf里pluginsync=true ,改成pluginsync=false,并重启puppetmaster即可解决。
新版本puppet3.1.1中根本没有这个选项,那么只需要在master中,执行mkdir /etc/puppet/modules,然后错误就没有了。
总结:
1.Puppet是管理系统配置的工具,包括软件的安装,文件的配置,系统服务,文件的管理,用户的添加/删除,定时计划配置等。在puppet中,将上述列出的管理任务称为资源。
2.生成配置文件,3.1.1源码包的conf里面没有puppet的配置文件,可以用下面的方式生成配置文件。
puppet master--genconfig > /etc/puppet/puppet.conf 生成master配置文件
puppet agent--genconfig > /etc/puppet/puppet.conf 生成agent配置文件