新聞中心
Puppet作為開源的集群管理框架,有著簡單易用、快速部署、使用范圍廣等特性,已經(jīng)積累了超過250家的用戶,包括阿里巴巴、新浪、Oracle等大公司。本文作者將帶領(lǐng)大家了解puppet技術(shù)及其簡單的應(yīng)用。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供上杭網(wǎng)站建設(shè)、上杭做網(wǎng)站、上杭網(wǎng)站設(shè)計、上杭網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、上杭企業(yè)網(wǎng)站模板建站服務(wù),10年上杭做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
背景簡介
在傳統(tǒng)的服務(wù)器集群管理中,每增加一臺服務(wù)器,都需要對該服務(wù)器進(jìn)行相應(yīng)的配置。如果服務(wù)器數(shù)量少,那逐一對服務(wù)器進(jìn)行配置是沒問題的。但是在目前的生產(chǎn)環(huán)境中,服務(wù)器數(shù)量動輒就是成千上萬臺。傳統(tǒng)的集群管理方案耗時耗力,已無法快速有效的適應(yīng)生產(chǎn)環(huán)境的需求。目前,在公司內(nèi)部存在3萬多臺的web服務(wù)器,如何對其進(jìn)行快速部署成為公司內(nèi)部亟待解決的問題。主要需求包括:
- 突然有一天,某機(jī)房DNS出問題了,需要換個DNS。
- 基于某個模板的業(yè)務(wù)快速上線。
- Apache的配置需要將robots文件的配置修改。
- 快速安裝某個軟件某個模塊。
- 修改了某個配置,需要重啟對應(yīng)服務(wù)。
- 某天我們對某臺機(jī)器做某個測試修改了配置,又某天我們對另外一臺機(jī)器測試又修改了一個配置,越積越多。
如何快速的解決以上情況所引起的生產(chǎn)環(huán)境失效的問題,我們對自動化集群管理工具puppet進(jìn)行了調(diào)研,從軟件包、配置文件和服務(wù)三種類型的資源出發(fā),對服務(wù)器集群進(jìn)行了自動化管理設(shè)計。
1. Puppet是什么
Puppet是一種跨平臺、C/S架構(gòu)的集中配置管理系統(tǒng),可以用于管理linux、windows、unix、mac等平臺下的用戶、軟件包、文件、服務(wù)和cron任務(wù)等,并且可以妥善處理資源之間的依賴關(guān)系。其使用ruby語言開發(fā),但是使用者并不需要了解ruby語言,因?yàn)槠鋬H僅依賴于一種以pp為后綴的文件,在puppet框架搭建好后,就只剩下模塊的開發(fā),模塊開發(fā)采用描述性語言和基本的邏輯控制語句,簡單易懂,非常適合于管理和部署大規(guī)模的集群系統(tǒng)。
2. Puppet架構(gòu)
Puppet使用C/S架構(gòu),分為puppet server(master)和puppet client(agent)。master是配置和管理中心,管理著所有的節(jié)點(diǎn)。系統(tǒng)管理員需要在master上編寫每個節(jié)點(diǎn)所對應(yīng)的pp文件來描述不同節(jié)點(diǎn)的資源集合和目標(biāo)狀態(tài)。各個agent會周期性的查詢master,來獲取自己的配置,并將結(jié)果以報告的形式傳送給master。
puppet使用ssl認(rèn)證,在client與master通訊認(rèn)證通過后,證書會存儲在master上,當(dāng)僅有一臺master時,這不會產(chǎn)生問題。但是,在我們的設(shè)計中,為了保證高可用和高并發(fā),master是集群,master集群的前面是負(fù)載均衡,同一client與master多次通信時,無法保證連接的是同一個master,也就是說無法保證證書的獲取。為此,puppet官方建議搭建單獨(dú)的CA認(rèn)證服務(wù)器,從而實(shí)現(xiàn)證書的統(tǒng)一中心化管理。因此在大規(guī)模集群管理系統(tǒng)中,常見的puppet架構(gòu)如上圖,本公司同樣也采用了該架構(gòu)搭建集群管理系統(tǒng)。
3. Puppet工作流程
Puppet既可以單機(jī)運(yùn)行,也可以通過C/S架構(gòu)的方式運(yùn)行,不過在大多數(shù)情況下還是基于C/S架構(gòu)的方式來運(yùn)行,其交互過程如下圖所示。
- agent通過ssl向master建立認(rèn)證。
- 建立認(rèn)證后,puppet調(diào)用agent的facter,探測出主機(jī)的一些內(nèi)置變量,如主機(jī)名、系統(tǒng)版本號、ip地址和負(fù)載等信息。Agent將這些信息通過ssl加密發(fā)送到master端。
- Master接收到agent的主機(jī)信息請求后,根據(jù)域名或ip地址將他們發(fā)送到本機(jī)的manifests或ENC,進(jìn)行節(jié)點(diǎn)配置信息的查詢。
- 在解析過程中,首先進(jìn)行語法檢查,如果有語法錯誤,則停止,返回錯誤信息,否則繼續(xù)解析生成catalog。
- Puppet客戶端agent對服務(wù)端生成的catalog進(jìn)行應(yīng)用。
- Puppet客戶端agent對catalog進(jìn)行代碼驗(yàn)證并執(zhí)行,并將結(jié)果記入日志。
- 將agent信息以報告的形式上報master。
- 流程結(jié)束。
4. Puppet安裝與配置
基于公司內(nèi)部已有的DNS域名解析和LVS負(fù)載均衡服務(wù),圍繞puppet的整個集群管理系統(tǒng)架構(gòu)圖,在centos環(huán)境下,puppet安裝與配置方法如下:
(1) Master
目前使用了4臺master用于管理15000臺左右的服務(wù)器,如果后期master壓力增大,再適當(dāng)?shù)臄U(kuò)容。配置步驟如下:
1)安裝puppet的相關(guān)包,包括puppet-server、Apache、mod_ssl、mod_passenger。
在安裝以上包的同時,系統(tǒng)會自動安裝facter包和一些ruby依賴包。
2)編輯 /etc/puppet/puppet.conf配置文件。
3)復(fù)制CA服務(wù)器上的證書,主要是打包CA服務(wù)器上的ssl目錄,并放到master上的ssl目錄下。
4)初始化master,生成必須文件。
5)建立/etc/httpd/conf.d/puppet.conf配置文件。
6)創(chuàng)建虛擬主機(jī)的DocumentRoot。
7)啟動puppet。
2. CA
將master和agent的認(rèn)證機(jī)制放在單獨(dú)的CA服務(wù)器上,可以方便master集群的管理和擴(kuò)容。配置步驟如下:
1)安裝puppet的相關(guān)包,包括puppet-server、Apache、mod_ssl、mod_passenger。
2)編輯/etc/puppet/puppet.conf配置文件。
3)創(chuàng)建/etc/puppet/autosign.conf配置文件,如果內(nèi)容是“*”,表示所有主機(jī)都可訪問。
4)啟動一下puppet master,實(shí)現(xiàn)初始化,生成key和自認(rèn)證。
5)為master服務(wù)器生成證書。
6)建立/etc/httpd/conf.d/puppet.conf配置文件,文件的設(shè)置參照master的配置。
7)創(chuàng)建虛擬主機(jī)的DocumentRoot,參照master的配置。
8)啟動puppet,參照master的配置。
3. Agent
Puppet客戶端安裝比較簡單,配置步驟如下:
1)安裝puppet的相關(guān)包,包括addops-puppet、addops-puppet-agent-extra(公司內(nèi)部包)。其中第一個包為yum源包,第二個包為puppet的擴(kuò)展包,其依賴于puppet包,并且會自動修改配置文件中的ca_server、server和node_name_value三個變量的值。
2)測試運(yùn)行:puppet agent --test,默認(rèn)同步的環(huán)境為production,可以手動添加環(huán)境參數(shù),如--environment=staging,即可改為臨時環(huán)境。
5. Puppet配置解讀
puppet的主配置文件puppet.conf位于/etc/puppet/(社區(qū)版)目錄下,其中主要包含了main、master和agent三個命名空間,依次介紹如下:
1)main通用配置選項(xiàng)
- confdir:配置文件存放目錄,默認(rèn)在/etc/puppet。
- vardir:動態(tài)數(shù)據(jù)存放目錄,默認(rèn)在/var/lib/puppet。
- logdir:日志存放目錄,默認(rèn)在/var/log/log。
- rundir:PID存放目錄,默認(rèn)在/var/run/puppet。
- statedir:狀態(tài)存放目錄,默認(rèn)在$vardir/state。
- ssldir:SSL證書存放目錄,默認(rèn)在$vardir/ssl。
- trace:發(fā)生錯誤時顯示跟蹤信息,默認(rèn)false。
- filetimeout:檢測配置文件狀態(tài)改變的時間周期,單位秒,默認(rèn)15秒。
- syslogfacility:指定syslog功能的級別,默認(rèn)為daemon級。
- manifestdir:系統(tǒng)的啟動文件存放目錄,默認(rèn)在/etc/puppet/manifests。
- basemodulepath:模塊的存放目錄,默認(rèn)為/etc/puppet/modules,可以指定多個。
- pluginsync:當(dāng)有自定義facter變量時,需要指定該值為true。
- ca_server:認(rèn)證服務(wù)器的名稱。
2)Master服務(wù)端配置選項(xiàng)
- user:后臺進(jìn)程執(zhí)行的用戶。
- group:后臺進(jìn)程執(zhí)行的組。
- certname:進(jìn)行ssl認(rèn)證時的變量名,默認(rèn)為主機(jī)名。
- node_name_value:節(jié)點(diǎn)名稱,默認(rèn)為主機(jī)名。
- mainfest:mainfest站點(diǎn)文件的名字,默認(rèn)為site.pp。
- bindaddress:后臺進(jìn)程綁定的網(wǎng)卡地址接口。
- masterport:后臺進(jìn)程執(zhí)行的端口,默認(rèn)為8140。
- ca:當(dāng)認(rèn)證服務(wù)器位于單獨(dú)的服務(wù)器上時,需要指定該值為false。
3)Agent客戶端配置選項(xiàng)
- classfile:顯示從服務(wù)端加載到的類列表。
- localconfig:本地緩存配置目錄。
- runinterval:客戶端的檢測時長,默認(rèn)為30分鐘檢測一次。
- listen:監(jiān)聽進(jìn)程,用于監(jiān)聽服務(wù)端下發(fā)的同步信息。
- report:值為true時,向master端發(fā)送報告。
- node_name_value:節(jié)點(diǎn)名稱,默認(rèn)為主機(jī)名。
- certname:認(rèn)證名稱,默認(rèn)為主機(jī)名。
- Server:master的認(rèn)證名稱,即certname變量的值。
6. Puppet資源簡介
資源是puppet系統(tǒng)的核心,抽象的足夠徹底,相似的資源被抽象成了一種資源類型,如程序包資源、文件資源、服務(wù)資源和exec資源等。資源屬性與其實(shí)現(xiàn)方式剝離開來,僅僅描述資源的狀態(tài),而不是其具體的實(shí)現(xiàn)過程,即可達(dá)到資源的同步。
(1) 資源定義
資源定義即向資源類型的屬性賦值,也稱為資源類型的實(shí)例化。資源的定義在pp文件中完成,其目錄結(jié)構(gòu)一般如下所示:
Files文件夾用于存放該軟件包的配置文件,manifests文件夾用于存放資源的實(shí)例,即類文件,templates用于存放模板。
定義的資源語法如下:
Type即為資源的類型,比如程序包資源package,文件資源file等,title是一個字符串,在同一類型中必須唯一,每個屬性用“,”隔開。通過將class、條件控制語句與資源的定義相結(jié)合,即可實(shí)現(xiàn)資源的模塊化,達(dá)到易復(fù)用的效果。
(2) 常用資源
基于公司內(nèi)部運(yùn)維組的需求,puppet主要從程序包、配置文件、服務(wù)、exec四個方面展開應(yīng)用,本文主要對前兩種資源展開介紹。另外,我們可以利用“Puppet describe 資源名稱”命令查看資源的詳細(xì)描述。
1)程序包package
Package資源的描述如上圖所示,下來我們將對package資源的主要屬性進(jìn)行介紹:
- name:包名,可以省略,如果省略,將繼承title的值。
- ensure:指定軟件包的狀態(tài),安裝、卸載還是升級。需要卸載時,指定為“absent”;需要保證新版本時,指定為“l(fā)atest”;需要保證某一版本時,指定為版本號。
- source:指定程序包的來源。如果本地yum倉庫已經(jīng)包含該包,則可以不指定。
- provider:指明安裝方式。
使用案例如下:
其中,package_name和package_ensure是傳入的參數(shù)值,通過對屬性以參數(shù)的形式賦值,可以大大提高模塊的復(fù)用性。
2)配置文件file
file資源的描述如上圖所示,下來我們將對file資源的主要屬性進(jìn)行介紹:
- ensure:文件的狀態(tài),值有absent、present、file、directory和link。
- path:文件路徑,不指定時為title的值。“ensure=>absent”共用。
- owner:文件的屬主。
- Group:文件的屬組。
- Mode:文件的權(quán)限。
- Source:文件來源。
使用案例如下:
服務(wù)和exec資源在這里不再贅述,可以利用上述提到的命令,查看資源的詳細(xì)介紹和參數(shù)的使用方法。從以上案例可以看出,采用puppet描述語言,結(jié)合常用的邏輯控制語句,可以快速的開發(fā)出不同資源的類模塊。
結(jié)論
隨著服務(wù)器集群規(guī)模的增大,公司越來越重視通過自動化配置來減小管理部署的成本。Puppet作為開源的集群管理框架,有著簡單易用、快速部署、使用范圍廣等特性,已經(jīng)有超過250家的用戶,包括Zynga、Twitter、Citrix、Oracle、Shopzilla、Google、RedHat、新浪、阿里巴巴、豆瓣、好樂買、趣游、PPTV等大公司。本文主要介紹了puppet架構(gòu)、安裝方法以及資源的使用案例,屬于puppet集群管理的基礎(chǔ)篇。隨著puppet集群規(guī)模的增大,將來我們會繼續(xù)介紹puppet中的facter工具、hiera工具、模塊編寫規(guī)范、master集群擴(kuò)展,逐漸搭建一套大規(guī)模、健壯的puppet自動化管理集群。
相關(guān)文章:
- https://puppet.com/docs/puppet/6.4/puppet_index.html
- https://www.cnblogs.com/keerya/p/8040071.html#_label0_2
- https://blog./superleedo/1899823
- https://www.ibm.com/developerworks/cn/opensource/os-cn-puppet/index.html
【本文是專欄機(jī)構(gòu)360技術(shù)的原創(chuàng)文章,微信公眾號“360技術(shù)( id: qihoo_tech)”】
分享名稱:Puppet自動化集群管理基礎(chǔ)篇
當(dāng)前路徑:http://fisionsoft.com.cn/article/dhhiohd.html


咨詢
建站咨詢
