一、相關概念:
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,如需轉載請自行聯系原作者