天天看點

Puppet安裝部署篇(一)

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版本,控制權限等,之前寫過一篇 &lt;基于submin 來管理Subversion倉庫&gt; ,推薦使用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>

版本庫目錄格式:

[&lt;版本庫&gt;:/項目/目錄]

@&lt;使用者組名&gt; = &lt;權限&gt;

&lt;使用者名&gt; = &lt;權限&gt;

<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>&gt; $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>&gt;&amp;2</code>

<code>   </code><code>fi</code>

<code>   </code><code>puppet parser validate $tmpfile &gt;&gt;</code><code>/var/log/puppet/svn_pre-commit</code><code>.log 2&gt;&amp;1</code>

<code>       </code><code>echo</code> <code>"Puppet syntax error in $file"</code> <code>&gt;&gt; </code><code>/var/log/puppet/svn_pre-commit</code><code>.log 2&gt;&amp;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 &gt;&gt; </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

繼續閱讀