Puppet集中配置管理系統
Puppet是一個配置管理工具,典型的,puppet是一個C/S結構,當然,這裏的C(客戶端)可以有很多,因此,也可以說是一個星形結構,所有的puppet客戶端同一個服務器端的puppet通訊。每個puppet客戶端每半小時連接一次客戶端(時間也可以設置為其他),下載最新的配置文件,並且嚴格按照配置文件來配置服務器,配置完成以後,puppet客戶端可以反饋給服務器端一個消息,如果出錯,也會給服務器端反饋一個消息。下面是一個典型的puppet配置的數據流動情況
1 (管理員)管理員編寫puppet manifest,提交到svn (svn db svn db備份 ) 只需要備份svn,你就備份了所有的服務器配置 哪怕是上萬臺計算機 這裏的備份數據不會超過
2 從svn取出所有的puppet配置信息
3 (puppet master)客戶端facter收集服務器信息發送給puppet master (連接是基於ssl和證書的,保證了安全性)
4 puppet master 根據收集到的客戶端信息,編譯manifest,發回到客戶端
5(多個puppet client) puppet執行從服務器收到的manifest,完成對機器的配置
穩定性
Puppet與其他手工操作工具由一個最大區別就是puppet的配置具有穩定性,因此你可以多次執行puppet,一旦你更新了你的配置文件,puppet就會根據配置文件夾更改你的機器配置,通常每30分鐘檢查一次,puppet
Puppet的細節和原理
Puppet的目的時為了讓你只集中於你要管理的目標,而忽略實現的細節,例如命令名 參數或者文件格式,puppet把系統裏面的用戶 軟件包 服務等看作是資源,puppet的作用就是管理這些資源以及資源之間的相互聯系。
Puppet采用了非常簡單的C/S架構,所有數據的交互都通過ssl進行,以保證安全,它的工作流程入圖所示:
Puppet clientpuppet master
Connet1plugins
2
Facter3ENC
4
Apply catalognode $certname(
$conf = linux
Class {‘ssh’:
Ssh_key=>’$file’,
}
)
5
File?Comple catelog functions
6
Reportfileserver
8 7
Finishreport
1 客戶端puppet向master發起認證請求,或使用帶簽名的證書
2 Master告訴client你是合法的
3 客戶端puppetd調用faster,faster探測出主機的一些變量,例如主機名,內存大小,ip地址等,puppet將這些信息通過ssl連接發送到服務器端
4 服務器端的puppet master檢測客戶端的主機名,然後找到manifest對應的node配置,並對該部分內容進行解析。Facter送過來的信息可以作為變量處理,node牽扯到的代碼才解析,其他沒牽扯到的代碼不解析。解析分為幾個階段,首先是語法檢查,如果語法錯誤就報錯;如果語法沒錯,就繼續解析,解析的結果生成一個中間的偽代碼(catelog),然後把偽代碼發給客戶端
5 客戶端接收到偽代碼 並且執行
6 客戶端在執行時判斷有沒有file文件,如果有 則向fileserver發起請求
7 客戶端判斷有沒有配置report,如果已配置,則把執行結果發送給服務器
8服務器端把客戶端的執行結果寫入日誌,並發送給報告系統
@@@@@@@@@@@@@@ puppert @@@@@@@@@@@@@@@@@@@
系統環境:rhel6.3 selinux and iptables disabled
Server:192.168.0.201 desktop1.example.com puppet master
Client: 192.168.0.202 desktop2.example.com puppet agent
Client: 192.168.0.203 desktop3.example.com puppet agent
重要:Server和所有的client之間需要解析,以及時間同步,不然會驗證失敗
Server端:
yum localinstall -y rubygems-1.3.7-1.el6.noarch.rpm
搭建yum倉庫:【puppet】和【ruby]這兩個
Yum install -y puppet-server
/etc/puppet配置目錄:
組織結構如下:
-puppet.conf 主配置文件,詳細內容可執行puppet --genconfig
-fileserver.conf 文件服務器配置文件
-auth.conf 認證配置文件
-autosign.conf 自動驗證配置文件
-tagmail.conf 郵件配置文件(將錯誤信息發送此)
-manifests 文件存儲目錄(puppet會先讀取該目錄的.pp文件,<site.pp>)
-node
-puppetclient.pp
-site.pp 定義puppet相關的變量和默認配置
-modules.pp 加載class類模塊文件(include syslog)
-modules 定義模塊
-syslog 以syslog為例
-file
-manifests
-init.pp class類配置
-templates 模塊配置目錄
-syslog.erb erb模塊
Puppet第一個執行的代碼是/etc/puppet/manifest/site.pp,因此這個文件必須存在,而且其他的代碼也要通過該文件來調用
touch /etc/puppet/manifest/site.pp
沒有此文件puppet master無法啟動,配置後面在定義
Service puppetmaster start 啟動puppetmaster
Netstat -antlp |grep ruby
Tcp 8140 listen 1596/ruby
Client端:
只需安裝puppet即可,安裝方法同server端:yum install -y puppet
##客戶端連接到puppet master:
Puppet agent --server=desktop1.example.com --no-daemonize --veibose
Info: creating a new SSL key for desktop2.example.com
Info: caching certificate for ca
Info: cteating a new SSL certificate request for desktop2.example.com
Info(information)的縮寫 信息 知料 情報 通知
Client向master發出證書驗證請求,然後等待master簽名並返回證書
參數 --server指定了需要連接的puppet master的名字或是地址,默認連接名為puppet的主機
如果修改默認連接主機可以修改/etc/sysconfig/puppet文件中的PUPPET_SERVER=puppet選項
參數 --no-daemonize是puppet客戶端運行在前臺
參數--verbose使客戶端輸出詳細的日誌
在master端:
Puppet cert list 顯示所有等待簽名的證書
puppet cert sign desktop2.example.com 簽名證書
## 如果同時簽名所有證書,執行以下命令:
Puppet cert sign --all
Puppet cert clean desktop2.example.com 刪除簽名證書
在對證書簽名後的兩分鐘後,在agent端上可以看到如下輸出:
Info:caching certification for desktop2.example.com
Starting puppet client version 3.0.0
Info:caching certificate_revocation_list for ca
Info:applying configuration version ‘1349536603’
Finished catalog run in 0.13 seconds
自動驗證:
在server端,編譯puppet.conf文件:
Vim /etc/puppet/puppet.conf
[main]
Autosign = true 允許所有客戶端認證
/etc/puppet 目錄下創建autosign.conf文件,內容如下:
Vim /etc/puppet/autosign.conf
*.example.com 表示允許所有example.com域的主機
Service puppetmaster reload
在client端只需執行:
server puppet start
在實際中有時會修改client端的主機名,這樣就需要重新生成證書:
1 在server端執行:puppet cert --clean desktop2.example.com
你要刪除的原client端主機名
2 在client 端執行 : rm -fr /var/lib/puppet/ssl/*
Puppet agent --server=puppet.example.com
Puppet資源定義
一下資源均可在
server1
裝8個軟件 在打開服務 /etc/init.d/puppertmaster start
server2
裝7個軟件 在打開服務 /etc/init.d/puppert start
發送請求 puppet agent --server server1.example.com --no-daemonize -vt
server1
puppet cert list 顯示所有的等待簽名的證書
puppet cert list --all
puppet cert sign server2.example.com ##發送證書
在server2上
puppet agent --server server1.example.com --no-daemonize -vt
## 查看發送的證書
在server3 上
裝7個軟件
在server1 上cd /etc/puppet
vim autosign.conf(自創文件)
*.example.com
vim puppet.conf
在【main】目錄下加 autosign = true
/etc/init.d/puppetmaster reload
在server3
puppet agent --server server1.example.com --no-daemonize -vt
### 即可發送請求成功
在server1
puppet cert list --all
puppet cert clean server2.example.com
puppet cert list --all
在server2
puppet agent --server server1.example.com --no-daemonize -vt
### 會有報錯 因為修改了配制文件 得到了認證 發送請求自動成功
cd /var/lib/puppet/ssl rpm -qf /var/lib/puppet/ssl ls rm -fr *
刪除之後 在向master發送認證請求 就不會報錯了 若再有報錯就重啟一下puppetmaster reload
在server1
puppet cert list --all 即可看到三個證書請求
在server1
cd manifests/ vim site.pp (自創)
file {
"/tmp/testfile":
content => "www.westos.org"
}
在server2
puppet agent --server server1.example.com --no-daemonize -vt 即可
server1變動的東西cat /tmptestfile md5sum /tmp/testfile
vim /tmp/testfile 隨便加一些東西在發送請求可看到變動
puppet agent --server server1.example.com --no-daemonize -vt
在cat /tmp/testfile 會看到server2的/tmp/testfile 文件已經被主服務器更改了
server2受server1操縱
本文出自 “陽光蜜汁” 博客,謝絕轉載!
Puppet集中配置管理系統