一、Puppet概述
Puppet是開源的基於Ruby的系統配置管理工具,基於C/S的部署架構。是一個爲實現數據中心自動化管理而設計的配置管理軟件,它使用跨平臺語言規範,管理配置文件、用戶、軟件包、系統服務等。客戶端默認每隔半小時會和服務器通信一次,確認是否有更新。當然也可以配置主動觸發來強制客戶端更新。這樣就把日常的系統管理任務代碼化了,代碼化的好處是可以分享,保存,避免重複勞動,也可以快速恢復以及快速的大規模部署服務器。
二、Puppet構架
puppet的服務器端保存着所有的對客戶端服務器的配置代碼,在puppet裏面叫做manifest. 客戶端下載manifest之後,可以根據manifest對服務器進行配置,例如軟件包管理,用戶管理和文件管理等等。Puppet架構如下:
三、應用場景
統一安裝、配置管理軟件
統一配置系統優化參數
定期檢測服務是否運行
快速替換集羣時設備的角色
四、Puppet工作原理
流程簡述如下:
1、客戶端puppetd向master發起認證請求。
2、Puppet Master告訴client是合法的。
3、客戶端puppetd開始調用facter,facter可以探測出主機的一些變量,例如主機名,內存大小,IP地址等。pupppetd 把這些信息通過ssl連接發送到服務器端。
4、服務器端的puppet Master 檢測客戶端的主機名,然後找到manifest裏面對應的node配置, 並對該部分內容進行解析,解析分爲幾個階段,語法檢查,如果語法錯誤就報錯。如果語法沒錯,就繼續解析,解析的結果會生成一箇中間的“僞代碼”(catalog),然後把僞代碼發給客戶端。
5、客戶端接收到“僞代碼”,並且執行。
6、客戶端在執行時判斷有沒有file文件,如果有就向Fileserver發起請求。
7、客戶端繼續判斷有沒有配置Report。如果配置,就把執行結果發送給服務器。
8、服務器端把客戶端的執行結果寫入日誌。並可以發送給報告系統(DashBoard)
五、Puppet組織結構
Puppet的目錄結構描述如下:
|-- puppet.conf # 主配置配置文件
|-- fileserver.conf #文件服務器配置文件
|-- auth.conf #認證配置文件 (只允許域內認證)
|-- autosign.conf #自動驗證配置文件
|-- tagmail.conf # 郵件配置文件(將錯誤信息發送)
|-- manifests # 文件存儲目錄(puppet會先讀取該目錄的.pp文件<site.pp>)
|-- nodes
| | | puppetclient.pp #puppet解析主配置文件所有的模塊和節點都在此文件裏include
| |-- site.pp # 定義puppet相關的變量和默認配置
| |-- modules.pp # 加載class類模塊文件(include nginx)
|-- modules # 定義模塊
| --nginx # 以nginx爲例
| |-- file
| |-- manifests
| | |-- init.pp #類的定義,類名必須與模塊名相同
| |--- templates # 模塊配置目錄,可以被模塊的manifests引用
| | |-- nginx.erb #erb模板
六、Puppet Dashboard
Puppet Dashboard可以爲Puppet環境添加一個圖形用戶界面(GUI)。Puppet Dashboard可以顯示主機上Puppet的運行結果,並且可以提供一個節點分類工具來配置主機。
可以從https://downloads.puppetlabs.com/dashboard/下載puppet-dashboard,安裝後的截圖如下:
七、Puppet LoadBlancer
當需要部署的服務器越來越多(超過1000臺)時,Puppet Master解析工作將非常繁重,同時文件分發也將成爲瓶頸,再加上很多的Client需要做CA認證,單臺Puppet將無法滿足需求,此時就需要對Puppet做LoadBlancer,建議採用的方式是通過Nginx做負載分配,典型的Puppet集羣架構如下:
構架說明:
1、nginx監聽port 8140端口,將除文件下發之外的請求,代理轉發給下面的三個puppet Master任意一個,實現負載均衡。
2、每個puppet Master運行在18140端口,提供配置管理。
3、CA認證系統從puppet Master獨立出來,也運行在18140端口,用兩臺服務器做HA,實現高可用。