Puppet 的介紹html
什麼是Puppet ?node
puppet 是一種Linux、Unix 平臺的集中配置管理系統,使用自有的puppet 描述語言,可管理配置文件、用戶、cron 任務、軟件包、系統服務等。puppet 把這些系統實體稱之爲資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關係。
puppet 採用C/S 星狀的結構,全部的客戶端和一個或幾個服務器交互。linux
每一個客戶端週期的(默認半個小時)向服務器發送請求,得到其最新的配置信息,保證和該配 置信息同步。每一個puppet 客戶端每半小時(能夠設置runinterval=30)鏈接一次服務器端,下載最新的配置文件,而且嚴格按照配置文件來配置服務器. 配置完成之後,puppet 客戶 端能夠反饋給服務器端一個消息. 若是出錯,也會給服務器端反饋一個消息.ruby
爲何要使用puppet?服務器
當你去管理10 臺服務器,你確定會說小意思。沒有任何壓力。架構
當你去管理100 臺服務器,你確定也會說小意思。app
當你去管理 1000+臺服務器呢?你是否是就頭痛了,不一樣的機器,不一樣的系統,使用不一樣的軟件版本,配置也不同。這樣爲了提高效率。Puppet 就派上了大用場。tcp
Puppet 架構 設計
puppet工做原理:日誌
Puppet 後臺運行的時候默認是半小時執行一次,不是很方便修改。能夠考慮不讓它 在後臺跑而是使用crontab 來調用。這樣能夠精確控制每臺客戶端的執行時間。分散 執行時間也能夠減輕壓力
Puppet 的工做細節分紅以下幾個步驟:
一、客戶端puppetd 調用facter ,facter 會探測出這臺主機的一些變量如主機名、內存大小、IP 地址等。而後puppetd 把這些信息發送到服務器端。
二、服務器端的puppetmaster 檢測到客戶端的主機名,而後會到manifest 裏面對應的node 配置,而後對這段內容進行解析,facter 送過來的信息能夠做爲變量進行處理的,node 牽涉到的代碼才解析,其它的代碼不不解析,解析分幾個過程:語法檢查、而後會生成一箇中間的僞代碼,而後再把僞代碼發給客戶機。
3 、客戶端接收到僞代碼以後就會執行,客戶端再把執行結果發送給服務器。
四、服務器再把客戶端的執行結果寫入日誌。
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 ~
添加host文件解析
安裝完成後須要把主機名和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 ACCEPT
完成後服務端運行
[root@cyy100 templates]# puppetmasterd
客戶端運行:
[root@cyy111 ~]# puppetd --server cyy100 --test
PS:這裏說一下的就是客戶端第一次向服務端請求證書的時候要保證兩邊的時間是同步的,要不會報錯
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/est/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目錄下了。
本文地址:http://www.linuxprobe.com/puppet-know.html