偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SVN自助更新:運(yùn)維利器Puppet實(shí)例講解(一)

原創(chuàng)
系統(tǒng) Linux
Puppet是一種Linux、Unix平臺(tái)的集中配置管理系統(tǒng),使用自有的puppet描述語言,可管理配置文件、用戶、cron任務(wù)、軟件包、系統(tǒng)服務(wù)等。本文通過Puppet進(jìn)行Apache Web服務(wù)器的配置同步,對于兩臺(tái)以上服務(wù)器的配置管理非常方便。

【51CTO獨(dú)家特稿】一直關(guān)注51CTO系統(tǒng)頻道的讀者們可能已經(jīng)都知道了puppet這個(gè)工具。Puppet用于實(shí)現(xiàn)配置管理工作的自動(dòng)化(詳見2010年系統(tǒng)管理員日當(dāng)天的外電頭條),既可以減輕系統(tǒng)管理員的工作量,更主要的是減少人為造成的失誤。在開始閱讀本文有關(guān)puppet的實(shí)例講解之前,推薦大家先閱讀stone的這篇puppet入門教程。

作者簡介:劉晗昭,網(wǎng)名蚊子(博客),某通信業(yè)國企系統(tǒng)工程師,熟悉各種主流開源軟件的使用,部署和組合應(yīng)用,以及主流網(wǎng)站架構(gòu)。目前關(guān)注puppet線上應(yīng)用與分布式緩存清除系統(tǒng)。

一直想寫點(diǎn)關(guān)于puppet的文章,但通過學(xué)習(xí)發(fā)現(xiàn),puppet更多的是參數(shù)配置上的東西,寫理論性的內(nèi)容無非就是翻譯一下官方文檔,不利于新人對于puppet的理解上手。于是覺得,還是應(yīng)該結(jié)合實(shí)際應(yīng)用寫些關(guān)于puppet使用方面的東西更貼近大眾。

首先簡單介紹一下puppet。puppet是一種Linux、Unix平臺(tái)的集中配置管理系統(tǒng),使用自有的puppet描述語言,可管理配置文件、用戶、cron任務(wù)、軟件包、系統(tǒng)服務(wù)等。puppet把這些系統(tǒng)實(shí)體稱之為資源,其設(shè)計(jì)目標(biāo)是簡化對這些資源的管理以及妥善處理資源間的依賴關(guān)系。

puppet采用C/S星狀的結(jié)構(gòu),所有的客戶端和一個(gè)或幾個(gè)服務(wù)器交互。每個(gè)puppet客戶端每半小時(shí)(可以設(shè)置)連接一次服務(wù)器端,下載最新的配置文件,并且嚴(yán)格按照配置文件來配置服務(wù)器,保證和該配置信息同步。配置完成以后,puppet客戶端可以反饋給服務(wù)器端一個(gè)消息。如果出錯(cuò),也會(huì)給服務(wù)器端反饋一個(gè)消息。

情景描述

在開始介紹實(shí)現(xiàn)方法之前,先介紹一下我們的業(yè)務(wù)情況。我們企業(yè)有不少項(xiàng)目是交給外包做的,相關(guān)的項(xiàng)目負(fù)責(zé)人或開發(fā)者有新的或更改過的項(xiàng)目文件會(huì)上傳到我們的SVN服務(wù)器上,再由我們的系統(tǒng)管理員執(zhí)行SVN update更新頁面。一直以來我們的做法都是,項(xiàng)目負(fù)責(zé)人或開發(fā)者上傳了新文件之后,去找到SA,SA再登錄服務(wù)器手動(dòng)執(zhí)行svn up。每次都要SA動(dòng)手實(shí)在很麻煩,所以前些日子看到puppet這個(gè)東西的時(shí)候,覺得這就是能夠?qū)㈨?xiàng)目負(fù)責(zé)人、開發(fā)者和SA從這個(gè)工作中解放出來的利器~

