RHEL6下puppet部署管理1之安裝測試

kumu_linux發表於2012-06-12

puppet是一個為實現資料中心自動化管理而設計的配置管理軟體。基於c/s架構。puppet的伺服器端儲存著所有的對客戶端伺服器的配置程式碼,在puppet裡面叫做manifest. 客戶端下載manifest之後,可以根據manifest對伺服器進行配置,例如軟體包管理,使用者管理和檔案管理等等。

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服務。

Puppet是Puppet Labs 基於ruby語言開發的自動化系統配置工具,可以以C/S 模式或獨立模式執行,支援對所有 UNIX 及類 UNIX 系統的配置管理,最新版本也開始支援對 Windows 作業系統有限的一些管理。Puppet 適用於伺服器管理的整個過程,比如初始安裝、配置、更新以及系統下線。

典型的 Puppet 架構為星型結構,Clients預設每30分鐘請求一次Server 端,確認是否有新的變更操作指令

1、執行環境和軟體

執行環境:RHEL6.1 (防火牆和SELINUX關閉) + VitualBox

軟體:puppet-2.7.12.tar.gz

facter-1.6.6.tar.gz

以下安裝採用兩臺伺服器,一臺是 server.sxkeji.com用來安裝 puppet-server 服務;一臺是 client.sxkeji.com 用來安裝 puppet 客戶端。

