第二十二周微職位puppet
描述puppet的工作原理,部署一套puppet系統.
puppet的工作原理:
Puppet的目錄是讓管理員只集中於要管理的目標,而忽略實現的細節。Puppet即可以運行在單機上,也可以以C/S結構使用。在大規模使用puppet的情況下,通常使用C/S結構,在這種結構中puppet客戶端只運行puppeclient,puppet服務端只運行puppemaster
1) 客戶端puppet調用fast探測出主機的一些變量,如主機名、內存大小、IP地址等。Puppet把這些信息使用SSL連接發送給服務器端 2) 服務器端的puppetmaster通過fast工具分析檢測客戶端的主機名,然後找到項目的主配置文件manifest裏面對應的node配置,並對該部分內容進行解析,fast發送過來的信息可以作為變量處理,node牽扯到的代碼才被解析,沒牽扯到的不解析,解析分為語法檢查,如果語法沒錯,繼續解析,解析結果生成一個結果‘偽代碼’,然後把‘偽代碼’發給客戶端 3) 客戶端收到‘偽代碼’並且執行,客戶端把執行結果發給服務器 4) 服務器端把客戶端的執行結果寫入日誌
3.puppet工作過程中需要註意的事項:
1) 為了保證安全,Client和Master之間是基於SSL和證書的,只有經Master證書認證的Client可以與Master通信 2) Puppet會讓系統保持在人們所期望的某種狀態並一直維持下去,如檢測某個文件並保證其一直存在,保證SSH服務始終開啟,如果文件被刪除了或者ssh服務關閉了,puppet下次執行時(默認30分鐘)會重新創建該文件或者啟動SSH服務
4.項目環境:
主機 | 操作系統 | IP地址 | 主要軟件 |
Puppetmaster | Centos6.5 | 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 |
5.項目實施:
1)搭建puppetmaster
規劃服務器主機名
在小的規模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主程序6.搭建puppetclient:
首先配置puppetclient1,步驟如下:
1) 規劃服務器主機名
添加一下幾行確保可以通過域名ping同puppetmaster,即ping master.zjz.cn2) 服務器時間同步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端
查看申請註冊的客戶端:
將未註冊的客戶端進行註冊可以通過目錄查看已註冊的客戶端此時客戶端已經完成了證書的請求和簽名7、配置實例
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#] /etc/init.d/puppetmaster restart
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服務是否重啟,端口是否生效:本文出自 “11822904” 博客,請務必保留此出處http://11832904.blog.51cto.com/11822904/1972453
第二十二周微職位puppet