這個(gè)SVN自助更新系統(tǒng)的實(shí)現(xiàn)思路如下:

一、開發(fā)平臺(tái)

  1. apache+perl-cgi
  2. puppet

二、功能介紹

系統(tǒng)管理員/項(xiàng)目執(zhí)行者/開發(fā)人員通過web的get對應(yīng)的url,然后觸發(fā)更新puppet-master中的一個(gè)文件,puppet-client在同步時(shí)間到來的時(shí)候(默認(rèn)半小時(shí),可改),判斷master上對應(yīng)的項(xiàng)目文件的md5值是否有變化,如果有變化,觸發(fā)puppet配置中對應(yīng)的svn更新的程序,完成此項(xiàng)目的更新。

三、系統(tǒng)架構(gòu)

Puppet系統(tǒng)架構(gòu) 

四、實(shí)施步驟及相關(guān)說明解釋

1、puppet配置

此處puppet的安裝方法我就不寫了,有需要的自行去網(wǎng)上查找。我這邊是CentOS 5.4(服務(wù)器端)和CentOS 5.5(客戶端),采用yum安裝。

#p#

A、puppet-master配置

a) 首先是創(chuàng)建autosign.conf文件,此文件用于自動(dòng)驗(yàn)證。

*.wenzizone.cn

這樣所有這個(gè)域名過來的請求會(huì)自動(dòng)驗(yàn)證。

b) 修改puppet.conf文件。如果是通過rpm或yum安裝,此文件內(nèi)容可以基本保持不變

[main]
    logdir = /var/log/puppet
    rundir = /var/run/puppet
    ssldir = $vardir/ssl
    bindaddress = 192.168.192.199
[puppetd]
    classfile = $vardir/classes.txt
    localconfig = $vardir/localconfig

此文件主要是定義了一些文件路徑,我在這里添加了bindaddress = 192.168.192.199這條,綁定在了內(nèi)網(wǎng)的ip上,因?yàn)槲也⒉幌胱屛业膒uppet-master被外網(wǎng)訪問到,這個(gè)可以因個(gè)人環(huán)境而定。如果需要看詳細(xì)的puppet.conf內(nèi)容可以執(zhí)行puppet --genconfig。

c) 修改fileserver.conf,增加如下內(nèi)容

      [system]
           path /etc/puppet/modules/system/files
           allow *.wenzizone.cn
           allow 192.168.192.0/24
       [svnup]
           path /etc/puppet/modules/svn/files
           allow *.wenzizone.cn
       allow 192.168.192.0/24

此文件可以創(chuàng)建一個(gè)文件系統(tǒng),有點(diǎn)類似rsync的配置,后面我會(huì)繼續(xù)介紹。這個(gè)意思就是所有wenzizone.cn或者192.168.192.0網(wǎng)段的機(jī)器可以訪問/etc/puppet/modules/svn/files下的文件。

注:以上三個(gè)文件都是放至在/etc/puppet目錄下的

d) puppet功能配置

首先看下puppet的目錄結(jié)構(gòu),

/etc/puppet/
|-- auth.conf
|-- autosign.conf
|-- fileserver.conf
|-- manifests
|   |-- huodong_web.pp
|   `-- site.pp
|-- modules
|   |-- svn
|   |   |-- files
|   |   |   |-- hd_zf_up_file
|   |   `-- manifests
|   |       |-- hd_zf_up.pp
|   |       |-- init.pp
|   `-- system
|       |-- files
|       |   |-- puppet.client.conf
|       `-- manifests
|           |-- init.pp
|           |-- puppet_client.pp
`-- puppet.conf

根下的manifests目錄放置主配置文件,modules下面是各種的模塊,在這里我設(shè)置了兩個(gè)模塊,system和svn,其中system用來給我的puppet-client同步puppet.conf文件,svn就是我這次介紹的重點(diǎn)了。

這里插個(gè)題外話:puppet的模塊都是遵從

|   |-- svn
|   |   |-- files
|   |   `-- manifests
|   |       |-- init.pp

