linux下puppet的“资源”管理
? ? 已經(jīng)有2年多的時(shí)間沒(méi)有寫(xiě)博客來(lái)。有點(diǎn)不好意思,但在奇虎360真的是太忙了,沒(méi)有那么多精力來(lái)寫(xiě)博客。
今天是周末抽出一點(diǎn)時(shí)間來(lái)更新一下自己的博客,希望自己的博文能夠給大家有些許幫助。也希望通過(guò)博客
認(rèn)識(shí)更多的運(yùn)維朋友,大家一起學(xué)習(xí),一起進(jìn)步。
? ? 原來(lái)寫(xiě)過(guò)一篇puppet搭建的文章,今天跟大家分享的是puppet“資源”。什么是資源?所有由puppet的統(tǒng)一的管理的不管是文件、目錄、安裝包、cron、腳本等都稱(chēng)之為資源。大家在用puppet的時(shí)候最經(jīng)常做的事情也就是來(lái)定義資源,然后用定義好的資源來(lái)統(tǒng)一管理和配置服務(wù)器資源,以達(dá)到節(jié)約維護(hù)成本和盡量避免人為故障的目的。
? ? 下面來(lái)用我工作當(dāng)中的實(shí)際場(chǎng)景跟大家分享常用的資源定義。
這個(gè)pp文件是我/etc/puppet/modules下的一個(gè)業(yè)務(wù)的pp文件內(nèi)容。
說(shuō)明一下,我的這個(gè)puppet管理公司幾個(gè)不同的業(yè)務(wù)。不同的業(yè)務(wù)在puppet里面都是以模塊的方式存在,所有的模塊都在/etc/puppet/modules目錄下存放。然后每個(gè)模塊下都有三個(gè)目錄,分別是files? manifests? templates。files目錄主要是存放模板文件和目錄的;manifests是聲明目錄,也就是存放以pp結(jié)尾的聲明文件;templates是用來(lái)存放模板文件的,下面有實(shí)例來(lái)說(shuō)明它的作用。
下面這個(gè)文件的名字叫init.pp也就是初始化pp,它也可以include其他文件進(jìn)來(lái)。該文件內(nèi)容如下:
class syewu::conf {??
#class是來(lái)定義一個(gè)類(lèi),syewu是我的業(yè)務(wù)名稱(chēng),兩個(gè)冒號(hào)后面的conf就是該類(lèi)的名稱(chēng)。
file { "hosts":???
#file是來(lái)定義文件的,后面的hosts只是一個(gè)文件的標(biāo)識(shí),并不是文件的名稱(chēng),能看到這個(gè)標(biāo)識(shí)想到是你想定義的哪個(gè)文件就ok了。
? source => "puppet:///modules/syewu/hosts",?
#source是來(lái)定義該文件的來(lái)源的,這里是說(shuō)文件來(lái)源于syewu模塊下的files/hosts。也就是我上面說(shuō)的每個(gè)模塊下都有一個(gè)files目錄的作用。注意冒號(hào)后面有三個(gè)斜線。
??? path => "/etc/hosts",
?#path是puppet客戶(hù)端要同步的文件在實(shí)際操作系統(tǒng)中的位置。注意是絕對(duì)路徑。
??? mode => "644", owner => "root", group => "root",
#這一行大家應(yīng)該能看的懂。文件的權(quán)限和屬主/屬組。
?}
$arr_package = ["qihoo-ops-nginx", "Qihoo-lockf"]
#定義一個(gè)數(shù)組,我這里是定義的這個(gè)業(yè)務(wù)下需要安裝的rpm包。
??? package { $arr_package:
#調(diào)用我前面定義的數(shù)組
??? provider => "yum",
#provider是指誰(shuí)來(lái)提供剛才定義的rpm包,
??? ensure => installed,
#ensure后面指的是動(dòng)作,也就是安裝這些包。如果已經(jīng)安裝則忽略。
file { "/usr/local/nginx/conf/include":
? source => "puppet:///modules/syewu/nginx/conf/include",
? mode => "644", owner => "nginx", group => "nginx",
? ignore => '*statdata*',
#前面三行前面已經(jīng)介紹;ignore是忽略的意思,這里是指忽略include目錄下包含statdata的所有文件和目錄。
? recurse => true,
#這個(gè)選項(xiàng)一定要注意,recurse是遞歸的意思。也就是說(shuō)include目錄下所有的文件和目錄,以及該目錄下的所有子文件和子目錄。
? purge => true,
#這個(gè)選項(xiàng)也要注意,它是強(qiáng)制一致的意思。比如客戶(hù)端的include目錄下有一個(gè)文件a,但puppet server端定義的include目錄下沒(méi)有該文件,則客戶(hù)端會(huì)強(qiáng)制刪除該文件,如果不加這個(gè)選項(xiàng),客戶(hù)端會(huì)保留這個(gè)文件。
? notify => Service["nginx"],
#notif是通知的意思,也就是說(shuō)如果include目錄下內(nèi)容有變動(dòng),則通知服務(wù)nginx做重啟操作。
?}
file { "/home/shells":
#file也可以這樣來(lái)定義,直接在第一行來(lái)定義客戶(hù)端實(shí)際存放文件的位置。注意在linux下,文件和目錄都可以統(tǒng)稱(chēng)為文件。
? source => "puppet:///modules/syewu/shells",
??? mode => "755", owner => "root", group => "root",
? recurse => true,
#同步該目錄下的所有文件,保證這些文件都有可執(zhí)行權(quán)限。我喜歡把自己經(jīng)常用的腳本都放到一個(gè)目錄下,這樣比較容易找到,也方便批量操作。
file { "nginx-processor":
??? path => "/usr/local/nginx/conf/processor.conf",
??? mode => "644", owner => "nginx", group => "nginx",
??? content => template("syewu/processor.erb"),
#我維護(hù)的這個(gè)業(yè)務(wù)有幾百臺(tái)機(jī)器,而且服務(wù)器的配置都是不一樣的,有的是8核,有的16核等。而我nginx啟動(dòng)的時(shí)候我想讓nginx進(jìn)程數(shù)跟服務(wù)器cpu的核數(shù)是一樣的。這樣一來(lái)必然導(dǎo)致nginx的配置不一致。后來(lái)我想了一個(gè)辦法,讓nginx的主配置文件是一樣的,在主配置文件include進(jìn)來(lái)一個(gè)processor.conf。這個(gè)文件來(lái)控制nginx的啟動(dòng)數(shù)。content是內(nèi)容的意思,template是指模板。也就是在模塊syewu的templates目錄下有一個(gè)模板文件,名字是 processor.erb。這個(gè)模板的內(nèi)容如下:
worker_processes <%= scope.lookupvar("processorcount") %>;? 注意processorcount是linux下facter工具里面的一個(gè)變量,在linux下執(zhí)行facter可以看到這個(gè)變量,這個(gè)變量的意思是查看linux下cpu的核心數(shù)。
?}
exec { "/create-qihu-yum":
#exec是執(zhí)行的意思,后面也是對(duì)要執(zhí)行內(nèi)容的一個(gè)標(biāo)識(shí),不是實(shí)際要執(zhí)行的腳步。
??????? command => "sh /home/gehailong/yum-qihu.sh",
#command后面才是要執(zhí)行的內(nèi)容。
??????? path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/", "/usr/local/bin", "/usr/local/sbin" ],
#注意我這里定義path的作用。它跟系統(tǒng)里的path含義類(lèi)似,也就是說(shuō)從你定義的路徑中來(lái)搜索你要執(zhí)行的命令。
??????? creates => "/etc/yum.repos.d/CentOS-QH.repo",
#creates是指前面執(zhí)行腳本的結(jié)果是來(lái)創(chuàng)建這個(gè)repo文件的內(nèi)容。
}
service { "nginx":
#service是來(lái)定義一個(gè)服務(wù)
??? enable => true,
#enable是指該服務(wù)的狀態(tài)為存在。
??? ensure => running,
#ensure是指這個(gè)服務(wù)要處于running狀態(tài),如果不是則啟動(dòng)該服務(wù)。
??? hasstatus => "false",
??? hasrestart => "false",
??? restart => "/etc/init.d/nginx reload",
??? start => "/etc/init.d/nginx start",
??? stop => "/etc/init.d/nginx stop",
??? status => "/etc/init.d/nginx status",
? }
cron {'xitongbu-jiankong':
#cron是來(lái)定義linux的計(jì)劃任務(wù)。后面是對(duì)該計(jì)劃任務(wù)的描述。
?? command => "/usr/local/monitor/generic_monitor/control.py",
#command是實(shí)際計(jì)劃任務(wù)的內(nèi)容。
?? user => root,
#user指用哪個(gè)用戶(hù)來(lái)定義該計(jì)劃。
?? minute => '0-59/5',
#這里是定義時(shí)間,minute是分鐘,還可以定義hour等內(nèi)容。注意這里也支持通配符,比如*
?? ensure => absent ,
#ensure后面的absent的意思是取消客戶(hù)端的這跟cron。比如批量解除客戶(hù)端原來(lái)定義的一個(gè)cron就可以這樣來(lái)做。都刪除之后就可以把這段注掉來(lái)。
? }
}
先跟大家分享這些吧。寫(xiě)的比較倉(cāng)促,有些的不妥的地方,歡迎大家來(lái)吐槽!!!
轉(zhuǎn)載于:https://blog.51cto.com/gehailong/1544184
總結(jié)
以上是生活随笔為你收集整理的linux下puppet的“资源”管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cocos2dx基础篇(9)——触碰事件
- 下一篇: VirtualBox使用技巧:关于und