puppet 安裝部署

1.  概述


puppet是一個開源的軟件自動化配置和部署工具,它使用簡單且功能強大,正得到了越來越多地關注,現在很多大型IT公司均在使用puppet對集羣中的軟件進行管理和部署。


2.  設計架構


puppet是基於c/s架構的。服務器端保存着所有對客戶端服務器的配置代碼,在puppet裏面叫做manifest. 客戶端下載manifest之後,可以根據manifest對服務器進行配置,例如軟件包管理,用戶管理和文件管理等等。

                   wKioL1L631_zFCbsAAECbW4G4VE681.jpg

如上圖所示,puppet的工作流程如下:(1)客戶端puppetd調用facter,facter探測出主機的一些變量,例如主機名,內存大小,ip地址等。pupppetd 把這些信息通過ssl連接發送到服務器端; (2)服務器端的puppetmaster 檢測客戶端的主機名,然後找到manifest裏面對應的node配置, 並對該部分內容進行解析,facter送過來的信息可以作爲變量處理,node牽涉到的代碼才解析,其他沒牽涉的代碼不解析。解析分爲幾個階段,語法檢查,如果語法錯誤就報錯。如果語法沒錯,就繼續解析,解析的結果生成一箇中間的“僞代碼”,然後把僞代碼發給客戶端;(3)客戶端接收到“僞代碼”,並且執行,客戶端把執行結果發送給服務器;(4)服務器端把客戶端的執行結果寫入日誌。


puppet工作過程中有兩點值得注意,第一,爲了保證安全,client和master之間是基於ssl和證書的,只有經master證書認證的client可以與master通信;第二,puppet會讓系統保持在你所期望的某種狀態並一直維持下去,如檢測某個文件並保證其一直存在,保證ssh服務始終開啓,如果文件被刪除了或者ssh服務被關閉了,puppet下次執行時(默認30分鐘),會重新創建該文件或者啓動ssh服務。


3.兩臺服務器安裝前部署:

 關閉selinux

 /bin/sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux

 /bin/sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

 統一時間安裝ntp

 yum install ntp* -y

 service ntpd restart

 /bin/cat > /var/spool/cron/root << EOFW

 * */1 * * * /usr/sbin/ntpdate ntp.api.bz;/usr/sbin/hwclock -w > /dev/null 2>&1

 EOFW

 設置本地dns

 /bin/cat > /etc/resolv.conf << _resolv

 nameserver 114.114.114.114

 nameserver 202.106.0.20

 nameserver 114.114.115.115

 _resolv



4.下載必要軟件

 wget http://downloads.puppetlabs.com/facter/facter-1.6.5.tar.gz

 wget http://downloads.puppetlabs.com/puppet/puppet-2.6.13.tar.gz

 yum install -y ruby ruby-rdoc  ruby-devel  ruby-ri



5.安裝:

 服務器端puppet:

 tar zxvf facter-1.6.5.tar.gz

 cd facter-1.6.5

 ruby install.rb

 cd ..

 tar zxvf puppet-2.6.13.tar.gz

 cd puppet-2.6.13

 ruby install.rb

 cp conf/auth.conf /etc/puppet/

 cp conf/redhat/fileserver.conf /etc/puppet/

 cp conf/redhat/puppet.conf /etc/puppet/

 cp conf/redhat/server.init /etc/init.d/puppetmaster

 chmod +x /etc/init.d/puppetmaster

 chkconfig --add puppetmaster

 chkconfig puppetmaster on

 生成pupput用戶

 puppetmasterd --mkusers  如果報錯,則手工建立puppet用戶和組(puppet放到puppet組)

 啓動

 /etc/init.d/puppetmaster start


 客戶端agent:

 tar zxvf facter-1.6.5.tar.gz

 cd facter-1.6.5

 ruby install.rb

 cd ..

 tar zxvf puppet-2.6.13.tar.gz

 cd puppet-2.6.13

 ruby install.rb

 cp conf/auth.conf /etc/puppet/

 cp conf/namespaceauth.conf /etc/puppet/

 cp conf/redhat/puppet.conf /etc/puppet/

 cp conf/redhat/client.init /etc/init.d/puppet

 chmod +x /etc/init.d/puppet

 vi /etc/puppet/puppet.conf

 ---

 [agent]

  Listen = true

  Server = puppet

 ---

 vi /etc/puppet/namespaceauth.conf

 ----

 [fileserver]

   allow *

 [puppetmaster]

   allow *

 [puppetrunner]

   allow *

 [puppetbucket]

   allow *

 [puppetreports]

   allow *

 [resource]

 allow *

 ----

 生成pupput用戶

 puppetd –mkusers  如果報錯,則手工建立puppet用戶和組(puppet放到puppet組)

 啓動

 /etc/init.d/puppet start



6.修改主機名和hosts解析

 修改雙方的/etc/hosts文件,添加各自的IP地址對應的主機名,生產環境做內部DNS比較好,不用修改每臺服務器的hosts文件。

  192.168.5.22 puppet.domain.com

  192.168.5.23 agent.domain.com



7.認證和測試

 在服務端設置:vim /etc/puppet/manifests/site.pp

 node default { file { "/tmp/puppettest1.txt": content => "Hello,First Puppet test"; } }


 客戶端執行puppetd --test --server server.puppet.com發送認證請求

 puppetd --test --server server.puppet.com

wKioL1L5-lvSpOXiAANfKPJJ_EY920.jpg

 服務器端執行puppetca -s -a

 puppetca -s –a發送接受請求。

wKiom1L5-pSBmBs6AAEOwNTsoTU353.jpg

 客戶端再次發送請求

 puppetd --test --server server.puppet.com

wKioL1L5-oGw2bqxAALg6ij3WOY953.jpg

 出現上面信息表示server端已接受請求,連接成功。如果報下面錯誤

 puppetd --test --server server.puppet.com

 err: Could not retrieve catalog from remote server: hostname not match with the server certificate

 warning: Not using cache on failed catalog

 err: Could not retrieve catalog; skipping run

 err: Could not send report: hostname not match with the server certificate

 則需要修改服務器的主機名和本機的hosts解析。


8.測試

 下面再舉一個例子:

  在服務器的/etc/puppet/manifests/建立site.pp裏面放置如下內容

  node default {

  file{"/tmp/a.txt":

  content => "helo,I am abc.bbb!abc.aaa \n bbbbbb \n cccc \n dddd \n",

  ensure  => present,

  mode => 644,

  owner => root,

  group => root,

  }

  }

  在客戶端上執行puppetd --test --server server.puppet.com可以發現/tmp/會生成a.txt文件,內容是content裏面的內容。

  cat /tmp/a.txt

  helo,I am abc.bbb!abc.aaa

  bbbbbb

  cccc

  dddd

  到這裏就已經完全ok了。


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