自動化運(yùn)維工具 puppet安裝部署

Puppet部署與應(yīng)用

前言:到目前為止莽鸿,我們已經(jīng)搭建了很多的服務(wù)器,每一臺服務(wù)器都需要執(zhí)行很多的命令拜轨,給我的感覺是實(shí)驗(yàn)不難抽减,原理也好理解,就是命令太麻煩橄碾。如果只管理幾臺服務(wù)器卵沉,命令多點(diǎn)也沒什么颠锉,但是如果管理著成百上千臺服務(wù)器,可以想象一下史汗,工作量將是多么的龐大琼掠。所以作為一名運(yùn)維工程師,就需要尋找一款能夠降低工作量的工具停撞。那么今天就給大家介紹一批工具瓷蛙,這批工具是“可編程”的,只需要為這批工具寫上幾行代碼戈毒,它便會自動完成所有的工作艰猬,這批工具就是運(yùn)維自動化puppet(為什么說是一批工具,因?yàn)檐浖恢挂粋€)埋市。Puppet可以針對多臺服務(wù)器進(jìn)行統(tǒng)一的操作冠桃,例如:軟件分發(fā),統(tǒng)一執(zhí)行腳本道宅,在服務(wù)器上寫好腳本分發(fā)給客戶機(jī)食听,客戶機(jī)就會自動執(zhí)行,減少了人力及誤操作風(fēng)險培己。Puppet與我們之前在windows2008R2中學(xué)習(xí)過的“組策略”非常相似碳蛋,所以在windows中有的功能,在linux中都能找到這些功能的影子省咨。

工作原理和案例環(huán)境

工作原理

Puppet的目的是讓管理員只集中于要管理的目標(biāo)肃弟,而忽略實(shí)現(xiàn)的細(xì)節(jié)。Puppet既可以在單機(jī)上使用零蓉,也可以c/s使用笤受,在大規(guī)模使用puppet的情況下,通常使用c/s結(jié)構(gòu)敌蜂,在這種結(jié)構(gòu)中puppet客戶端只運(yùn)行puppetclient箩兽,puppet服務(wù)器只運(yùn)行puppetmaster。

工作流程

客戶端puppet調(diào)用facter(facter是通過ssl加密收集及檢測分析客戶端配置信息的一個工具)章喉,facter探測出主機(jī)的一些變量汗贫,如主機(jī)名,內(nèi)存大小秸脱,ip地址等落包。Puppet把這些信息通過ssl連接發(fā)送到服務(wù)器器端

服務(wù)器端的puppetmaster通過facter工具分析檢測客戶端的主機(jī)名,然后找到項(xiàng)目主配置文件mainfest里面對應(yīng)的node配置摊唇,并對該部分內(nèi)容進(jìn)行解析咐蝇。Facter發(fā)送過來的信息可以作為變量處理,node牽扯到的代碼才解析巷查,其他沒牽涉的代碼不解析有序,解析分為幾個階段抹腿,首先進(jìn)行語法檢查,如果語法沒錯旭寿,就繼續(xù)解析警绩,解析的結(jié)果生成一個中間的“偽代碼”,然后把偽代碼發(fā)送給客戶端许师。

客戶端接收到偽代碼房蝉,并執(zhí)行,客戶端把執(zhí)行的結(jié)果發(fā)送給服務(wù)器微渠。

服務(wù)器把客戶端的執(zhí)行結(jié)果寫入日志。

Puppet工作過程有以下兩點(diǎn)值得注意:

為了保證安全咧擂,client和master之間是基于ssl和證書的逞盆,只有經(jīng)master證書認(rèn)證的client可以與master通信。

Puppet會讓系統(tǒng)保持在人們所期望的某種狀態(tài)并一直維持下去松申,例如:檢測某個文件并保證其一直存在云芦,保證ssh服務(wù)始終開啟,如果文件被刪除了或者ssh服務(wù)被關(guān)閉了贸桶,puppet下次執(zhí)行時(默認(rèn)30分鐘)舅逸,會重新創(chuàng)建該文件或者啟動ssh服務(wù)。

案例環(huán)境

虛擬機(jī)環(huán)境

安裝puppet的實(shí)驗(yàn)步驟

搭建puppetmaster

搭建puppetclient

配置測試節(jié)點(diǎn)

客戶端主動拉取

服務(wù)器推送

搭建puppetmaster

規(guī)劃服務(wù)器主機(jī)名(小規(guī)幕噬福可以修改/etc/hosts文件琉历,服務(wù)器多的時候我們需要搭建dns服務(wù)器來實(shí)現(xiàn)服務(wù)通過主機(jī)名進(jìn)行通信,這里就以/etc/hosts文件來實(shí)現(xiàn))

