歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RHEL6下puppet部署管理安裝測試

RHEL6下puppet部署管理安裝測試

日期:2017/2/27 15:59:58   编辑:Linux教程
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包中拷取相應的配置文件:
# cp conf/redhat/fileserver.conf /etc/puppet/
# cp conf/redhat/puppet.conf /etc/puppet/
# cp conf/redhat/server.init /etc/init.d/puppetmaster
# chmod 755 /etc/init.d/puppetmaster
# chkconfig --add puppetmaster
# chkconfig puppetmaster on
# 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賬戶:
# puppetmasterd --mkusers

啟動:
# /etc/init.d/puppetmaster start

b、Client端
從解開的源碼包拷取相關配置文件:
# 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 = server  //服務器端主機名

# vi /etc/puppet/namespaceauth.conf
#修改內容如下
[fileserver]
allow *
[puppetmaster]
allow *
[puppetrunner]
allow *
[puppetbucket]
allow *
[puppetreports]
allow *
[resource]
allow *

生成puppet賬戶:
# puppetmasterd  --mkusers
# rm -rf /var/lib/puppet/ssl/*
//刪除客戶端/var/lib/puppet/ssl目錄下的文件,否則可能會報錯

啟動:
# /etc/init.d/puppet start

4、puppet通信
Client
# 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

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'

# 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)

client再次發送請求puppetd--test --server server
# 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

完成以上之後server和client就可以正常通信了

常見錯誤和解決方法:
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
解決方法: 務必保持兩台主機時間同步
Copyright © Linux教程網 All Rights Reserved