Puppet自動化集羣管理基礎篇

Puppet做爲開源的集羣管理框架,有着簡單易用、快速部署、使用範圍廣等特性,已經積累了超過250家的用戶,包括阿里巴巴、新浪、Oracle等大公司。本文做者將帶領你們瞭解puppet技術及其簡單的應用。node

背景簡介linux

在傳統的服務器集羣管理中,每增長一臺服務器,都須要對該服務器進行相應的配置。若是服務器數量少,那逐一對服務器進行配置是沒問題的。可是在目前的生產環境中,服務器數量動輒就是成千上萬臺。傳統的集羣管理方案耗時耗力,已沒法快速有效的適應生產環境的需求。目前,在公司內部存在3萬多臺的web服務器,如何對其進行快速部署成爲公司內部亟待解決的問題。主要需求包括:web

  • 忽然有一天,某機房DNS出問題了,須要換個DNS。
  • 基於某個模板的業務快速上線。
  • Apache的配置須要將robots文件的配置修改。
  • 快速安裝某個軟件某個模塊。
  • 修改了某個配置,須要重啓對應服務。
  • 某天咱們對某臺機器作某個測試修改了配置,又某天咱們對另一臺機器測試又修改了一個配置,越積越多。

如何快速的解決以上狀況所引發的生產環境失效的問題,咱們對自動化集羣管理工具puppet進行了調研,從軟件包、配置文件和服務三種類型的資源出發,對服務器集羣進行了自動化管理設計。面試

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

puppet使用ssl認證,在client與master第一次通信認證經過後,證書會存儲在master上,當僅有一臺master時,這不會產生問題。可是,在咱們的設計中,爲了保證高可用和高併發,master是集羣,master集羣的前面是負載均衡,同一client與master屢次通訊時,沒法保證鏈接的是同一個master,也就是說沒法保證證書的獲取。爲此,puppet官方建議搭建單獨的CA認證服務器,從而實現證書的統一中心化管理。所以在大規模集羣管理系統中,常見的puppet架構如上圖,本公司一樣也採用了該架構搭建集羣管理系統。服務器

3. Puppet工做流程架構

Puppet既能夠單機運行,也能夠經過C/S架構的方式運行,不過在大多數狀況下仍是基於C/S架構的方式來運行,其交互過程以下圖所示。

puppet

  • agent經過ssl向master創建認證。
  • 創建認證後,puppet調用agent的facter,探測出主機的一些內置變量,如主機名、系統版本號、ip地址和負載等信息。Agent將這些信息經過ssl加密發送到master端。
  • Master接收到agent的主機信息請求後,根據域名或ip地址將他們發送到本機的manifests或ENC,進行節點配置信息的查詢。
  • 在解析過程當中,首先進行語法檢查,若是有語法錯誤,則中止,返回錯誤信息,不然繼續解析生成catalog。
  • Puppet客戶端agent對服務端生成的catalog進行應用。
  • Puppet客戶端agent對catalog進行代碼驗證並執行,並將結果記入日誌。
  • 將agent信息以報告的形式上報master。
  • 流程結束。

4. Puppet安裝與配置

基於公司內部已有的DNS域名解析和LVS負載均衡服務,圍繞puppet的整個集羣管理系統架構圖,在centos環境下,puppet安裝與配置方法以下:

(1) Master

目前使用了4臺master用於管理15000臺左右的服務器,若是後期master壓力增大,再適當的擴容。配置步驟以下:

1)安裝puppet的相關包,包括puppet-server、Apache、mod_ssl、mod_passenger。

puppet

在安裝以上包的同時,系統會自動安裝facter包和一些ruby依賴包。

2)編輯 /etc/puppet/puppet.conf配置文件。

puppet

3)複製CA服務器上的證書,主要是打包CA服務器上的ssl目錄,並放到master上的ssl目錄下。

4)初始化master,生成必須文件。

puppet

5)創建/etc/httpd/conf.d/puppet.conf配置文件。

puppet

6)建立虛擬主機的DocumentRoot。

puppet

7)啓動puppet。

puppet

2. CA

將master和agent的認證機制放在單獨的CA服務器上,能夠方便master集羣的管理和擴容。配置步驟以下:

1)安裝puppet的相關包,包括puppet-server、Apache、mod_ssl、mod_passenger。

puppet

2)編輯/etc/puppet/puppet.conf配置文件。

3)建立/etc/puppet/autosign.conf配置文件,若是內容是「*」,表示全部主機均可訪問。

puppet

4)啓動一下puppet master,實現初始化,生成key和自認證。