Vi ?/etc/sysconfig/network

Vi ?/etc/hosts

為了讓主機(jī)名立即生效水醋,執(zhí)行下面命令(或者重啟服務(wù)器)

搭建NTP服務(wù)器(前面已經(jīng)提到過facter使用證書與puppetmaster驗(yàn)證身份旗笔,所以一定要確保puppetclient與puppetmaster時間保持一致,需要單獨(dú)準(zhǔn)備一臺時間服務(wù)器來提供時間同步)

搭建NTP服務(wù)器

vim /etc/ntp.conf拄踪,添加以下兩行:

啟動ntp服務(wù)并開啟iptables例外

[root@centos5]# iptables -I INPUT -p ?udp --dport 123 -j ACCEP

[root@centos5]# service iptables save

在puppetmaster上面配置時間同步蝇恶,作為ntp的客戶端

安裝ruby(puppet就是基于ruby語言開發(fā)的,所以需要安裝ruby)

安裝完成之后檢查版本

安裝facter

安裝facter(通過facter工具分析檢測客戶端傳來的信息)

安裝puppet

編譯安裝:

復(fù)制配置文件

修改文件屬性并創(chuàng)建puppet主目錄

puppet服務(wù)證書請求與簽名

關(guān)閉防火墻(也可開例外)

Service iptables ?stop

修改配置文件

在[main]標(biāo)題下添加一行:配置服務(wù)器模塊路徑

啟動puppet主程序

[root@master puppet-2.7.21]# netstat -anpt | grep ruby

tcp ???????0 ?????0 0.0.0.0:8140 ???????????????0.0.0.0:* ??????????????????LISTEN ?????2306/ruby

puppetmaster所監(jiān)聽的端口為8140

配置防火墻:

[root@master puppet-2.7.21]# iptables -I INPUT -p tcp --dport 8140 -j ACCEPT

[root@master puppet-2.7.21]# service iptables save

搭建puppetclient

規(guī)劃服務(wù)器主機(jī)名

Vi /etc/sysconfig/network

Vi /etc/hosts(添加以下幾行)

2)服務(wù)器時間同步

安裝ruby

或者rpm -ivh compact-readline5......

安裝facter

5)安裝puppet

復(fù)制文件并設(shè)置執(zhí)行權(quán)限

puppet服務(wù)證書請求簽名

Service iptables stop

Vim /etc/puppet/puppet.conf(增加一行:設(shè)置master服務(wù)器的域名)

注意:puppetclient2的配置過程與puppetclient1類似惶桐,主機(jī)名改為client2.itzhushou.cn即可撮弧,其他都一樣。

注冊服務(wù)器

分別在puppetclient1和puppetclient2上進(jìn)行注冊姚糊,執(zhí)行的命令一樣

上面會一直等待贿衍,可以按ctrl+c結(jié)束,但是服務(wù)器上已經(jīng)有申請信息了

可以執(zhí)行puppet ?certsign ?--list查看申請注冊客戶端

將未注冊的客戶端進(jìn)行注冊

Puppet ?cert ?sign ?--all

可以通過目錄去查看已經(jīng)注冊的客戶端(看到下面的信息說明注冊成功了)

應(yīng)用案例

配置一個測試節(jié)點(diǎn)

節(jié)點(diǎn)信息:/etc/puppet/manifests/nodes

模塊信息:/etc/pupppet/modules

實(shí)驗(yàn)?zāi)繕?biāo):為了保護(hù)linux的ssh端口爆破叛拷,批量修改客戶端的sshd端口舌厨,將22號端口改為9922,并實(shí)現(xiàn)重啟sshd服務(wù)的工作忿薇。

想完成以上幾點(diǎn)裙椭,需要明確幾點(diǎn):

①需確定openssh軟件包安裝

②需確定存在ssh的配置文件

③確定sshd的服務(wù)是系統(tǒng)服務(wù)

創(chuàng)建ssh模塊躏哩,模塊的目錄為ssh,模塊下有三個文件分別是:manifests揉燃、templates扫尺、files。

manifest里面必須包含一個init.pp文件炊汤,這是該模塊的的初始(入口)文件正驻,導(dǎo)入一個模塊的時候需要從init.pp開始執(zhí)行,可以把所有的代碼都寫入到這個文件中抢腐,也可以分成多個.pp文件姑曙,init在去包含其他文件,定義class類名時必須是ssh迈倍,這樣才能實(shí)現(xiàn)調(diào)動

