PUPPET入門

本文轉自: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 架構 

10771131_1314608670e1dC.png

 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

  1. 上傳ruby-1.8.6,facter-1.6.0,puppet-2.7.1到/tmp目錄(這3個安裝包見附件)

  2. tar zxvf ruby-1.8.6-p114.tar.gz

  3. cd ruby-1.8.6-p114

  4. ./configure

  5. make

  6. make install

  7. cd /tmp

  8. tar zxvf facter-1.6.0.tar.gz

  9. cd facter-1.6.0

  10. ruby install.rb

  11. cd /tmp

  12. tar zxvf puppet-2.7.1.tar.gz

  13. cd puppet-2.7.1

  14. ruby install.rb

  15. mkdir -p /etc/puppet &&cp  conf/redhat/*  /etc/puppet/ && cd ~

安裝完成後需要把主機名和IP寫入hosts,因爲puppet是根據主機名來識別的,所以主機名對puppet來說比較重要:

  1. echo "192.168.1.100  puppetmaster" >> /etc/hosts

  2. echo "192.168.1.200  app_1 " >> /etc/hosts

開了防火牆的需要在防火牆裏面添加8140端口

  1. -A RH-Firewall-1-INPUT -s 192.168.0.0/255.255.0.0  -p tcp -m tcp --dport 8140 -j AC

  2. CEPT

完成後服務端運行:

  1. [root@cyy100 templates]# puppetmasterd

客戶端運行:

  1. [root@cyy111 ~]# puppetd --server cyy100 --test

這裏說一下的就是客戶端第一次向服務端請求證書的時候要保證兩邊的時間是同步的,要不會報錯

  1. err: Could not retrieve catalog from remote server: certificate verify failed.

出現這個錯誤首先同步時間:

  1. /usr/sbin/ntpdate time.nist.gov

然後刪除兩邊的SSL證書

  1. rm  -f /var/lib/puppet/ssl/ca/signed/caotest-2.cym.pem  ###服務端

  1. rm -rf  /var/lib/puppet/ssl/    ###客戶端

再重新驗證

  1. [root@cyy111 ~]# puppetd --server cyy100 --test

沒什麼問題應該成功了,puppet默認是半小時執行一次,個人推薦用定時任務來執行


可以先隨便寫個類來驗證下是否成功

  1. [root@cyy100 templates]# cd /etc/puppet

  2. [root@cyy100 puppet]# cd modules/

  3. [root@cyy100 modules]# mkdir test/

  4. [root@cyy100 modules]# mkdir test/manifests/

  5. [root@cyy100 modules]# mkdir test/files/

  6. [root@cyy100 modules]#vi test/files/init.pp

在init.pp裏面寫入以下內容

  1. class po {

  2.        file { "/tmp/test.txt":

  3.                ensure  => present,

  4.                group   => "root",

  5.                owner   => "root",

  6.                mode    => "0644",

  7.                source  => "puppet:///test/test.txt"

  8.                }

  9. }

然後在/etc/puppet/modules/test/files下面創建一個test.txt文件,往裏面寫入:hello world !

/etc/puppet/manifests/modules.pp 寫入:

  1. import "test"

/etc/puppet/manifests/node裏面寫入

  1. node 'cyy111'{

  2. include po

  3. }

然後在客戶端執行

  1. puppetd --server cyy100 --test

就可以看到test.txt文件下發到客戶端的/tmp目錄下了。


就先寫到這裏了,後面還有更多的語法啊各種錯誤啊,搭nginx啊這些以後再慢慢寫了。歡迎大家回帖跟我交流,本人也屬於剛接觸的菜鳥,大家共同進步。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章