puppet

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通用配置選項

  • confdir:配置文件存放目錄,默認在/etc/puppet。
  • vardir:動態數據存放目錄,默認在/var/lib/puppet。
  • logdir:日誌存放目錄,默認在/var/log/log。
  • rundir:PID存放目錄,默認在/var/run/puppet。
  • statedir:狀態存放目錄,默認在$vardir/state。
  • ssldir:SSL證書存放目錄,默認在$vardir/ssl。
  • trace:發生錯誤時顯示跟蹤信息,默認false。
  • filetimeout:檢測配置文件狀態改變的時間週期,單位秒,默認15秒。
  • syslogfacility:指定syslog功能的級別,默認爲daemon級。
  • manifestdir:系統的啓動文件存放目錄,默認在/etc/puppet/manifests。
  • basemodulepath:模塊的存放目錄,默認爲/etc/puppet/modules,能夠指定多個。
  • pluginsync:當有自定義facter變量時,須要指定該值爲true。
  • ca_server:認證服務器的名稱。

2)Master服務端配置選項

  • user:後臺進程執行的用戶。
  • group:後臺進程執行的組。
  • certname:進行ssl認證時的變量名,默認爲主機名。
  • node_name_value:節點名稱,默認爲主機名。
  • mainfest:mainfest站點文件的名字,默認爲site.pp。
  • bindaddress:後臺進程綁定的網卡地址接口。
  • masterport:後臺進程執行的端口,默認爲8140。
  • ca:當認證服務器位於單獨的服務器上時,須要指定該值爲false。

3)Agent客戶端配置選項

  • classfile:顯示從服務端加載到的類列表。
  • localconfig:本地緩存配置目錄。
  • runinterval:客戶端的檢測時長,默認爲30分鐘檢測一次。
  • listen:監聽進程,用於監聽服務端下發的同步信息。
  • report:值爲true時,向master端發送報告。
  • node_name_value:節點名稱,默認爲主機名。
  • certname:認證名稱,默認爲主機名。
  • Server:master的認證名稱,即certname變量的值。

6. Puppet資源簡介

資源是puppet系統的核心,抽象的足夠完全,類似的資源被抽象成了一種資源類型,如程序包資源、文件資源、服務資源和exec資源等。資源屬性與其實現方式剝離開來,僅僅描述資源的狀態,而不是其具體的實現過程,便可達到資源的同步。

(1) 資源定義

資源定義即向資源類型的屬性賦值,也稱爲資源類型的實例化。資源的定義在pp文件中完成,其目錄結構通常以下所示:

puppet

Files文件夾用於存放該軟件包的配置文件,manifests文件夾用於存放資源的實例,即類文件,templates用於存放模板。

定義的資源語法以下:

puppet

Type即爲資源的類型,好比程序包資源package,文件資源file等,title是一個字符串,在同一類型中必須惟一,每一個屬性用「,」隔開。經過將class、條件控制語句與資源的定義相結合,便可實現資源的模塊化,達到易複用的效果。

(2) 經常使用資源

基於公司內部運維組的需求,puppet主要從程序包、配置文件、服務、exec四個方面展開應用,本文主要對前兩種資源展開介紹。另外,咱們能夠利用「Puppet describe 資源名稱」命令查看資源的詳細描述。

1)程序包package

puppet

Package資源的描述如上圖所示,下來咱們將對package資源的主要屬性進行介紹:

  • name:包名,能夠省略,若是省略,將繼承title的值。
  • ensure:指定軟件包的狀態,安裝、卸載仍是升級。須要卸載時,指定爲「absent」;須要保證最新版本時,指定爲「latest」;須要保證某一版本時,指定爲版本號。
  • source:指定程序包的來源。若是本地yum倉庫已經包含該包,則能夠不指定。
  • provider:指明安裝方式。

使用案例以下:

puppet

其中,package_name和package_ensure是傳入的參數值,經過對屬性以參數的形式賦值,能夠大大提升模塊的複用性。

2)配置文件file

file資源的描述如上圖所示,下來咱們將對file資源的主要屬性進行介紹:

  • ensure:文件的狀態,值有absent、present、file、directory和link。
  • path:文件路徑,不指定時爲title的值。「ensure=>absent」共用。
  • owner:文件的屬主。
  • Group:文件的屬組。
  • Mode:文件的權限。
  • Source:文件來源。

使用案例以下:

服務和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+】,本羣專用於學習交流技術、分享面試機會,拒絕廣告,我也會在羣內不按期答題、探討。

相關文章
相關標籤/搜索