Puppet的安装部署,后续使用下面三台机器演示,为了演示效果主机名也采用idc+用途来表示.
192.168.30.134 puppet Puppet Server端
192.168.30.131 sh-web1 Web Server
192.168.30.132 sh-proxy2 Proxy Server
puppet 使用支持两种方式:
1、单机使用 (这种可以忽略)
2、master/agent (标准使用)
部署前关系防火墙:
关闭selinux内核防火墙:
1
<code>#sed '/^SELINUX/s/=.*/=disabled/g' /etc/sysconfig/selinux -i</code>
关闭iptables防火墙:
2
3
<code> </code><code># iptables -F</code>
<code> </code><code># /etc/init.d/iptables save</code>
<code> </code><code># chkconfig iptables off</code>
系统默认yum不使用,配置阿里的镜像yum源.(百度搜索下"阿里镜像")
<a href="https://s1.51cto.com/wyfs02/M00/05/CB/wKiom1mstPTwxVraAAGZJxZmAfU786.png" target="_blank"></a>
本地系统Cebtos6.5,所以使用centos6的镜像yum源.
<a href="https://s3.51cto.com/wyfs02/M00/A4/7D/wKioL1mstPqwuMy5AAEUdU_Q8d8248.png" target="_blank"></a>
puppet server和两台应用服务器共三台机器依次执行下面的指令:
<code>wget -O </code><code>/etc/yum</code><code>.repos.d</code><code>/CentOS-Base</code><code>.repo http:</code><code>//mirrors</code><code>.aliyun.com</code><code>/repo/Centos-6</code><code>.repo</code>
<a href="https://s2.51cto.com/wyfs02/M02/05/CB/wKiom1mstuuCWk-LAAFMU5G25Do023.png" target="_blank"></a>
修改yum源文件的release版本:
<code>cd</code> <code>/etc/yum</code><code>.repos.d</code>
<code>vim CentOS-Base.repo</code>
puppet 软件包安装:
puppet server和agent客户端安装epel-release源
<code> </code><code># rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm</code>
puppet server端安装puppet-server:
<code> </code><code># yum install puppet-server puppet -y</code>
puppet agent客户端安装puppet:
<code> </code><code>#yum install puppet -y</code>
查看三台机器安装的puppet版本:
# puppet -V
3.8.7
疑问?--如果puppet server 是3.8,那么puppet agent是 2.6能正常运行吗?
注释:
第一点:最常见的Puppet部署模型是客户端-服务端模型。许多人询问是否能使用不同的Puppet版本作为master和agent。答案是可以,但前提是要遵照一些注意事项。第一点要注意的是master的版本一定要高于agent。例如,你可以将一个0.24.8版本的agent连接到一个2.6.0版本的master,但是反过来不行。
第二点:要注意的是,agent的版本越老,在与新版本的master搭配时正确运行的可能性就越小。一个0.20.0版本的agent搭配一个2.6.0的master基本不可能正确工作。通常,0.24.x版的agent都能正常连接到2.6.x和0.25.x版本的master并且工作正常。更新版本的master就可能无法完全兼容早期的agent,一些功能和特性可能会出现异常。
最后,将2.6.x或更新版本的master与0.24.x及早期版本的agent混合使用意味着你无法获得2.6.x版本提供的全部性能提升。0.24.x版的agent依然会使用较慢的XML-RPC传输层来进行通讯,从而无法利用新的REST接口。
Svn + Puppet(结合svn版本控制更新puppet Server)
备注:主要是写下怎么在windows使用svn控制修改/删除/提交更新到puppet server,方便大家参考:
备注--svn的安装部署,这块简单写下svn的版本控制,如果你想使用svn+apache或者web访问svn版本,控制权限等,之前写过一篇 <基于submin 来管理Subversion仓库> ,推荐使用submin 感觉自带的功能比apache丰富点,可以参考.
svn软件包安装:
<code># yum install subversion</code>
#创建仓库目录:
<code># mkdir /data/puppet_co -p</code>
<code># svnadmin create /data/puppet_co</code>
#配置svn仓库/权限等.
<code>cd</code> <code>/data/puppet_co/conf</code>
<code>[root@puppet conf]</code><code># ls</code>
<code>authz </code><code>passwd</code> <code>svnserve.conf</code>
4
5
6
7
8
<code>[root@puppet conf]</code><code># cat svnserve.conf | grep -v '^#'</code>
<code>[general]</code>
<code>auth-access = write </code><code>#通过验证的用户可以读和写</code>
<code>auno-access = </code><code>read</code> <code>#匿名登陆下可以只读文件,即:文件修改后无法提交到服务器</code>
<code>password-db =password </code><code>#用户保存文件的名称</code>
<code>authz-db =authz </code><code>#权限管理文件</code>
<code>realm = </code><code>/data/puppet_co</code> <code># 认证空间名,版本库所在目录</code>
<code>[sasl]</code>
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
<code>[root@puppet conf]</code><code># cat authz | grep -v '^#' | grep -v '^$'</code>
<code>[aliases]</code>
<code>[</code><code>groups</code><code>]</code>
<code>#新增了下面三行</code>
<code>[/]</code>
<code>xiaomeng = rw</code>
<code>* =</code>
<code>[root@puppet conf]</code><code># cat passwd | grep -v '^#'</code>
<code>#新增下面2行</code>
<code>[</code><code>users</code><code>]</code>
<code>xiaomeng=123456</code>
启动svn版本库:
<code># svnserve -d -r /data/puppet_co/</code>
stop svn:
<code>#pkill svn即可</code>
svn版本库测试,验证版本库是否搭建成功:
<a href="https://s3.51cto.com/wyfs02/M02/A4/7D/wKioL1msuSKSr7OfAAEXwLIt-FE689.png" target="_blank"></a>
清理svn库的用户认证信息:
多次调试svn库,想清除svn库认证信息,参考下图:
<a href="https://s2.51cto.com/wyfs02/M01/A4/7D/wKioL1msuLTRpB-EAAE0_0vJfVk228.png" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M02/05/CC/wKiom1msuN7BaQaGAAHH6kMFGt4339.png" target="_blank"></a>
将/etc/puppet目录下的(文件/目录)等导入到svn版本库.
<code># svn import /etc/puppet/ file:///data/puppet_co -m "rsync puppet"</code>
<a href="https://s2.51cto.com/wyfs02/M01/05/CC/wKiom1msuZmSTTHyAABaBuUbUGc325.png" target="_blank"></a>
在windows客户端svn update更新查看:
<a href="https://s5.51cto.com/wyfs02/M00/A4/7D/wKioL1msudjg1bZlAAFk9_UPlIY322.png" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M02/A4/7D/wKioL1msugzAoeL1AAGISdvpFKo003.png" target="_blank"></a>
#将/etc/puppet目录下的资源清理掉,从svn版本库同步更新至/etc/puppet
<code>[root@puppet puppet]</code><code># rm -rf *</code>
<code>[root@puppet puppet]</code><code># svn checkout svn://192.168.30.134 /etc/puppet/</code>
<a href="https://s4.51cto.com/wyfs02/M00/A4/7D/wKioL1msuiTj1mL9AABaBFmupwU844.png" target="_blank"></a>
#更新完成将发现每个目录下均有.svn的目录,记录此次版本.
<code>[root@puppet puppet]</code><code># ls -a</code>
<code>. .. auth.conf environments fileserver.conf manifests modules puppet.conf .svn</code>
<code>[root@puppet puppet]</code><code># cd environments/</code>
<code>[root@puppet environments]</code><code># ls -a</code>
<code>. .. example_env .svn</code>
部署SVNhooks
目的:方便client客户端修改svn版本库代码,实时同步更新至/etc/puppet目录下.
1、设置pre-commit
设置pre-commit钩子可以提交文件到SVN服务器之前对puppet语法进行检查,语法通过则提交成功,语法错误则提交失败。
<code># cd /data/puppet_co/hooks</code>
<code>[root@puppet hooks]</code><code># ls</code>
<code>post-commit.tmpl post-revprop-change.tmpl pre-commit.tmpl pre-revprop-change.tmpl start-commit.tmpl</code>
<code>post-lock.tmpl post-unlock.tmpl pre-lock.tmpl pre-unlock.tmpl</code>
备注--(本来想借公司脚本使用下,发现公司配的有点复杂,300多行脚本篇幅太大,公司使用的时一个php的脚本文件,忽略下面这段.仅参考)
<code># cat pre-commit | grep -v '^#'</code>
<code>php -f </code><code>/var/svnroot/pre-commit</code><code>.php </code><code>"$1"</code> <code>"$2"</code>
<code>if</code> <code>[ $? -</code><code>eq</code> <code>1 ]; </code><code>then</code>
<code> </code><code>exit</code> <code>1</code>
<code>else</code>
<code> </code><code>exit</code> <code>0</code>
<code>fi</code>
查看下这个文件发现脚本文件太长了,看的脑袋晕,就自己找了个,参考下面:
<code>[root@puppet hooks]</code><code># cp pre-commit.tmpl pre-commit</code>
<code>[root@puppet hooks]</code><code># chmod 774 pre-commit</code>
9
10
11
12
13
14
15
16
17
18
19
20
21
<code>[root@puppet hooks]</code><code># cat pre-commit</code>
<code>#!/bin/bash</code>
<code>#SVN pre-commit hook to check Puppet syntax for .pp files</code>
<code>export</code> <code>PATH=</code><code>"/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"</code>
<code>REPOS=</code><code>"$1"</code>
<code>TXN=</code><code>"$2"</code>
<code>tmpfile=`mktemp`</code>
<code>for</code> <code>file</code> <code>in</code> <code>$(svnlook changed -t </code><code>"$TXN"</code> <code>"$REPOS"</code> <code>|</code><code>awk</code> <code>'/^[^D].*\.pp$/ {print $2}'</code><code>)</code>
<code>do</code>
<code> </code><code>svnlook </code><code>cat</code> <code>-t $TXN $REPOS $</code><code>file</code> <code>> $tmpfile</code>
<code> </code><code>if</code> <code>[ $? -</code><code>ne</code> <code>0 ]</code>
<code> </code><code>then</code>
<code> </code><code>echo</code><code>"Warning: Failed to checkout $file"</code> <code>>&2</code>
<code> </code><code>fi</code>
<code> </code><code>puppet parser validate $tmpfile >></code><code>/var/log/puppet/svn_pre-commit</code><code>.log 2>&1</code>
<code> </code><code>echo</code> <code>"Puppet syntax error in $file"</code> <code>>> </code><code>/var/log/puppet/svn_pre-commit</code><code>.log 2>&1</code>
<code> </code><code>exit</code> <code>1</code>
<code>done</code>
2、设置post-commit:
设置post-commit钩子可以在正确提交文件至SVN服务器之后,puppetmaster的模块目录/etc/puppet/modules会自动从SVN服务器上update最新的版本库到本地。
<code>[root@puppet hooks]</code><code># cp post-commit.tmpl post-commit</code>
<code>[root@puppet hooks]</code><code># chmod 774 post-commit</code>
<code>[root@puppet hooks]</code><code># cat post-commit</code>
<code>#POST-COMMIT HOOK</code>
<code>REV=</code><code>"$2"</code>
<code>export</code> <code>LANG=en_US.UTF-8</code>
<code>SVN=</code><code>/usr/bin/svn</code>
<code>PUPPET_DIR=</code><code>/etc/puppet</code>
<code>$SVN update $PUPPET_DIR --username xiaomeng --password 123456 >> </code><code>/var/log/puppet/svn_post-commit</code><code>.log</code>
<code>[root@puppet hooks]</code><code>#</code>
<code>[root@puppet hooks]</code><code># pwd</code>
<code>/data/puppet_co/hooks</code>
<code>post-commit post-lock.tmpl post-unlock.tmpl pre-commit.tmpl pre-revprop-change.tmpl start-commit.tmpl</code>
<code>post-commit.tmpl post-revprop-change.tmpl pre-commit pre-lock.tmpl pre-unlock.tmpl</code>
测试svn 钩子是否实时同步即有效:
默认/etc/puppet目录下只有安装完成puppet以后的文件。
<code>[root@puppet ~]</code><code># ls /etc/puppet/</code>
<code>allow.conf.txt auth.conf environments fileserver.conf manifests modules puppet.conf</code>
win客户端使用svn 提交一个新增的文件,查看puppet svn端/etc/puppet 目录是否同步到最新的文件.
<a href="https://s1.51cto.com/wyfs02/M00/A4/7D/wKioL1msuwvTedZlAAHqUBmJcTY512.png" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/A4/7D/wKioL1msuy6SCvixAAE59qoE_wo087.png" target="_blank"></a>
登陆服务器查看puppet server端下是否同步更新到最新提交的文件.
<code>allow.conf.txt auth.conf environments fileserver.conf manifests modules puppet.conf </code><code>test</code><code>.txt</code>
<a href="https://s3.51cto.com/wyfs02/M00/A4/7D/wKioL1msu3STLDqwAAA8TYUg1PY857.png" target="_blank"></a>
本文转自青衫解衣 51CTO博客,原文链接:http://blog.51cto.com/215687833/1962448