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 => "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 => '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 =>"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 => "puppet",
group => "puppet",
mode => 666,
----
第二步:在client端執行指令
執行SHELL指令或shell腳本:
執行個體:通過puppet分發執行shell腳本,在用戶端的opt目錄下建立一目錄shelldir。
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腳本
<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 => "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" #即第二個星号
登入用戶端檢視效果
<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 > /etc/puppet/puppet.conf 生成master配置檔案
puppet agent--genconfig > /etc/puppet/puppet.conf 生成agent配置檔案
本文轉自pizibaidu 51CTO部落格,原文連結:http://blog.51cto.com/pizibaidu/1347800,如需轉載請自行聯系原作者