這種結(jié)構(gòu)的,包含模塊名字:svn目錄,files目錄,manifests目錄,此目錄下包含init.pp文件。

下面先看svn的這個(gè)模塊

files目錄:用來存放觸發(fā)svn更新的文件的,我們可以在此目錄下touch任何一個(gè)名字的文件,更新的工作由perl-cgi來控制,我這里使用的名字是:hd_zf_up_file

manifests目錄:用來存放puppet的腳本文件的,必須包含init.pp文件,通常情況下可以把腳本都寫入到這個(gè)一個(gè)文件中,但為了便于管理,最好是按照功能或者項(xiàng)目分開存放。我這里的hd_zf_up.pp就是我為公司線上的一個(gè)項(xiàng)目建立的。內(nèi)容如下:

1class hd_zf_up
2{
3    file {
4        "hd_zf_up":
5        group => 'root',
6        mode => '600',
7        owner => 'root',
8        path => "/tmp/hd_zf_up_file",
9        source => "puppet:///svnup/hd_zf_up_file",
10    }
11
12    exec {
13        "svn up":
14        cwd => "/var/www/html/www.szyisi.cn/zf",
15        path => "/usr/bin:/usr/sbin:/bin",
16        subscribe => File["hd_zf_up"],
17        refreshonly => true,
18    }
19}

下面詳細(xì)解釋一下:

1行定義了一個(gè)類,類似php里的類,用于將相應(yīng)的方法整合。

3行是puppet的file方法,網(wǎng)上的介紹file是一種資源,我這里認(rèn)為當(dāng)作方法比較合適,這樣就可以跟php的類相似了,file后面大括號(hào)里的都是file這個(gè)方法的屬性。屬性用來賦值,方法用來調(diào)用。當(dāng)然怎樣理解因人而異。

4行給這個(gè)file方法定義了一個(gè)方便使用的別名

5行定義此文件的屬組是root

6行定義此文件的訪問模式是只有屬主用戶可讀可寫

7行定義文件的屬主也是root

8行定義此文件在puppet-client端的放置位置及文件名

9行定義了從puppet-master的什么文件拿到那個(gè)文件。這里就用到了前fileserver.conf定義的內(nèi)容,可以看到svnup是預(yù)定義的別名,它實(shí)際對應(yīng)的路徑是/etc/puppet/modules/svn/files,這樣后面跟的文件就會(huì)到這個(gè)路徑下去取。整個(gè)svn這部分的配置理解就是:puppet-client要從source定義的路徑拿到hd_zf_up_file文件放到client的/tmp目錄下并將文件所以權(quán)給root用戶和組,訪問模式是600。

12行定義了puppet的exec方法,這個(gè)方法是使puppet執(zhí)行系統(tǒng)命令或腳本用的。

13行是定義了exec要執(zhí)行的命令,在這里是要求puppet執(zhí)行svn up這個(gè)命令。也就是更新項(xiàng)目的命令

14行定義了上面的svn up命令要在什么目錄下執(zhí)行

15行定義了path的變量,用于系統(tǒng)可以找到svn對應(yīng)的命令。

16行定義了一個(gè)依存關(guān)系,我們這里和17行聯(lián)合起來解釋,當(dāng)file方法定義里的那個(gè)文件的md5值發(fā)生變化的時(shí)候,此exec方法觸發(fā),即當(dāng)上面source里面定義的文件md5值發(fā)生改變了,就執(zhí)行svn up這個(gè)命令。

題外話:起先我這里并沒有想到要和一個(gè)文件進(jìn)行聯(lián)立,但結(jié)果發(fā)現(xiàn),puppet會(huì)在每次觸發(fā)的時(shí)候都執(zhí)行exec這個(gè)方法,這會(huì)造成網(wǎng)絡(luò)資源的消耗,因?yàn)閟vn里的數(shù)據(jù)并不是每次都有更新的,所以沒必要每次都執(zhí)行。