files目錄是該模塊的發(fā)布目錄伤靠,puppet提供了一個文件分割機(jī)制,類似rsync的模塊啼染。

templates目錄包含erb模塊文件宴合、這個和file資源的templates屬性有關(guān)(很少使用)

master端

創(chuàng)建必要的目錄

創(chuàng)建模塊配置文件install.pp

Vi ?/etc/puppet/modules/ssh/manifests/install.pp

輸入以下信息(首先確定客戶端安裝了ssh服務(wù))

注意presemt是以,結(jié)尾由于配置的是ssh服務(wù)迹鹅,所以模塊名為ssh卦洽,如果配置http則模塊名為http斜棚。

創(chuàng)建模塊配置文件config.php

Vi ?/etc/puppet/modules/ssh/manifests/config.pp阀蒂,輸入以下內(nèi)容:

class ssh::config{

file{ "/etc/ssh/sshd_config"://配置客戶端需要同步的文件

ensure => present,//確定客戶端此文件存在

owner => "root",//文件所屬用戶

group => "root",//文件所屬組

mode => "0600",//文件權(quán)限

source=> "puppet://$puppetserver/modules/ssh/ssh/sshd_config",

//從服務(wù)器同步文件的路徑

require => Class["ssh::install"],//調(diào)用ssh::install確定

openssh已經(jīng)安裝

notify => Class["ssh::service"],//如果config.pp發(fā)生變化通知service.pp

}

}

這個文件的內(nèi)容主要是定義,發(fā)布的配置文件權(quán)限以及調(diào)用ssh::install檢查client是否安裝了ssh服務(wù)打肝,以及調(diào)用ssh::service重新啟動sshd服務(wù)脂新。

創(chuàng)建模塊配置文件service.pp

Vi /etc/puppet/modules/ssh/manifests/service.pp

class ssh::service{

service{ "sshd":

ensure =>running,//確定sshd運(yùn)行

hasstatus=>true,

//puppet該服務(wù)支持status命令,即類似service

sshd status命令

hasrestart=>true,

//puppet該服務(wù)支持status命令粗梭,即類似service

sshd status命令

enable=>true,//服務(wù)是否開機(jī)啟動

require=>Class["ssh::config"] ???//確認(rèn)config.pp調(diào)用

}

}

創(chuàng)建模塊主配置文件init.pp

Vi ?/etc/puppet/modules/ssh/manifests/init.pp

上面一共建立了4個文件争便,確保建立好

建立服務(wù)器端ssh統(tǒng)一維護(hù)文件

由于服務(wù)器端和客戶端的sshd_config文件默認(rèn)一樣,此時將服務(wù)器端/etc/ssh/sshd_config復(fù)制到模塊默認(rèn)路徑断医。

創(chuàng)建測試節(jié)點(diǎn)配置文件滞乙,并將ssh加載進(jìn)去

Vi /etc/puppet/manifests/nodes/ssh.pp,輸入以下信息

將測試節(jié)點(diǎn)載入puppet鉴嗤,即修改site.pp

Vi ?/etc/puppet/manifests/site.pp斩启,輸入以下信息:

修改服務(wù)器端維護(hù)的sshd_config配置文件

Vi ?/etc/puppet/modules/ssh/files/ssh/sshd_config

重新啟動puppet

配置客戶端主動拉取

一般在小規(guī)模自動化群集中,如代碼上線需要重新啟動服務(wù)時醉锅,為了防止網(wǎng)站暫時性無法訪問的問題兔簇,每臺客戶端需要運(yùn)行一次puppet agent -t命令,所以選擇模式時需要根據(jù)規(guī)模的大小來決定,一般運(yùn)維工程師puppet服務(wù)器到各客戶端建立ssh信任垄琐,然后自定義腳本边酒,ssh讓客戶端批量執(zhí)行puppet命令同步。

在客戶端puppetclient1上執(zhí)行命令:

然后在客戶端上查看ssh配置文件的端口是否改變狸窘,并查看端口運(yùn)行狀態(tài):

Vi /etc/ssh/sshd_config

由上圖可以看出墩朦,客戶端的ssh端口已經(jīng)變成9922,而且ssh服務(wù)自動重啟了翻擒,說明我們的實(shí)驗(yàn)做對了氓涣。但是如果都由客戶端自己拉取的話,可以想象如果有幾百甚至上千臺服務(wù)器呢陋气,客戶端拉取一定是不可取的劳吠,所以我們可以采用另一種方式,就是服務(wù)器推送巩趁,只需要在服務(wù)器上執(zhí)行一次命令赴背,所有的客戶端都會同步,這樣工作會更輕松一些晶渠。

