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

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)通信的,在masteragent/etc/hosts文件里面添加下面两行。

192.168.1.191master.puppet.net

192.168.1.192slave.puppet.net


wKiom1LFPbHhXCUzAAAfAMvmtVY754.jpg


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里面看到。


wKioL1LFPbLxAe1cAABcE1C9o4k084.jpg


#查看puppet的进程。

ps �Caux | grep �Cv “grep” | grep “puppet”


wKiom1LFPcmjyGDTAAB-L-A_mgY680.jpg




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

wKioL1LFPcqg6QwyAAA98-9YAhI487.jpg




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


wKiom1LFPeTylwE0AABSJqQXNRA938.jpg


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

cat /tmp/magme.txt

wKioL1LFPezQnNrqAAAfOzwOneo448.jpg




8.puppet单机测试.


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


notify {'notice':

message => 'hello puppet' ,

}


应用该文件.

puppet apply test1.pp

wKiom1LGIoPTsC54AAA63KavJpM923.jpg






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" #即第二个星号
}
登录客户端查看效果


wKioL1LFPfqAz0xyAAA-3IvlvrI838.jpg




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配置文件




你可能感兴趣的:(批量执行,puppet,服务器管理,批量管理,自动化运维工具)