Puppet 要求所有機器有完整的域名(FQDN修改雙方的/etc/hosts檔案,新增各自的IP地址對應的主機名,生產環境做內部DNS比較好,不用修改每臺伺服器的hosts檔案。

# vi /etc/hosts

# 新增內容如下

10.1.1.78 server.sxkeji.com  server

10.1.1.79 client.sxkeji.com  client

 

保持兩臺主機時間同步(可通過搭建ntp伺服器,這裡不作具體搭建ntp服務說明)

2、Puppet安裝

puppet 是用ruby語言寫的,所以要安裝ruby環境,伺服器端與客戶端都要安裝

ruby語言安裝

# yum install ruby* -y

 

facter安裝

# tar xf facter-1.6.6.tar.gz

# cd facter-1.6.6

# ruby install.rb

 

Puppet安裝

# tar xf puppet-2.7.12.tar.gz

# cd puppet-2.7.12

# ruby install.rb


3、Puppet相關配置

a、Server端

從解開的tar包中拷取相應的配置檔案:

[root@server puppet-2.7.12]# cp conf/redhat/fileserver.conf /etc/puppet/

[root@server puppet-2.7.12]# cp conf/redhat/puppet.conf /etc/puppet/

[root@server puppet-2.7.12]# cp conf/redhat/server.init /etc/init.d/puppetmaster

[root@server puppet-2.7.12]# chmod 755 /etc/init.d/puppetmaster

[root@server puppet-2.7.12]# chkconfig --add puppetmaster

[root@server puppet-2.7.12]# chkconfig puppetmaster on

[root@server puppet-2.7.12]# mkdir /etc/puppet/manifests

 

# pwd

/etc/puppet

# ls

auth.conf  fileserver.conf  manifests  puppet.conf

// auth.conf --> client訪問puppet server的ACL配置檔案

// fileserver.conf --> puppet server 作為檔案伺服器的ACL配置檔案

// manifests --> Puppet指令碼主檔案目錄,至少需要包含site.pp檔案

// puppet.conf --> Puppet伺服器配置檔案

#

 

生成puppet賬戶:

[root@server puppet-2.7.12]# puppetmasterd --mkusers

 

啟動:

# /etc/init.d/puppetmaster start

 

b、Client端

從解開的原始碼包拷取相關配置檔案:

[root@client puppet-2.7.12]# cp conf/namespaceauth.conf /etc/puppet/

[root@client puppet-2.7.12]# cp conf/redhat/puppet.conf /etc/puppet/

[root@client puppet-2.7.12]# cp conf/redhat/client.init /etc/init.d/puppet

[root@client puppet-2.7.12]# chmod +x /etc/init.d/puppet

 

修改相關配置檔案:

[root@client puppet-2.7.12]# vi /etc/puppet/puppet.conf

#修改內容如下

[agent]

listen = true

server = server  //伺服器端主機名

[root@client puppet-2.7.12]# vi /etc/puppet/namespaceauth.conf

#修改內容如下

[fileserver]

allow *

[puppetmaster]

allow *

[puppetrunner]

allow *

[puppetbucket]

allow *

[puppetreports]

allow *

[resource]

allow *

[root@client puppet-2.7.12]#

 

生成puppet賬戶:

[root@client puppet-2.7.12]# puppetmasterd  --mkusers

[root@client puppet]# rm -rf /var/lib/puppet/ssl/*

//刪除客戶端/var/lib/puppet/ssl目錄下的檔案,否則可能會報錯

 

啟動:

# /etc/init.d/puppet start

 

 

4、puppet通訊

Client

[root@client puppet-2.7.12]# puppetd --test --server server  //客戶端向server端傳送請求

//Puppet 客戶端使用 HTTPS和服務端(master)通訊,為了和伺服器端通訊必須有合法的 SSL認證,第一次執行puppet客戶端的時候會生成一個SSL證書並指定發給 Puppet服務端。

info: Creating a new SSL key for client.sxkeji.com

warning: peer certificate won't be verified in this SSL session

warning: peer certificate won't be verified in this SSL session

info: Creating a new SSL certificate request for client.sxkeji.com

info: Certificate Request fingerprint (md5): 62:CD:A6:63:A7:8C:89:54:68:AF:95:12:59:16:D7:08

warning: peer certificate won't be verified in this SSL session

warning: peer certificate won't be verified in this SSL session

warning: peer certificate won't be verified in this SSL session

Exiting; no certificate found and waitforcert is disabled

[root@client puppet-2.7.12]#

 

Server

[root@server ~]# puppetca –list   //Server端檢視請求的主機

  client.sxkeji.com (05:BF:3C:9E:D8:72:13:24:1D:3F:4C:15:00:E7:FC:25)

[root@server ~]# puppetca -s –a  //傳送接受請求

// puppet 服務端接受到客戶端的證書後必須簽字(sign)才能允許客戶端接入

//puppetca –s –a //對所有客戶端全部簽名

//puppetca –s client.sxkeji.com //只簽名某個客戶端

notice: Signed certificate request for client.sxkeji.com

notice: Removing file Puppet::SSL::CertificateRequest client.sxkeji.com at '/var/lib/puppet/ssl/ca/requests/client.sxkeji.com.pem'

[root@server ~]# puppet cert list --all

//使用puppet cert list --all 命令可以檢視客戶端已經加入

+ client.sxkeji.com (05:BF:3C:9E:D8:72:13:24:1D:3F:4C:15:00:E7:FC:25)

+ server.sxkeji.com (52:A3:37:85:33:4D:97:7B:1B:78:87:DE:4F:EB:1D:DE) (alt names: DNS:puppet, DNS:puppet.sxkeji.com, DNS:server.sxkeji.com)

[root@server ~]#

 

client再次傳送請求puppetd--test --server server

[root@client puppet]# puppetd --test --server server.sxkeji.com

notice: Ignoring --listen on onetime run

info: Caching catalog for client.sxkeji.com

info: Applying configuration version '1332988321'

info: Creating state file /var/lib/puppet/state/state.yaml

notice: Finished catalog run in 0.25 seconds

[root@client puppet]#

 

完成以上之後serverclient就可以正常通訊了

 

常見錯誤和解決方法:

1、

notice: Ignoring --listen on onetime run

notice: Run of Puppet configuration client already in progress; skipping

解決方法:a.可以通過ps –e|grep puppet是否有puppet程式在執行。如果有,則停掉puppet,再執行,即可。

b、沒有程式,那有可能puppetdlock存在,則刪除之,使用rm -rf /var/puppet/state/puppetdlock

 

2、

warning: peer certificate won't be verified in this SSL session

warning: peer certificate won't be verified in this SSL session

warning: peer certificate won't be verified in this SSL session

Exiting; no certificate found and waitforcert is disabled

解決方法:mv /var/lib/puppet/  /tmp/

 

3、

err: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed.  This is often because the time is out of sync on the server or client

warning: Not using cache on failed catalog

err: Could not retrieve catalog; skipping run

err: Could not send report: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed.  This is often because the time is out of sync on the server or client

解決方法: 務必保持兩臺主機時間同步

 


相關文章