Puppet的搭建和應用從入門到精通
Puppet的部署與應用
1、 案例概述
作為一名系統管理員,維護伺服器正常執行是最基本的職責,在管理幾臺到幾十臺伺服器時,大部分管理員喜歡自己寫小工具來維護,但隨著伺服器的數量曾多,任務量也逐漸增多,這時就需要簡潔的、強大的框架來完成系統管理的任務,為了實現這一目的,我們引入了一些工具,這些工具是可程式設計的,系統管理員只需要為這個工具寫上幾行程式碼,它便會自動的完成所有的工作,這批工具就是運維自動化puppet,它可以針對多臺伺服器進行統一操作,如部署統一的軟體、進行統一上線維護等,而且能快速完成上線部署,減少人力及人力誤操作風險。
2、 Puppet的工作原理
Puppet的目錄是讓管理員只集中於要管理的目標,而忽略實現的細節。Puppet即可以執行在單機上,也可以以C/S結構使用。在大規模使用puppet的情況下,通常使用C/S結構,在這種結構中puppet客戶端只執行puppeclient,puppet服務端只執行puppemaster。
1、puppet具體的工作原理
1) 客戶端puppet呼叫fast探測出主機的一些變數,如主機名、記憶體大小、IP地址等。Puppet把這些資訊使用SSL連線傳送給伺服器端
2) 伺服器端的puppetmaster通過fast工具分析檢測客戶端的主機名,然後找到專案的主配置檔案manifest裡面對應的node配置,並對該部分內容進行解析,fast傳送過來的資訊可以作為變數處理,node牽扯到的程式碼才被解析,沒牽扯到的不解析,解析分為語法檢查,如果語法沒錯,繼續解析,解析結果生成一個結果‘虛擬碼’,然後把‘虛擬碼’發給客戶端
3) 客戶端收到‘虛擬碼’並且執行,客戶端把執行結果發給伺服器
4) 伺服器端把客戶端的執行結果寫入日誌
2、puppet工作過程中的注意事項
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上類似就是修改主機名不一樣,所以安裝步驟省略掉了,不會影響整體的操作,本文中也介紹了一寫原理的問題,希望對大家有幫助。