天天看點

Linux運維 第五階段 puppet基礎

一、相關概念:

1、  puppet基于C/S架構,使用ruby編寫,在類UNIX平台上集中配置管理系統,它可以管理配置檔案、使用者、cron任務、軟體包、系統服務。

2、  puppet把系統實體稱為資源。

3、  使用協定xmlrpc,xmlrpc是使用https作為傳輸協定的rpc機制,使用xml文本的方式傳輸指令和資料。

4、  可有多個master多個client,所有的client都定期(預設30分鐘)使用facter工具把client的基本配置資訊通過https的xmlrpc協定發送給puppetmaster,puppetmaster-side通過分析client-side主機名,找到該主機的配置代碼,繼而編譯,将編譯好的配置代碼發回client-side,client執行代碼完成配置,并把代碼執行情況回報給puppetmaster。

5、  puppet.conf(主配置檔案)、server.init(服務端啟動腳本)、client.init(用戶端啟動腳本)、fileserver.conf、server.sysconfig、client.sysconfig。

6、  master-side啟動腳本中涉及到檔案/etc/sysconfig/puppetmaster,可将配置檔案/etc/puppet/server.sysconfig複制為/etc/sysconfig/puppetmaster;也可更改啟動腳本(:%s#/etc/sysconfig/puppetmaster#/etc/puppet/server.sysconfig#g)。

7、  兩種形式:分發(master-side向client-side發送相關配置檔案)、提取(client-side向master-side請求資訊),本篇使用的是提取方式。

8、  #ll /var/lib/puppet/yaml/node/  (可通過檢視此目錄下各節點中的檔案時間,如果時間相關太多證明某個節點出問題了,需要手動處理)

9、  所需軟體:facter-1.6.18-8.el6.src.rpm(收集資訊工具)、puppet-2.7.26-2.el6.src.rpm

11、             環境:redhat6.4  X86_64,準備兩台機器,一台服務端一台用戶端

二、安裝及使用:

1、安裝

master-side和agent-side都執行以下語句:

#service iptables  stop

#setforce 0

#ntpdate 192.168.1.222  (時間同步,極其重要,叢集内的所有機器時間誤差控制在秒級以内,否則會出離奇錯誤)

#yum -y  install  ruby

#groupadd puppet

#useradd -g  puppet  -s /bin/false  -M  puppet

#vim /etc/sysconfig/network

HOSTNAME=master.test.com  (服務端執行此句,服務端一定要是完整域名形式)

HOSTNAME=agent.test.com  (用戶端執行此句)

#rpm -ivh  /usr/src/facter-1.6.18-8.el6.src.rpm

#tar zxvf /root/rpmbuild/SOURCES/facter-1.6.18-8.tar.gz

#cd  /root/rpmbuild/SOURCES/facter-1.6.18

#ruby install.rb

#rpm -ivh /usr/src/puppet-2.7.26-2.el6.src.rpm

#tar zxvf /root/rpmbuild/SOUCES/puppet-2.7.26.tar.gz

#cd  /root/rpmbuild/SOURCES/puppet-2.7.26

#mkdir /etc/puppet/

#mkdir /usr/src/puppet-2.7.26-2/redhat/* /etc/puppet

#cp /usr/src/puppet-2.7.26-2/auth.conf /etc/puppet/

#mkdir /etc/puppet/manifests/  (master-side建立此目錄,agent-side不需建立,此目錄在配置檔案server.sysconfig中有定義,為簡便直接建立就不改配置檔案了)

#cp /etc/puppet/server.int /etc/init.d/puppetmaster  (此句在master-side執行,在agent-side則将client.init複制為/etc/init.d/puppetagent)

#chmod 755  /etc/init.d/puppetmaster 

#chkconfig --add  puppetmaster

#chkconfig --level  35  puppetmaster on

#service puppetmaster  start  (agent-side啟動puppetagent)

#netstat lnt  | grep  8140

2、使用(三步:請求-查詢-授權):

#man puppetd

#man puppetca

在agent-side執行:

#puppetd --test  --server  master.test.com  (請求)

在master-side執行:

#puppetca -l  (查詢誰在請求)

#puppetca -s  agetn.test.com  (有查詢結果再授權)

#ll /var/lib/puppet/ssl/ca/signed/*  (此目錄下多了agent.test.com)

注:若出錯,删除以下檔案重新執行以上三步:

#rm -rf  /var/lib/puppet/ssl/  (agent-side直接将ssl目錄删掉)

#rm -rf /var/lib/puppet/ssl/ca/signed/agent.test.com   (在signed目錄下僅将出錯的用戶端的那條記錄删掉)

3、配置管理:

以下例子逐個添加,在agent-side請求,檢視每個例子對應目錄檔案是否更新。

#vim /etc/puppet/manifests/site.pp  (僅在master-side編輯,此檔案在配置檔案server.sysconfig中有定義)

 node  default {   (default表示請求的所有agent-side都執行此段中的語句,也可寫成單獨的agent,例如:node  ’agent.test.com’,表示僅某一用戶端執行如下語句)

     file  {“/tmp/test.txt”:  (例1:首行用冒号‘:’,之後的多行用逗号或分号分隔,最後一行可以沒有,此檔案是在agent-side建立的,master-side不需建立此檔案)

          content=>”I’m a test puppet\n”, (檔案内容)

     }

     file  {“/tmp/clearlog.sh”:  (例2)

          owner=>”puppet”,  (屬主)

          group=>”puppet”,  (屬組)

          mode=>”0777”,  (權限)

             content=>”/bin/find  /tmp/  -name 123*  |  xargs rm  -rf”,  (檔案内容)

    }

     group  {“test”:  (例3,管理使用者組)

          gid=>999,

          ensure=>present,  (present表示建立,absent表示删除)

     user  {“test”:    (管理使用者)

         name=>”test”,

         uid=>999,

         gid=>999,

         managehome=>true,  (建立家目錄)

         groups=>[‘puppet’,’root’],  (附加組)

         shell=>”/bin/bash”,

        ensure=>present,

      cron  {“ntptime”:  (例4,計劃任務)

          command=>”/usr/sbin/ntpdate 192.168.1.222  >  /dev/null 2>&1”,

          minute=>’*/10’,

          hour=>[‘2-4’],

          monthday=>[‘2’,’4’],  (這三行分别為:分時日,月周用*表示)

          environment=>”PATH=/bin:/usr/bin:/usr/sbin”,  (執行指令必須要指定環境變量)

           ensure=>present,

}

#service puppetmaster  restart  (首次編輯完此檔案需要重新開機服務,之後修改則不需重新開機)

#puppetd --test  -server  master.test.com  (在agent-side請求,此句可以寫成腳本檔案,注意/var/lib/puppet/state/lock)

#ll /tmp/

#crontab -l  (依次檢視是否執行成功)

例5:同步master-side某一目錄下的檔案到agent-side

#vim /etc/puppet/fileserver.conf

添加如下語句:

[system_conf]

path  /etc/puppet/system_conf/

allow  *

#service puppetmaster  restart  (首次編輯完此檔案需要重新開機服務,之後則不需要)

#mkdir /etc/puppet/system_conf

#cp -p  /etc/resolv.conf  /etc/puppet/system_conf/

#vim /etc/puppet/system_conf/resolv.conf

 添加語句#test  (與agent-side端檔案做差別)

#vim /etc/puppet/manifests/site.pp

node ‘agent.test.com’  {    (僅将此段語句應用于agent用戶端)

     ……

file  {“/etc/resolv.conf”:  (還可以配置hosts,i18n,yum等系統配置檔案)

    mode=>664,  (系統檔案一定注意檔案權限)

    source=>”puppet://master.test.com/system_conf/resolv.conf”,

4、生産中使用案例:(下一篇詳細介紹進階用法)

<a href="http://s3.51cto.com/wyfs02/M00/72/4C/wKiom1Xf-MCDZDYaAADe6TCQ2Io313.jpg" target="_blank"></a>

本文轉自 chaijowin 51CTO部落格,原文連結:http://blog.51cto.com/jowin/1689264,如需轉載請自行聯系原作者