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