本文轉自:http://blog.chinaunix.net/uid-10771131-id-2431154.html
首先來簡單介紹下PUPPET,下面這些內容是我看過認爲比較有價值的:
什麼是Puppet ?
puppet 是一種Linux、Unix 平臺的集中配置管理系統,使用自有的puppet 描述語言,可管理配置文件、用戶、cron 任務、軟件包、系統服務等。puppet 把這些系統實體稱之爲資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關係。
puppet 採用C/S 星狀的結構,所有的客戶端和一個或幾個服務器交互。
每個客戶端週期的(默認半個小時)向服務器發送請求,獲得其最新的配置信息,保證和該配 置信息同步。每個puppet 客戶端每半小時(可以設置runinterval=30)連接一次服務器端,下載最新的配置文件,並且嚴格按照配置文件來配置服務器. 配置完成以後,puppet 客戶 端可以反饋給服務器端一個消息. 如果出錯,也會給服務器端反饋一個消息.
爲什麼要使用puppet?
當你去管理10 臺服務器,你肯定會說小意思。沒有任何壓力。
當你去管理100 臺服務器,你肯定也會說小意思。
當你去管理 1000+臺服務器呢?你是不是就頭痛了,不同的機器,不同的系統,
使用不同的軟件版本,配置也不一樣。這樣爲了提升效率。Puppet 就派上了大用場。
Puppet 架構
puppet工作原理:
Puppet 後臺運行的時候默認是半小時執行一次,不是很方便修改。可以考慮不讓它 在後臺跑而是使用crontab 來調用。這樣可以精確控制每臺客戶端的執行時間。分散 執行時間也可以減輕壓力
Puppet 的工作細節分成如下幾個步驟:
1、客戶端puppetd 調用facter ,facter 會探測出這臺主機的一些變量如主機名、內存大小、IP 地址等。然後puppetd 把這些信息發送到服務器端。
2、服務器端的puppetmaster 檢測到客戶端的主機名,然後會到manifest 裏面對應的node 配置,然後對這段內容進行解析,facter 送過來的信息可以作爲變量進行處理的,node 牽涉到的代碼才解析,其它的代碼不不解析,解析分幾個過程:語法檢查、然後會生成一箇中間的僞代碼,然後再把僞代碼發給客戶機。
3 、客戶端接收到僞代碼之後就會執行,客戶端再把執行結果發送給服務器。
4、服務器再把客戶端的執行結果寫入日誌。
Puppet組織結構
爲什麼要說puppet 的組織結構?當你安裝完puppet 後,你會發現你不知道它的目錄結構是什麼樣的。要如何組織,怎麼樣纔算合理?puppet 目錄在/etc/puppet 下面。
樹結構如下:
|-- puppet.conf #主配置配置文件
|-- fileserver.conf #文件服務器配置文件
|-- auth.conf #認證配置文件
|-- autosign.conf # 自動驗證配置文件
|-- tagmail.conf #郵件配置文件(將錯誤信息發送)
|-- manifests #文件存儲目錄(puppet 會先讀取該目錄的.PP 文件)
| --nodes
| | | puppetclient.pp
| |-- site.pp #定義puppet 相關的變量和默認配置。
| |-- modules.pp #加載class 類模塊文件(include syslog)
|-- modules #定義模塊
| -- syslog #以syslog 爲例
| |-- file
| |-- manifests
| | |-- init.pp #class 類配置
| |--- templates #模塊配置目錄
| | |-- syslog.erb #erb 模板
基本介紹到這,在這裏也分享下PUPPET的中文WIKI:http://puppet.wikidot.com/
E文不錯的也可以直接到官網看:http://www.puppetlabs.com/
然後開始安裝,這裏選擇的是源碼安裝,puppet是運行在ruby環境的,所以需要安裝ruby
上傳ruby-1.8.6,facter-1.6.0,puppet-2.7.1到/tmp目錄(這3個安裝包見附件)
tar zxvf ruby-1.8.6-p114.tar.gz
cd ruby-1.8.6-p114
./configure
make
make install
cd /tmp
tar zxvf facter-1.6.0.tar.gz
cd facter-1.6.0
ruby install.rb
cd /tmp
tar zxvf puppet-2.7.1.tar.gz
cd puppet-2.7.1
ruby install.rb
mkdir -p /etc/puppet &&cp conf/redhat/* /etc/puppet/ && cd ~
安裝完成後需要把主機名和IP寫入hosts,因爲puppet是根據主機名來識別的,所以主機名對puppet來說比較重要:
echo "192.168.1.100 puppetmaster" >> /etc/hosts
echo "192.168.1.200 app_1 " >> /etc/hosts
開了防火牆的需要在防火牆裏面添加8140端口
-A RH-Firewall-1-INPUT -s 192.168.0.0/255.255.0.0 -p tcp -m tcp --dport 8140 -j AC
CEPT
完成後服務端運行:
[root@cyy100 templates]# puppetmasterd
客戶端運行:
[root@cyy111 ~]# puppetd --server cyy100 --test
這裏說一下的就是客戶端第一次向服務端請求證書的時候要保證兩邊的時間是同步的,要不會報錯
err: Could not retrieve catalog from remote server: certificate verify failed.
出現這個錯誤首先同步時間:
/usr/sbin/ntpdate time.nist.gov
然後刪除兩邊的SSL證書
rm -f /var/lib/puppet/ssl/ca/signed/caotest-2.cym.pem ###服務端
rm -rf /var/lib/puppet/ssl/ ###客戶端
再重新驗證
[root@cyy111 ~]# puppetd --server cyy100 --test
沒什麼問題應該成功了,puppet默認是半小時執行一次,個人推薦用定時任務來執行
可以先隨便寫個類來驗證下是否成功
[root@cyy100 templates]# cd /etc/puppet
[root@cyy100 puppet]# cd modules/
[root@cyy100 modules]# mkdir test/
[root@cyy100 modules]# mkdir test/manifests/
[root@cyy100 modules]# mkdir test/files/
[root@cyy100 modules]#vi test/files/init.pp
在init.pp裏面寫入以下內容
class po {
file { "/tmp/test.txt":
ensure => present,
group => "root",
owner => "root",
mode => "0644",
source => "puppet:///test/test.txt"
}
}
然後在/etc/puppet/modules/test/files下面創建一個test.txt文件,往裏面寫入:hello world !
在/etc/puppet/manifests/modules.pp 寫入:
import "test"
在/etc/puppet/manifests/node裏面寫入
node 'cyy111'{
include po
}
然後在客戶端執行
puppetd --server cyy100 --test
就可以看到test.txt文件下發到客戶端的/tmp目錄下了。
就先寫到這裏了,後面還有更多的語法啊各種錯誤啊,搭nginx啊這些以後再慢慢寫了。歡迎大家回帖跟我交流,本人也屬於剛接觸的菜鳥,大家共同進步。