服務(wù)器推送同步

修改puppet主配置文件

Vi ?/etc/puppet/puppet.conf,在最后添加一行燃观,使puppet監(jiān)聽8139端口

修改puppet驗(yàn)證配置文件褒脯,定義權(quán)限

在最后一行添加下面的內(nèi)容

啟動puppet客戶端

3)再次把服務(wù)器的ssh配置文件端口改為9933(換一個試試)

開始向客戶端推送

在客戶端查看端口是否改變

客戶端ssh端口已經(jīng)改變,實(shí)驗(yàn)正確缆毁。但是今天僅僅是做了ssh同步的一個應(yīng)用案例番川,實(shí)際上puppet功能十分強(qiáng)大,應(yīng)用非常靈活脊框,運(yùn)維的工作基本上它都可以完成自動化颁督,相關(guān)腳本在網(wǎng)上有很多,大家可以查詢練習(xí)浇雹。

腳本如下:

#!/bin/bash

#先更改/etc/sysconfig/network文件的主機(jī)名并更改好腳本中對應(yīng)的本機(jī)ip地址后沉御,執(zhí)行此腳本,完成后重啟系統(tǒng)使主機(jī)名更改生效

service iptables stop

chkconfig iptables off

echo "DEVICE=eth0

IPADDR=192.168.1.131">/etc/sysconfig/network-scripts/ifcfg-eth0

service network restart

echo? "

127.0.0.1?? localhost localhost.localdomain

192.168.1.131 master.test.cn

192.168.1.132 client.test.cn

192.168.1.137 client137.test.cn">/etc/hosts

cd /usr/src

rpm -ivh compat-r* ruby-*

useradd -s /sbin/nologin puppet

tar zxf facter-1.7.1.tar.gz

cd facter-1.7.1

ruby install.rb

cd /usr/src

tar zxf puppet-2.7.21.tar.gz

cd puppet-2.7.21

ruby install.rb

總結(jié)昭灵!這是puppt 有時間學(xué)習(xí)一下ansible吠裆!

本文出自 “李世龍” 博客,謝絕轉(zhuǎn)載烂完!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末试疙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抠蚣,更是在濱河造成了極大的恐慌祝旷,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件距贷,死亡現(xiàn)場離奇詭異敌完,居然都是意外死亡储耐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門滨溉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來什湘,“玉大人,你說我怎么就攤上這事晦攒∶龀罚” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵脯颜,是天一觀的道長哟旗。 經(jīng)常有香客問我,道長栋操,這世上最難降的妖魔是什么闸餐? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮矾芙,結(jié)果婚禮上舍沙,老公的妹妹穿的比我還像新娘。我一直安慰自己剔宪,他們只是感情好拂铡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葱绒,像睡著了一般感帅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上地淀,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天失球,我揣著相機(jī)與錄音,去河邊找鬼骚秦。 笑死作箍,一個胖子當(dāng)著我的面吹牛胞得,可吹牛的內(nèi)容都是我干的跃巡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偷线!你這毒婦竟也來了声邦?” 一聲冷哼從身側(cè)響起亥曹,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎材失,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熊响,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年洪碳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镜雨。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡菲盾,死狀恐怖各淀,靈堂內(nèi)的尸體忽然破棺而出临谱,到底是詐尸還是另有隱情吴裤,我是刑警寧澤麦牺,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站吱晒,受9級特大地震影響仑濒,放射性物質(zhì)發(fā)生泄漏墩瞳。R本人自食惡果不足惜喉酌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望相速。 院中可真熱鬧和蚪,春花似錦攒霹、人聲如沸集峦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽备恤。三九已至,卻和暖如春惭笑,著一層夾襖步出監(jiān)牢的瞬間沉噩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痰哨,地道東北人斤斧。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像甘苍,于是被迫代替她去往敵國和親载庭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.puppet 是什么 puppet是一個開源的軟件自動化配置和部署工具,很多大型IT公司均在使用puppet對...
    milo_e1ce閱讀 4,895評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)毒返,斷路器,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • Puppet理論定義: Puppet 是一個跨平臺的集中化配置管理系統(tǒng),它使用自有的描述語言歉眷,可管理配置文件淑际、用戶...
    屬于你的世界閱讀 968評論 0 2
  • 1. 概述 在網(wǎng)絡(luò)環(huán)境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應(yīng)服務(wù)器獲取相應(yīng)的...
    ghbsunny閱讀 2,901評論 0 7
  • ella夢晨閱讀 256評論 0 1