到此svn up這部分的配置就完成了。接下來看看init.pp里面的內(nèi)容

class svn
{   
    import "hd_zf_up.pp"
}

可以看到,init.pp的內(nèi)容還是很簡單的,只是引入了我們定義好的pp文件。

下面來介紹system那個(gè)模塊的內(nèi)容,這部分內(nèi)容我主要講同步puppet-client端配置文件的這個(gè)功能,這樣方便我們一次性配置好client端的puppet。

files目錄下:放置的是puppet.client.conf文件,主要內(nèi)容如下

[main]
    logdir = /var/log/puppet
    rundir = /var/run/puppet
    ssldir = $vardir/ssl
[puppetd]
    classfile = $vardir/classes.txt
    localconfig = $vardir/localconfig
    server = app-21-199.wenzizone.cn
    runinterval = 300
show_diff=true

從內(nèi)容上看,基本上和master上一樣,主要區(qū)別是后三行,server用于指明master的名字,可以是ip可以是對應(yīng)的主機(jī)名(前提是你已經(jīng)有了對應(yīng)的解析)。runinterval用于指定puppet-client每次執(zhí)行的間隔,單位是秒,最后一行是當(dāng)文件被替換的時(shí)候是否顯示不一樣的地方。

manifests目錄下同樣放置了init.pp文件,同時(shí)我還自定義了一個(gè)puppet_client.pp,內(nèi)容如下:

1 class puppet_client
2  {
3      file
4      {
5          "puppet_conf":
6          path => "/etc/puppet/puppet.conf",
7          source => "puppet:///system/puppet.client.conf",
8      }
  
9      exec
10      {
11          "reload-puppet-client":
12          command => "/etc/init.d/puppet force-reload",
13          require => Service["puppet_client"],
14          refreshonly => true,
15      }
   16 service 17 { 18 "puppet_client": 19 name => "puppet", 20 enable => true, 21 ensure => running, 22 hasrestart => true, 23 hasstatus => true, 24 subscribe =>File["puppet_conf"], 25 } 26 }

相同的內(nèi)容就不重復(fù)介紹了。這里exec部分的11行并不是直接寫的要執(zhí)行的命令,而是定義了富有含義的名字,比較直觀,然后在12行通過command定義了要執(zhí)行的命令。

13行表明exec能不能執(zhí)行是依賴于service這個(gè)方法的,后面詳細(xì)介紹。

16行開始定義了一個(gè)新的方法service。顧名思義就是服務(wù)類的方法。

18行同樣定義了一個(gè)富有含義的名稱。

19行定義這個(gè)服務(wù)的名字,這里的名字必須和/etc/init.d下對應(yīng)的名字一樣

20行表示此服務(wù)在開機(jī)時(shí)是否啟動(dòng),true是啟動(dòng)

21行表示是否運(yùn)行此服務(wù),running表示運(yùn)行。

22行指出管理腳本是否支持restart參數(shù),如果不支持,就用stop和start實(shí)現(xiàn)restart效果. 可以設(shè)置的值是true 或 false

23行指出管理腳本是否支持status參數(shù),puppet用status參數(shù)來判斷服務(wù)是否已經(jīng)在運(yùn)行了,如果不支持status參數(shù),puppet利用查找運(yùn)行進(jìn)程列表里面是否有服務(wù)名來判斷服務(wù)是否在運(yùn)行. 可以設(shè)置的值是true或false

24行表示,此服務(wù)運(yùn)行依賴file這個(gè)方法,同時(shí)exec又require了service,這樣當(dāng)file里定義的配置文件有變化及文件md5值不一樣的時(shí)候,exec就執(zhí)行force-reload的命令。

再來看init.pp內(nèi)容

1 class system
2 {   
3      import "puppet_client.pp"
4 }

