1. 程式人生 > >Puppet的搭建和應用從入門到精通

Puppet的搭建和應用從入門到精通

Puppet的部署與應用

1、 案例概述

作為一名系統管理員,維護伺服器正常執行是最基本的職責,在管理幾臺到幾十臺伺服器時,大部分管理員喜歡自己寫小工具來維護,但隨著伺服器的數量曾多,任務量也逐漸增多,這時就需要簡潔的、強大的框架來完成系統管理的任務,為了實現這一目的,我們引入了一些工具,這些工具是可程式設計的,系統管理員只需要為這個工具寫上幾行程式碼,它便會自動的完成所有的工作,這批工具就是運維自動化puppet,它可以針對多臺伺服器進行統一操作,如部署統一的軟體、進行統一上線維護等,而且能快速完成上線部署,減少人力及人力誤操作風險。

2、 Puppet的工作原理

Puppet的目錄是讓管理員只集中於要管理的目標,而忽略實現的細節。Puppet即可以執行在單機上,也可以以C/S結構使用。在大規模使用puppet的情況下,通常使用C/S結構,在這種結構中puppet客戶端只執行puppeclient,puppet服務端只執行puppemaster。

1puppet具體的工作原理

 

     

1)      客戶端puppet呼叫fast探測出主機的一些變數,如主機名、記憶體大小、IP地址等。Puppet把這些資訊使用SSL連線傳送給伺服器端

2)      伺服器端的puppetmaster通過fast工具分析檢測客戶端的主機名,然後找到專案的主配置檔案manifest裡面對應的node配置,並對該部分內容進行解析,fast傳送過來的資訊可以作為變數處理,node牽扯到的程式碼才被解析,沒牽扯到的不解析,解析分為語法檢查,如果語法沒錯,繼續解析,解析結果生成一個結果‘虛擬碼’,然後把‘虛擬碼’發給客戶端

3)      客戶端收到‘虛擬碼’並且執行,客戶端把執行結果發給伺服器

4)      伺服器端把客戶端的執行結果寫入日誌

2puppet工作過程中的注意事項

1)      為了保證安全,Client和Master之間是基於SSL和證書的,只有經Master證書認證的Client可以與Master通訊

2)      Puppet會讓系統保持在人們所期望的某種狀態並一直維持下去,如檢測某個檔案並保證其一直存在,保證SSH服務始終開啟,如果檔案被刪除了或者ssh服務關閉了,puppet下次執行時(預設30分鐘)會重新建立該檔案或者啟動SSH服務

3、 專案環境

 

 

主機

作業系統

IP地址

主要軟體

Puppetmaster

192.168.31.83

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

Puppetclient1

Centos6.5

192.168.31.184

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

Puppetclient2

Centos6.5

192.168.31.79

Ruby-rdoc-1.8.7.352

Ruby-libs-1.8.7.352

Ruby-irb-1.8.7.352

Ruby-1.8.7.352

Puppet-2.7.21.tar.gz

Facter-1.7.1.tar.gz

NTP server

Centos6.5

192.168.31.224

 

4、 專案實施

1、        搭建puppetmaster

1)      規劃伺服器主機名

在小的規模puppet環境下,一般修改/etc/hosts檔案,然而在上千臺伺服器的環境中,我們要搭建自己的DNS伺服器來實現服務通過主機名來進行通訊,此專案我們通過修改/etc/hosts檔案來實現

              修改HOSTNAME=master.zjz.cn

   

              新增一下幾行:

              還有一種方式來修改主機名,不用重啟系統的方式

2)      時間同步伺服器

由於facter使用SSL證書,依賴時間同步,所以需要搭建NTP伺服器

一、搭建NTP Server

開啟ntp的配置檔案新增下面兩行

其作用是當/etc/ntp.conf中定義的server都不可用時,將使用local時間作為NTP服務提供給NTP客戶端

啟動NTP服務,並設定為開機自啟

 

二、Puppetmaster 作為NTP客戶端配置

三、安裝ruby

一定按照一下先後順序安裝,先安裝compat-readline5,也可以一併安裝

首先新建一個掛載系統盤的目錄(因為我們安裝的包,在系統盤中有,使用rpm直接安裝)

掛載系統盤

切換到掛載目錄的Packages目錄中

開始安裝

      安裝完成後,檢視版本

四、Puppet、facter安裝

通過facter工具分析檢測客戶端傳輸過來的資訊

安裝facter

a)      解壓原始碼包

新建一個存放安裝包的目錄,下載原始碼包

b)      編譯安裝原始碼包

安裝puppet:

(一)  解壓原始碼包

先下載原始碼包

(二)  編譯安裝

(三)  複製配置檔案

(四)  修改檔案屬性

(五)  建立puppet主目錄

注意:這兩個目錄的名稱是固定的

五、Puppet服務證書請求與簽名

生產環境中iptables預設是關閉的

Master端配置

