Puppet做爲開源的集羣管理框架,有着簡單易用、快速部署、使用範圍廣等特性,已經積累了超過250家的用戶,包括阿里巴巴、新浪、Oracle等大公司。本文做者將帶領你們瞭解puppet技術及其簡單的應用。node
背景簡介linux
在傳統的服務器集羣管理中,每增長一臺服務器,都須要對該服務器進行相應的配置。若是服務器數量少,那逐一對服務器進行配置是沒問題的。可是在目前的生產環境中,服務器數量動輒就是成千上萬臺。傳統的集羣管理方案耗時耗力,已沒法快速有效的適應生產環境的需求。目前,在公司內部存在3萬多臺的web服務器,如何對其進行快速部署成爲公司內部亟待解決的問題。主要需求包括:web
如何快速的解決以上狀況所引發的生產環境失效的問題,咱們對自動化集羣管理工具puppet進行了調研,從軟件包、配置文件和服務三種類型的資源出發,對服務器集羣進行了自動化管理設計。面試
1. Puppet是什麼windows
Puppet是一種跨平臺、C/S架構的集中配置管理系統,能夠用於管理linux、windows、unix、mac等平臺下的用戶、軟件包、文件、服務和cron任務等,而且能夠妥善處理資源之間的依賴關係。其使用ruby語言開發,可是使用者並不須要瞭解ruby語言,由於其僅僅依賴於一種以pp爲後綴的文件,在puppet框架搭建好後,就只剩下模塊的開發,模塊開發採用描述性語言和基本的邏輯控制語句,簡單易懂,很是適合於管理和部署大規模的集羣系統。centos
2. Puppet架構緩存
Puppet使用C/S架構,分爲puppet server(master)和puppet client(agent)。master是配置和管理中心,管理着全部的節點。系統管理員須要在master上編寫每一個節點所對應的pp文件來描述不一樣節點的資源集合和目標狀態。各個agent會週期性的查詢master,來獲取本身的配置,並將結果以報告的形式傳送給master。ruby
puppet使用ssl認證,在client與master第一次通信認證經過後,證書會存儲在master上,當僅有一臺master時,這不會產生問題。可是,在咱們的設計中,爲了保證高可用和高併發,master是集羣,master集羣的前面是負載均衡,同一client與master屢次通訊時,沒法保證鏈接的是同一個master,也就是說沒法保證證書的獲取。爲此,puppet官方建議搭建單獨的CA認證服務器,從而實現證書的統一中心化管理。所以在大規模集羣管理系統中,常見的puppet架構如上圖,本公司一樣也採用了該架構搭建集羣管理系統。服務器
3. Puppet工做流程架構
Puppet既能夠單機運行,也能夠經過C/S架構的方式運行,不過在大多數狀況下仍是基於C/S架構的方式來運行,其交互過程以下圖所示。
4. Puppet安裝與配置
基於公司內部已有的DNS域名解析和LVS負載均衡服務,圍繞puppet的整個集羣管理系統架構圖,在centos環境下,puppet安裝與配置方法以下:
(1) Master
目前使用了4臺master用於管理15000臺左右的服務器,若是後期master壓力增大,再適當的擴容。配置步驟以下:
1)安裝puppet的相關包,包括puppet-server、Apache、mod_ssl、mod_passenger。
在安裝以上包的同時,系統會自動安裝facter包和一些ruby依賴包。
2)編輯 /etc/puppet/puppet.conf配置文件。
3)複製CA服務器上的證書,主要是打包CA服務器上的ssl目錄,並放到master上的ssl目錄下。
4)初始化master,生成必須文件。
5)創建/etc/httpd/conf.d/puppet.conf配置文件。
6)建立虛擬主機的DocumentRoot。
7)啓動puppet。
2. CA
將master和agent的認證機制放在單獨的CA服務器上,能夠方便master集羣的管理和擴容。配置步驟以下:
1)安裝puppet的相關包,包括puppet-server、Apache、mod_ssl、mod_passenger。
2)編輯/etc/puppet/puppet.conf配置文件。
3)建立/etc/puppet/autosign.conf配置文件,若是內容是「*」,表示全部主機均可訪問。
4)啓動一下puppet master,實現初始化,生成key和自認證。
5)爲master服務器生成證書。
6)創建/etc/httpd/conf.d/puppet.conf配置文件,文件的設置參照master的配置。
7)建立虛擬主機的DocumentRoot,參照master的配置。
8)啓動puppet,參照master的配置。
3. Agent
Puppet客戶端安裝比較簡單,配置步驟以下:
1)安裝puppet的相關包,包括addops-puppet、addops-puppet-agent-extra(公司內部包)。其中第一個包爲yum源包,第二個包爲puppet的擴展包,其依賴於puppet包,而且會自動修改配置文件中的ca_server、server和node_name_value三個變量的值。
2)測試運行:puppet agent --test,默認同步的環境爲production,能夠手動添加環境參數,如--environment=staging,便可改成臨時環境。
5. Puppet配置解讀
puppet的主配置文件puppet.conf位於/etc/puppet/(社區版)目錄下,其中主要包含了main、master和agent三個命名空間,依次介紹以下:
1)main通用配置選項
2)Master服務端配置選項
3)Agent客戶端配置選項
6. Puppet資源簡介
資源是puppet系統的核心,抽象的足夠完全,類似的資源被抽象成了一種資源類型,如程序包資源、文件資源、服務資源和exec資源等。資源屬性與其實現方式剝離開來,僅僅描述資源的狀態,而不是其具體的實現過程,便可達到資源的同步。
(1) 資源定義
資源定義即向資源類型的屬性賦值,也稱爲資源類型的實例化。資源的定義在pp文件中完成,其目錄結構通常以下所示:
Files文件夾用於存放該軟件包的配置文件,manifests文件夾用於存放資源的實例,即類文件,templates用於存放模板。
定義的資源語法以下:
Type即爲資源的類型,好比程序包資源package,文件資源file等,title是一個字符串,在同一類型中必須惟一,每一個屬性用「,」隔開。經過將class、條件控制語句與資源的定義相結合,便可實現資源的模塊化,達到易複用的效果。
(2) 經常使用資源
基於公司內部運維組的需求,puppet主要從程序包、配置文件、服務、exec四個方面展開應用,本文主要對前兩種資源展開介紹。另外,咱們能夠利用「Puppet describe 資源名稱」命令查看資源的詳細描述。
1)程序包package
Package資源的描述如上圖所示,下來咱們將對package資源的主要屬性進行介紹:
使用案例以下:
其中,package_name和package_ensure是傳入的參數值,經過對屬性以參數的形式賦值,能夠大大提升模塊的複用性。
2)配置文件file
file資源的描述如上圖所示,下來咱們將對file資源的主要屬性進行介紹:
使用案例以下:
服務和exec資源在這裏再也不贅述,能夠利用上述提到的命令,查看資源的詳細介紹和參數的使用方法。從以上案例能夠看出,採用puppet描述語言,結合經常使用的邏輯控制語句,能夠快速的開發出不一樣資源的類模塊。
結論
隨着服務器集羣規模的增大,公司愈來愈重視經過自動化配置來減少管理部署的成本。Puppet做爲開源的集羣管理框架,有着簡單易用、快速部署、使用範圍廣等特性,已經有超過250家的用戶,包括Zynga、Twitter、Citrix、Oracle、Shopzilla、Google、RedHat、新浪、阿里巴巴、豆瓣、好樂買、趣遊、PPTV等大公司。本文主要介紹了puppet架構、安裝方法以及資源的使用案例,屬於puppet集羣管理的基礎篇。隨着puppet集羣規模的增大,未來咱們會繼續介紹puppet中的facter工具、hiera工具、模塊編寫規範、master集羣擴展,逐漸搭建一套大規模、健壯的puppet自動化管理集羣。
以爲不錯請點贊支持,歡迎留言或進個人我的羣855801563領取【架構資料專題目合集90期】、【BATJTMD大廠JAVA面試真題1000+】,本羣專用於學習交流技術、分享面試機會,拒絕廣告,我也會在羣內不按期答題、探討。