此內(nèi)容很簡單,主要是定義了一個(gè)system的類,然后導(dǎo)入puppet_client.pp的內(nèi)容。

到此puppet上自定義的兩大功能就介紹完成了,下面看看puppet如何加載。

回到/etc/puppet/manifests目錄下,主要文件就兩個(gè),site.pp和huodong_web.pp。site.pp是主文件,huodong_web.pp是我為我需要svn更新的web服務(wù)器做的。內(nèi)容如下

1 node "app198-vhost-192-55" {
2      #系統(tǒng)初始化工具
3      include system
4      include puppet_client  
5      #祝福活動(dòng)頁面更新
6      include svn
7      include hd_zf_up
8 }

1行定義了一個(gè)主機(jī)名,此處可以是主機(jī)名可以是ip地址

3加載system類,這個(gè)類是在system模塊下的init.pp中定義的

4在system類加載后就來加載puppet_client的類,這個(gè)累是在system模塊下的puppet_client.pp定義的。

6,7行同樣是加載svn模塊中定義好的類。

接下來看site.pp的內(nèi)容

1 node default
2 {
3      import "huodong_web.pp"
4 }

這個(gè)主文件的內(nèi)容也很簡單,首先定義了一個(gè)默認(rèn)node,然后加載了huodong_web.pp文件。

到此master上puppte部分的配置就全部完畢了。接下來看client端上的配置

#p#

B、puppet-client上的配置

a) 登錄到app198-vhost-192-55這臺(tái)主機(jī)上,yum安裝puppet,然后在命令行執(zhí)行

puppetd --server app-21-199.wenzizone.cn –test

由于我們是做的自動(dòng)簽名,并且在服務(wù)器上配置了puppet-client的配置文件,所以執(zhí)行完過后puppet自動(dòng)會(huì)以守護(hù)進(jìn)程的方式啟動(dòng)

b) 配置svn更新主目錄,及web頁面項(xiàng)目的主目錄,在我這個(gè)案例中的主目錄是/var/www/html/www.szyisi.cn/zf,進(jìn)入到這里使用svn co svn_source ./將初始的項(xiàng)目導(dǎo)入出來。這樣就為了svn up命令執(zhí)行做好了對應(yīng)的環(huán)境。

通過簡單的兩步,就已經(jīng)把puppet-client上的準(zhǔn)備工作都完成了,是不是很簡單。

那么下面就是perl-cgi部分了。

C、部署svn自助更新web腳本

這里可以將腳本部署在和puppet-master同一臺(tái)主機(jī)上,當(dāng)然也可以考慮分布式的,那樣就需要調(diào)整這個(gè)腳本?,F(xiàn)在先以同一臺(tái)機(jī)器為例。

a)安裝apache,配置cgi目錄

因?yàn)槲覀兊脑L問量不會(huì)很大,我直接用yum安裝了。所以cgi目錄使用的是默認(rèn)的cgi-bin目錄。

b)編寫對應(yīng)的腳本pjupdate.cgi

#! /bin/env perl
use CGI;
 
my $query = CGI->new();                       #初始化cgi實(shí)例
my $file_name = $query->param('pjname');         #urlpjname的值賦給$file_name變量
my $up_time = `date +%s`;                                      #獲得從1970-01-01 00:00:00 UTC到現(xiàn)在的秒數(shù)
my $dst_dir = "/etc/puppet/modules/svn/files/";      #目標(biāo)文件的目錄
 
