puppet是一個IT基礎設施自動化管理工具,它可以幫助系統管理員管理基礎設施的整個生命週期:供應(ProVicioning)、配置(configuretion)、聯動(orchestration)以及報告(reporting)
puppet基於ruby語言開發,可實現自動化重複任務、快速部署關鍵性應用以及在本地或者在雲端完成註定管理變動和快速擴展架構規模等。node
Puppet的目錄是讓管理員只集中於要管理的目標,而忽略實現的細節。Puppet便可以運行在單機上,也能夠以C/S結構使用。在大規模使用puppet的狀況下,一般使用C/S結構,在這種結構中puppet客戶端只運行puppeclient,puppet服務端只運行puppemaster。web
①客戶端puppet調用fast探測出主機的一些變量,如主機名、內存大小、IP地址等。Puppet把這些信息使用SSL鏈接發送給服務器端
② 服務器端的puppetmaster經過fast工具分析檢測客戶端的主機名,而後找到項目的主配置文件manifest裏面對應的node配置,並對該部份內容進行解析,fast發送過來的信息能夠做爲變量處理,node牽扯到的代碼才被解析,沒牽扯到的不解析,解析分爲語法檢查,若是語法沒錯,繼續解析,解析結果生成一個結果‘僞代碼’,而後把‘僞代碼’發給客戶端
③客戶端收到‘僞代碼’而且執行,客戶端把執行結果發給服務器
④服務器端把客戶端的執行結果寫入日誌
針對本實驗設計的拓撲圖:
redis
(1)類的定義
類就是命名的代碼塊,存放着一個或者多個資源 ;能夠繼承vim
類的命名方式 class class_name { ...puppet code... } 子類的命名方式 class parent_name::subclass_name inherits parent_name { }
多級繼承的子類ruby
class grand_name::parent_name::subclass_name inherits grand_name::parent_name { } => 在子類中覆蓋父類中的資源 +> 在子類中爲父類的資源新增屬性 聲明類(3種方式) include require class { 'class_name': params1 =>value1, params2 =>value2,
}
(2)關於類的舉例
①redis模塊:
redis ---------------父類
redis程序包 ------父類定義的資源1
redis服務 -------父類定義的資源2
redis::master ---------子類1
file -------子類1定義的資源服務器
redis::slave -------子類2
file --------子類2定義的資源
架構
## 5、puppet模板
①語法:
<%= Ruby Expression %>替換爲表達式的值,
<%= @processorcount %>
<% ruby code %>僅執行代碼,不作任何替換;經常使用於條件判斷或循環語句、設定變量以及在輸出以前對數據進行處理;
調用模板變量:變量徹底限定名稱app
迭代和條件判斷
使用模板生成文件時,使用的文件屬性爲content
content => template('module_name/template_file_name')框架
②步驟: 查看puppet的模塊目錄路徑: puppet agent --configprint modulepath ![](https://s1.51cto.com/images/blog/201712/21/bc57f8d9c46cedcfeea49eb73134c4d4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 建立必要的目錄
建立redis父類
建立子類master
拷貝redis配置文件放到files目錄下並修改成redis-master.conf
建立子類slave
拷貝redis配置文件放到files目錄下並修改成redis-slave.conf
調用父類:
puppet apply -d -v -e 'include redis'
調用子類:
puppet apply -d -v -e 'include redis::master'ide
(1)前提條件:
①各主機之間能互相解析(因爲就幾個主機,能夠直接使用hosts文件,若是過多建議使用DNS服務器)
標準的主機名命名方式爲:
角色名-運營商-機房名-機器IP.域名
例如:web-CNC-ShangHai-1.1.1.1.jungege.com
②各個節點要作到時間同步;
使用ntpdate或者chrony均可以
(2)①在master主機上安裝puppet、puppet-server
yum install puppet puppet-server -y
②查看master初始化
命令:puppet master -v --no-daemonize
查看事後能夠Ctrl+c退出
③啓動服務
命令:systemctl start puppetmaster.service
④agent主機上安裝puppet安裝包。
yum install puppet -y
⑤啓動agent端上的puppet服務
命令:puppet agent --server 主機名 -v --no-daemonize
爲了每次啓動都要寫主機名,能夠把主機名寫到配置文件裏
⑥master給agent簽發證書
puppet cert list 【查看待簽證書】
puppet cert sign server2.magedu.com 【簽證】
⑦在master創建站點清單,
vim /etc/puppet/manifests/site.pp
node 'server1.magedu.com' {
include redis::master
}
sgent會主動向master請求數據
puppet客戶端默認每30分鐘向服務器申請一次,有的特殊狀況須要馬上生效,則須要puppet kick將當前配置推送給客戶端,馬上實現目標狀態的改變。
①在agent端,編輯puppet配置文件
在【agent】添加 listen = true
②在/etc/puppet/auto.conf添加一下幾行
③kick推送,在服務器段運行kick子命令puppet help kick 【查看幫助】puppet kick --host server1.magedu.com