開源自動化配置管理工具Puppet入門教程
系統(tǒng)管理員經(jīng)常陷入一系列的重復(fù)任務(wù)中:如升級軟件包、管理配置文件、系統(tǒng)服務(wù)、cron任務(wù)以及添加新的配置、修復(fù)錯(cuò)誤等。這些任務(wù)通常是重復(fù)低效的,解決這類任務(wù)的第一反應(yīng)是讓他們自動化,于是出現(xiàn)了定制腳本。由于環(huán)境復(fù)雜,定制腳本和應(yīng)用程序一再被重復(fù)開發(fā),并且很難適合多種平臺,靈活性和功能也很難保證,于是像Puppet這樣的自動化配置管理工具便出現(xiàn)了。
在開源世界里,有很多配置工具可供選擇,這個(gè)領(lǐng)域一些關(guān)鍵的產(chǎn)品有:
Puppet(http://puppet.reductivelabs.com/):
- Ruby寫成的配置管理工具,使用C/S架構(gòu),使用declarative language配置客戶端。
Cfengine(http://www.cfengine.org):
- 最先發(fā)布的開源配置工具之一,1993年發(fā)布,同樣是C/S架構(gòu),通常應(yīng)用于教育機(jī)構(gòu)。
LCFG(http://www.lcfg.org/):
- C/S架構(gòu)的配置管理工具,使用XML定義配置。
Bcfg2
- Python編寫的C/S架構(gòu)的配置管理工具,使用規(guī)格書和客戶機(jī)響應(yīng)配置目標(biāo)主機(jī)。
本文檔致力于描述使用Puppet管理你的主機(jī)、應(yīng)用程序、后臺程序和各種服務(wù)。
Puppet簡介:
1. Puppet的用途
Puppet是開源的基于Ruby的系統(tǒng)配置管理工具,依賴于C/S的部署架構(gòu)。主要開發(fā)者是Luke Kanies,遵循GPLv2版權(quán)協(xié)議。從1997年開始Kanies參與UNIX的系統(tǒng)管理工作,Puppet的開發(fā)源于這些經(jīng)驗(yàn)。因?yàn)閷σ延械呐渲霉ぞ卟簧鯘M意,從2001年到2005年間,Kanies開始在Reductive實(shí)驗(yàn)室從事工具的開發(fā)。很快,Reductive實(shí)驗(yàn)室發(fā)布了他們的旗艦產(chǎn)品——Puppet。
2. Pupput的特性
許多系統(tǒng)配置管理工具工作的方式非常類似,如cfengine。是什么讓Puppet與眾不同?
Puppet的語法允許你創(chuàng)建一個(gè)單獨(dú)腳本,用來在你所有的目標(biāo)主機(jī)上建立一個(gè)用戶。所有的目標(biāo)主機(jī)會依次使用適用于本地系統(tǒng)的語法解釋和執(zhí)行這個(gè)模塊。舉例:如果這個(gè)配置是在Red Hat服務(wù)器上執(zhí)行,建立用戶使用useradd命令;如果這個(gè)配置是在FreeBSD主機(jī)上執(zhí)行,使用的是adduser命令。
Puppet另一個(gè)卓越的地方是它的靈活性。源于開源軟件的天性,你可以自由的獲得Puppet的源碼,如果你遇到問題并且有能力的話,你可以修改或者加強(qiáng)Puppet的代碼去適用于你的環(huán)境。另外,社區(qū)開發(fā)者和捐獻(xiàn)者還在不斷增強(qiáng)Puppet的功能。一個(gè)大的開發(fā)者和用戶社區(qū)也致力于提供Puppet的文檔和技術(shù)支持。
Puppet也是易于擴(kuò)展的。定制軟件包的支持功能和特殊的系統(tǒng)環(huán)境配置能夠快速簡單的添加進(jìn)Puppet的安裝程序中。
3. Puppet的工作模式
Puppet是一個(gè)C/S架構(gòu)的配置管理工具,在中央服務(wù)器上安裝puppet-server軟件包(被稱作Puppet master)。在需要管理的目標(biāo)主機(jī)上安裝puppet客戶端軟件(被稱作Puppet Client)。當(dāng)客戶端連接上Puppet master后,定義在Puppet master上的配置文件會被編譯,然后在客戶端上運(yùn)行。每個(gè)客戶端默認(rèn)每半個(gè)小時(shí)和服務(wù)器進(jìn)行一次通信,確認(rèn)配置信息的更新情況。如果有新的配置信息或者配置信息已經(jīng)改變,配置將會被重新編譯并發(fā)布到各客戶端執(zhí)行。也可以在服務(wù)器上主動觸發(fā)一個(gè)配置信息的更新,強(qiáng)制各客戶端進(jìn)行配置。如果客戶端的配置信息被改變了,它可以從服務(wù)器獲得原始配置進(jìn)行校正。
4. Puppet的未來
最后,Puppet是一個(gè)年輕的工具,仍然處于開發(fā)和發(fā)展中。Puppet社區(qū)快速壯大,并且許多新的想法不斷融入,促使開發(fā)、更新和模塊每天都在呈現(xiàn)。
#p#
安裝配置:
1. Puppet在RedHat/CentOS系統(tǒng)上安裝
Puppet是基于Ruby寫成的,所以安裝前要準(zhǔn)備好Ruby環(huán)境。在中心的Server上安裝puppet-server包,并運(yùn)行puppetmasterd進(jìn)程;在被管理機(jī)上安裝puppet包,并運(yùn)行puppetd進(jìn)程。另外,在每臺主機(jī)上配置好自己的hostname,之后每臺機(jī)器要以hostname區(qū)分。
1). 安裝ruby環(huán)境:
yum install ruby ruby-rdoc
2). 安裝puppet
Server端安裝:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm yum install puppet-server chkconfig –level 2345 puppetmaster on
修改hosts,添加下面行:
Vi /etc/hosts 172.16.228.30 puppet.sina.com.cn puppet 172.16.228.29 web1.sina.com.cn web1
客戶端安裝:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm yum install puppet chkconfig –level 2345 puppet on
修改hosts,添加下面行:
Vi /etc/hosts 172.16.228.30 puppet.sina.com.cn puppet 172.16.228.29 web1.sina.com.cn web1
3). 啟動puppet
Server端首次運(yùn)行前,編輯/etc/puppet/manifests/site.pp文件,內(nèi)容可以用最基本的:
# Create “/tmp/testfile” if it doesn’t exist. class test_class { file { “/tmp/testfile”: ensure => present, mode => 644, owner => root, group => root } } # tell puppet on which client to run the class node web1.sina.com.cn { include test_class }
啟動Server端:
service puppetmaster start
啟動客戶端:
/etc/init.d/puppet once -v
這時(shí)客戶機(jī)會去連server,但是由于連接是在ssl上的,而Server還沒有sign過客戶端的cert,客戶機(jī)被斷開。
到Server端執(zhí)行:puppetca -list,會顯示等待簽名的客戶端的主機(jī)名,執(zhí)行:puppetca -sign <客戶端主機(jī)名> 即可為其簽名。
在Server端為web1.sian.com.cn授權(quán):
puppetca -list web1.sian.com.cn puppetca -sign web1.sian.com.cn
這時(shí)再到客戶機(jī)上啟動puppetd,即可看到客戶在正常地連接server,并且應(yīng)用Server上為客戶端定制的配置策略。
啟動客戶端:
/etc/init.d/puppet once -v
4). 測試:
也可以將日志直接打印到終端上進(jìn)行測試:
Server端:puppetmasterd -d –no-daemonize -v –trace
客戶端:puppetd –test –trace –debug
#p#
2. puppet配置文件
主配置文件(puppet.conf):
1). 配置文件命名空間:
main 通用配置選項(xiàng)
puppetd 客戶端配置選項(xiàng)
puppetmasterd 服務(wù)端配置選項(xiàng)
2). main命名空間選項(xiàng):
confdir 配置文件目錄,默認(rèn)在/etc/puppet
vardir 動態(tài)數(shù)據(jù)目錄,默認(rèn)在/var/lib/puppet
logdir 日志目錄,默認(rèn)在/var/log/log
rundir puppet PID目錄,默認(rèn)在/var/run/puppet
statedir state目錄,默認(rèn)在$vardir/state
statefile state文件,默認(rèn)在$statedir/state.yaml
ssldir SSL證書目錄,默認(rèn)在$vardir/ssl
trace 發(fā)生錯(cuò)誤時(shí)顯示跟蹤信息,默認(rèn)false
filetimeout 檢測配置文件狀態(tài)改變的時(shí)間周期,單位秒,默認(rèn)15秒
syslogfacility 指定syslog功能為user級,默認(rèn)為daemon級
3). puppetmasterd命名空間選項(xiàng):
user 后臺進(jìn)程執(zhí)行的用戶
group 后臺進(jìn)程執(zhí)行的組
mainfestdir mainfests文件存儲目錄,默認(rèn)為$confdir/mainfests
mainfest mainfest站點(diǎn)文件的名字,默認(rèn)為site.pp
bindaddress 后臺進(jìn)程綁定的網(wǎng)卡地址接口
masterport 后臺進(jìn)程執(zhí)行的端口,默認(rèn)為8140
4). puppet命名空間選項(xiàng):
server puppet puppet服務(wù)器名,默認(rèn)為puppet
runinterval seconds puppet應(yīng)用配置的時(shí)間間隔,默認(rèn)1800秒(0.5小時(shí))
puppetdlockfie file puppet lock文件位置,默認(rèn)$statedir/puppetdlock
puppetport port 后臺進(jìn)程執(zhí)行的端口,默認(rèn)8139
文件服務(wù)配置文件(fileserver.conf):
[files] path /var/lib/puppet/files allow 121.14.1.* allow 60.28.228.0/24 allow *.house.sina.com.cn deny *.sina.com.cn
path定義文件存放路徑,通過allow/deny來控制訪問權(quán)限。
3. puppet命令集
1). puppet 用于執(zhí)行用戶所寫?yīng)毩⒌膍ainfests文件
# puppet -l /tmp/manifest.log manifest.pp
2). puppetd 運(yùn)行在被管理主機(jī)上的客戶端程序
# puppetd –server puppet.leju.com
3). puppetmasterd 運(yùn)行在管理機(jī)上的服務(wù)器程序
# puppetmasterd
4). puppetca puppet認(rèn)證程序
# puppetca -l pclient.leju.com # puppetca -s pclient.leju.com
5). puppetrun 用于連接客戶端,強(qiáng)制運(yùn)行本地配置文件
# puppetrun -p 10 –host host1 –host host2 -t remotefile -t webserver
6). filebucket 客戶端用于發(fā)送文件到puppet file bucket的工具
# filebucket -b /tmp/filebucket /my/file
7). ralsh 轉(zhuǎn)換配置信息到puppet配置代碼
# ralsh user luke user { ‘luke’: home => ‘/home/luke’, uid => ‘100′, ensure => ‘present’, comment => ‘Luke Kanies,,,’, gid => ‘1000′, shell => ‘/bin/bash’, groups => ['sysadmin','audio','video','puppet'] }
8). puppetdoc 打印puppet參考文檔
# puppetdoc -r type > /tmp/type_reference.rst # puppetdoc –outputdir /tmp/rdoc –mode rdoc /path/to/manifests # puppetdoc /etc/puppet/manifests/site.pp
【編輯推薦】