(一)  修改配置檔案

在【main】標題下新增以下一行:配置伺服器模組的路徑

(二)  啟動puppet主程式

2、        搭建puppetclient

首先配置puppetclient1,步驟如下:

1)      規劃伺服器主機名

新增一下幾行

確保可以通過域名ping同puppetmaster,即ping master.zjz.cn

2)      伺服器時間同步

3)      安裝ruby

一定按照一下順序安裝,先安裝compat-readline5,也可以一起安裝

 

安裝同master安裝步驟

安裝完成後檢查版本

4)      Puppet、facter安裝

通過facter工具分析檢測客戶端傳輸過來的資訊

安裝facter:

一、解壓原始碼包

 

二、編譯安裝原始碼包

安裝puppet:

一、解壓原始碼包

二、編譯安裝原始碼包

三、複製配置檔案

四、修改檔案屬性

五、Puppet服務證書請求與簽名

生產環境中iptebles預設是全部關閉的

Puppetclient1和puppetclient2一樣,如下操作

修改client配置檔案

在【main】標題下加上一行,設定伺服器的域名

Puppetclient2和puppetclient1配置過程類似,注意將主機名修改為client2

申請和註冊

Client端:

分別在puppetclient1和puppetclient2上進行註冊

此時可以按Ctrl+C結束,因為puppet一直在等待任務,但是已經從server檢視到了申請資訊

Master端

檢視申請註冊的客戶端:

將未註冊的客戶端進行註冊

可以通過目錄檢視已註冊的客戶端

此時客戶端已經完成了證書的請求和簽名

3、        配置例項

1.      配置一個測試節點

節點資訊:/etc/puppet/manifests/nodes

模組資訊:/etc/puppet/modules

為了保護Linux的ssh埠爆破,批量修改客戶端sshd埠,將埠22修改為9922,並實現重啟工作

建立ssh模組,模組目錄為ssh,模組下面有三個檔案:mainfests、templates和files

Mainfests裡面必須要包含一個init.pp檔案,這是該模組的初始檔案,匯入一個模組的時候,會從init.pp開始執行。可以把所以的程式碼寫到init.pp檔案裡面,也可以分成多個pp檔案,init再去包含其他檔案,定義class類名的時候必須是ssh,這樣能實現呼叫

Files目錄是該模組的檔案釋出目錄,puppet提供一個檔案的分發機制,類似rsync的模組

Templates目錄包含erb模型檔案,這個和file資源的template屬性有關(很少用)

Master端:

1)      建立需要的必要的目錄

此時/etc/puppet/modules/ssh/目錄下結構:

2)      建立模組配置檔案install.pp

輸入一下資訊:

3)      建立模組配置檔案config.pp

輸入一下資訊:

4)      建立模組配置檔案service.pp

輸入一下資訊:

5)      建立模組主配置檔案init.pp

輸入一下資訊:

此時/etc/puppet/modules/ssh/manifests目錄下有四個檔案:

6)      建立伺服器端ssh統一維護檔案

由於伺服器端和客戶端的sshd_config檔案預設一樣,此時將伺服器端/etc/ssh/sshd_config複製到模組預設路徑

7)      建立測試節點配置檔案,並將ssh載入進去

 

輸入一下資訊:

8)      將測試節點載入puppet,即修改site.pp

輸入一下資訊:

9)      修改服務端維護的sshd_config配置檔案

10)  重新啟動puppet

2.      客戶端主動拉取

一般在小規模自動化叢集中,如程式碼上線需要重啟服務時,為了防止網站暫時性的無法訪問的問題,每臺客戶端執行一次puppet agent –t命令,選擇模式根據客戶端叢集規模的大小,根據經驗,一般運維工程師puppet伺服器到各客戶端會建立ssh信任,然後自定義shell指令碼,ssh批量讓客戶端執行puppet同步命令

Client端:

192.168.31.184(puppetclient1)端執行命令如下:

此時在Client端已經執行成功,驗證如下:

檢視伺服器ssh服務是否重啟,埠是否生效:

3.      伺服器推送同步

當大規模部署時採用伺服器推送模式

Client端:

192.168.31.79(puppetclient2)端修改:

1)      修改配置檔案:

最後一行新增如下:

修改auth.conf

最後一行新增如下:

2)      啟動puppet客戶端

檢視/etc/ssh/sshd_config的內容如下:

確認啟動ssh服務:

Master端:

3)      開始往客戶端推送

4)      校驗結果:

此時Client端已經執行成功,驗證如下:

檢視伺服器ssh服務是否重啟,埠是否生效:

5、 注意說明

如果分不清在那一臺主機上做的操作,我們可以根據主機名來進行判斷,其中puppetclient2上一開始安裝的操作因為和puppetclient1上類似就是修改主機名不一樣,所以安裝步驟省略掉了,不會影響整體的操作,本文中也介紹了一寫原理的問題,希望對大家有幫助。