my $success = open FH,">".$dst_dir.$file_name;     #開的目標(biāo)文件,即觸發(fā)svn的文件
if(!$success) {
    print "Content-type:text/html\n\n";
    print "不能更新此項(xiàng)目,請聯(lián)系管理員!";    #如果打開不成功進(jìn)行提示,通常是權(quán)限問題,文件屬主改成apache執(zhí)行用戶 } else { print FH"$up_time";             #更新文件內(nèi)容,為了達(dá)到變更此文件md5值的效果 print "Content-type:text/html\n\n"; print "更新已經(jīng)開始,請5~10分鐘后查看頁面"; } close(FH);

#p#

五、測試

使用方法:通過

http://test.wenzizone.cn/cgi-bin/pjupdate.cgi?pjname=hd_zf_up_file 

觸發(fā)更新。

可以看到,pjname的值實(shí)際上就是磁盤上我定義的那個(gè)文件的名字。這樣只要使用不同的文件,再配置不同的puppet的pp文件,就能實(shí)現(xiàn)多個(gè)項(xiàng)目自助更新了。同樣,因?yàn)閜uppet是分布式的c/s模式,所以在同一時(shí)間,也可以實(shí)現(xiàn)對多臺(tái)服務(wù)器的更新。

到此,這個(gè)自助svn更新系統(tǒng)就介紹完畢了。有幾點(diǎn)需要注意的:

  1. 請確認(rèn)部署環(huán)境中有對應(yīng)的主機(jī)名到ip地址的解析環(huán)境,本文所在環(huán)境已存在內(nèi)部dns,所以全部使用主機(jī)名。
  2. 所有puppet主機(jī)時(shí)間要保持一致。
  3. 注意防火墻對puppet端口的限制,如果非必要,可以關(guān)閉防火墻。

心得總結(jié)

puppet確實(shí)是一個(gè)功能很強(qiáng)大的統(tǒng)一管理系統(tǒng)。在學(xué)習(xí)初期,對于文件模塊之間的關(guān)系著實(shí)有些混亂,不過通過自己的摸索和嘗試,在參考了網(wǎng)上的一些資料后,大概了解了puppet結(jié)構(gòu)之間的聯(lián)系,逐漸的實(shí)現(xiàn)了自己的一些想法,同時(shí)也為了給新學(xué)puppet的人理清各文件間關(guān)系吧。此文只為拋磚,因?yàn)檫@套系統(tǒng)目前來看還很簡陋,還有很多需要完善的地方。如何更合理的利用puppet以及如何能更簡化puppet的認(rèn)為干預(yù)配置,值得我去思考并逐步去實(shí)現(xiàn)的。

參考網(wǎng)站:12

【51CTO.com獨(dú)家特稿,轉(zhuǎn)載請注明原文作者和出處?!?/p>

【編輯推薦】

  1. 開源自動(dòng)化配置管理工具Puppet入門教程
  2. 系統(tǒng)管理員最需要自動(dòng)化的十大任務(wù)
  3. Linux批量安裝 五大開源軟件挨個(gè)看

 

責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2012-05-05 21:43:27

puppet自動(dòng)化運(yùn)維

2011-11-14 09:17:14

Linux運(yùn)維ClusterShel

2013-04-16 14:55:21

自動(dòng)化運(yùn)維Puppet實(shí)戰(zhàn)

2012-05-04 19:45:30

puppet自動(dòng)化運(yùn)維

2009-06-08 15:36:21

運(yùn)維管理自助服務(wù)摩卡

2012-09-20 09:43:43

運(yùn)維管理Puppet

2012-05-05 21:28:44

2012-05-05 21:22:40

2012-05-05 21:48:43

puppet自動(dòng)化運(yùn)維

2012-05-05 22:27:46

puppet自動(dòng)化運(yùn)維

2010-05-28 15:47:29

SVN分支

2014-08-11 09:17:18

2014-08-04 17:30:57

自動(dòng)化運(yùn)維puppet

2012-05-05 21:03:35

puppet自動(dòng)化運(yùn)維

2010-05-19 15:45:23

Apache+SVN權(quán)

2012-05-05 22:10:13

puppet自動(dòng)化運(yùn)維

2014-04-18 18:07:18

2011-03-23 17:23:32

PuppetDevOps數(shù)據(jù)中心

2009-03-09 21:25:11

Linuxnagios開源

2015-09-15 13:41:14

文件系統(tǒng)檢測工具AIDE運(yùn)維工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)