天天看点

puppet运维自动化配置安装学习

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

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

<a href="http://s3.51cto.com/wyfs02/M02/00/00/wKiom1LFPbHhXCUzAAAfAMvmtVY754.jpg" target="_blank"></a>

5.2Puppet master端的安装。

1)Puppet是用ruby语言开发的,因此在安装puppet之前先安装ruby。

yum –y install ruby

2)安装facter。

tar –zxvf facter-1.6.18.tar.gz

cd facter-1.6.18

ruby install.rb

3)安装puppet。

先添加puppet用户。

useradd –M –s /sbin/nologinpuppet

tar –zxvf puppet-3.1.1.tar.gz

cd puppet-3.1.1

4)启动puppet master进程。

puppet master

#查看帮忙文档

puppet help

puppet master第一次启动的时候,会创建本地认证中心,给自己签发证书和key,可以在/etc/puppet/ssl里面看到。

<a href="http://s3.51cto.com/wyfs02/M02/00/00/wKioL1LFPbLxAe1cAABcE1C9o4k084.jpg" target="_blank"></a>

#查看puppet的进程。

ps –aux | grep –v “grep” | grep “puppet”

<a href="http://s3.51cto.com/wyfs02/M00/00/00/wKiom1LFPcmjyGDTAAB-L-A_mgY680.jpg" target="_blank"></a>

5.3Puppet slave端的安装。

6.puppet agent 证书申请流程。

agent第一次连接master的时候会向master申请证书.如下

1)puppet agent --server master.puppet.net--waitforcert 60 –test

2)在master端查看客户端的证书申请请求.

puppet cert --list

3)在master端给客户端签发证书.

puppet cert --sign slave.puppet.net

4)当证书签发成功后,agent可以和master之间建立连接.

puppet agent --servermaster.puppet.net --waitforcert 60 --test

<a href="http://s3.51cto.com/wyfs02/M00/00/00/wKioL1LFPcqg6QwyAAA98-9YAhI487.jpg" target="_blank"></a>

7.Puppet master-slave客户端测试。

1)master端修改配置文件vim/etc/puppet/manifests/site.pp

node default {

file{"/tmp/magme.txt":

content =&gt; "hello,magme!,This is puppet master test file!!!";

}

2)agent端测试.

puppet agent --servermaster.puppet.net --test

<a href="http://s3.51cto.com/wyfs02/M01/00/00/wKiom1LFPeTylwE0AABSJqQXNRA938.jpg" target="_blank"></a>

3)在agent端的/tmp目录中会出现magme.txt文件,说明puppet安装配置成功.

cat /tmp/magme.txt

<a href="http://s3.51cto.com/wyfs02/M01/00/00/wKioL1LFPezQnNrqAAAfOzwOneo448.jpg" target="_blank"></a>

8.puppet单机测试.

在任意目录中,新建vim test1.pp

notify {'notice':

message =&gt; 'hello puppet' ,

应用该文件.

puppet apply test1.pp

<a href="http://s3.51cto.com/wyfs02/M01/00/02/wKiom1LGIoPTsC54AAA63KavJpM923.jpg" target="_blank"></a>

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 =&gt;"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

---内容如下

{ "/tmp/dd142/puppet-2.6.13.tar.gz":

owner =&gt; "puppet",

group =&gt; "puppet",

mode =&gt; 666,

----

第二步:在client端执行命令

执行SHELL命令或shell脚本:

实例:通过puppet分发执行shell脚本,在客户端的opt目录下新建一目录shelldir。

exec {"exec-mkdir":

cwd =&gt; "/opt",

command =&gt; "sh /opt/lgh.sh",

user =&gt; "root",

path =&gt;"/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",

第二步:在client端编辑一shell脚本

<a href="http://img1.51cto.com/attachment/201202/174254980.jpg" target="_blank"></a>

第三步:在client端执行命令

在/opt目录下查看shelldir有没有建立。

服务检查及修改:

可以通过puppet对一些服务进行检查。puppet是通过service命令操作的。所以,只能针对在/etc/init.d/目录下的服务

实例:把客户端的防火墙起来(原来是关闭的)

vi /etc/puppet/manifests/site.pp //清空site.pp,再新建

service

{ iptables:

ensure =&gt; "running",

cron计划任务:

接上面的shell程序实例,在17:30执行/opt/lgh.sh。

cron { "cron-shell": #title部分,可用来作为注释。

command =&gt; "sh /opt/lgh.sh" #要执行的命令

user =&gt; "root", #添加到root用户下的crontab中

minute =&gt; "30", #即第一个星号

hour =&gt; "17" #即第二个星号

登录客户端查看效果

<a href="http://s3.51cto.com/wyfs02/M01/00/00/wKioL1LFPfqAz0xyAAA-3IvlvrI838.jpg" target="_blank"></a>

<a href="http://img1.51cto.com/attachment/201202/174126206.jpg" target="_blank"></a>

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 &gt; /etc/puppet/puppet.conf 生成master配置文件

puppet agent--genconfig &gt; /etc/puppet/puppet.conf 生成agent配置文件

本文转自pizibaidu 51CTO博客,原文链接:http://blog.51cto.com/pizibaidu/1347800,如需转载请自行联系原作者