1.Puppet簡介
Puppet是一個開源的自動化配置和部署工具,puppet是基於C/S架構的,服務端被稱爲Puppet master,客戶端軟件被稱爲Puppet agent,Puppet master服務器端保存着全部對客戶端服務器的配置代碼,Puppet agent則經過一個使用標準SSL協議進行加密和驗證的連接與Puppet master進行通訊。node
2.Puppet工做原理
1)客戶端Puppetd向Master發起認證請求。
2)客戶端puppet調用Facter,Factert探測出主機的變量信息,Puppetd將這些信息經過SSL鏈接發送到服務器端。
3)服務器端的Puppet Master檢測客戶端的主機名,而後找到manifest對應的node配置,並對該內容進行解析,並將僞代碼發送給客戶端。
5)客戶端接收到僞代碼並執行,將執行結果返回給服務器。
6)服務器把客戶端的執行結果寫入日誌。mysql
3.物理環境linux
角色sql |
OSshell |
IPvim |
hostnameruby |
master服務器 |
Centos6.4_64架構 |
192.168.1.191app |
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)通訊的,在master和agent的/etc/hosts文件裏面添加下面兩行。
192.168.1.191master.puppet.net
192.168.1.192slave.puppet.net
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
ruby install.rb
4)啓動puppet master進程。
puppet master
#查看幫忙文檔
puppet help
puppet master第一次啓動的時候,會建立本地認證中心,給本身簽發證書和key,能夠在/etc/puppet/ssl裏面看到。
#查看puppet的進程。
ps –aux | grep –v 「grep」 | grep 「puppet」
5.3Puppet slave端的安裝。
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
ruby install.rb
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
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
3)在agent端的/tmp目錄中會出現magme.txt文件,說明puppet安裝配置成功.
cat /tmp/magme.txt
8.puppet單機測試.
在任意目錄中,新建vim test1.pp
notify {'notice':
message => 'hello puppet' ,
}
應用該文件.
puppet apply test1.pp
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" #即第二個星號
}
登陸客戶端查看效果
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配置文件