天天看點

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,如需轉載請自行聯系原作者