Puppet是其基于C/S架構(gòu),在Puppet的服務(wù)器端存儲著所有對客戶端服務(wù)器的配置代碼,這在Puppet中稱為Manifest(清單)。清單存放在PupppetMaster服務(wù)器上,當(dāng)Puppet客戶端下載了Manifest之后,可以根據(jù)清單對服務(wù)器進(jìn)行配置。根據(jù)以上介紹可以看出,Puppet的主要功能就是實現(xiàn)自動化運(yùn)維。
在 本 例 中,Puppet服 務(wù) 器 端 的IP為192.168.1.100,名 稱 為“server1.com”,Puppet客戶端 的 IP為192.168.1.101,名稱為“client1.com”。
在服務(wù)器端以Root賬戶登錄,執(zhí)行“hostname”命令查看主機(jī)名信息。
執(zhí)行“cat/etc/hosts”命令,查看IP和域名的對應(yīng)信息。
執(zhí) 行“scp /etc/hosts 192.168.1.101:/etc/”命令,輸入客戶端的Root密碼后,將Hosts文件復(fù)制到客戶機(jī)上。
在另一個控制臺界面中執(zhí) 行“ssh 192.168.1.101”命令,輸入客戶端的Root密碼,登錄到客戶機(jī)上。
執(zhí)行“cat/etc/hosts”命令,查看復(fù)制過去的Hosts文件信息。
執(zhí)行“cat/etc/ntp.conf”命令,查看其中保存的時間服務(wù)器信息,選擇某臺時間服務(wù)器。
執(zhí)行“ntpdate 0.rhel.pool.ntp.org”之類的指令,實現(xiàn)時間同步操作。
也可以執(zhí)行“crontab-e */5 * * * * /usr/sbin/ntpdate 0.rhel.pool.ntp.org&”命令,讓時間同步每隔5分鐘進(jìn)行一次。按照上述方法,保證服務(wù)器端和客戶端時間同步。
執(zhí)行“cat/etc/sysconfig/network”命令,在其中編寫“NETWORKING=yes”,“HOSTNAME=server1.com”語句,讓主機(jī)名永久生效。在客戶端上執(zhí)行同樣的操作。
在服務(wù)器上執(zhí)行“yum install ruby -y”命令,安裝Ruby開發(fā)環(huán)境。
執(zhí)行“yum install openssl openssl-devel”命令,安裝OpenSSL組件。
執(zhí)行“tar zxvf facter-1.6.7.tar.gz” 命令,對Facter包進(jìn)行解壓,進(jìn)入“facter-1.6.7”目錄,執(zhí)行“ruby install.rb”命令,安裝Factor組件。
執(zhí)行“tarzxvf puppet-2.7.13.tar.gz”命令,對Puppet包進(jìn)行解壓。
進(jìn)入“puppet-2.7.13”目錄,執(zhí)行“ruby install.rb”命令,安裝Puppet軟件。在客戶端上也執(zhí)行同樣的安裝操作。
執(zhí)行“cp conf/auth.conf /etc/puppet/auth.conf”命令,生成Puppet的權(quán)限控制文件,該是用于客戶端訪問Puppet服務(wù)器的ACL文件,用于判斷允許哪些客戶端擁有訪問的權(quán)限。
執(zhí)行“cp conf/redhat/fileserver.conf/etc/puppet/”,“cp conf/redhat/puppet.conf /etc/puppet/”命令,復(fù)制所需的文件。前者作為文件服務(wù)器的ACL文件,后者是Puppet服務(wù)器的配置文件。
執(zhí)行“mkdir /etc/puppet/manifests” 命令,創(chuàng)建存儲清單的目錄,這是Puppet腳本的主目錄,應(yīng)該包含諸如“site.pp”,“site.pppuppet”等文件,所有要在服務(wù)器上執(zhí)行的操作都保存在以“.pp”為后綴的文件中。
例如,執(zhí) 行“cp conf/redhat/server.init/etc/init.d/puppetmaster”,“chmod+x/etc/init.d/puppetmaster”命令,復(fù)制所需的文件并為其配置權(quán)限。
執(zhí)行“chkconfig puppetmaster on”命令,設(shè)置開機(jī)自啟動腳本。
為了順利的運(yùn)行Puppet,需要為其配置合適的賬戶。執(zhí)行“puppetmasterd--mkusers”命令,創(chuàng)建對應(yīng)的賬戶。
執(zhí)行“grep puppet/etc/passwd”命令,顯 示名 為“puppet”的賬戶信息。當(dāng)準(zhǔn)備好各種條件后,就可執(zhí)行“/etc/init.d/puppetmaster start”命令,來啟動PuppetMaster服務(wù)。
執(zhí)行“netstat-antup |grep 8140”命令,顯示關(guān)聯(lián)的網(wǎng)絡(luò)連接處于監(jiān)聽狀態(tài)。
執(zhí)行“l(fā)sof-i:8140”命令,顯示是Puppetmas進(jìn)程打開了該端口。
在客戶端上執(zhí)行同樣的安裝操作,來安裝Ruby,F(xiàn)acter和 Puppet。
注意,客戶端準(zhǔn)備的是Puppetd的配置文件。
在Puppet安裝路徑中進(jìn)入“conf”目錄,將其中的“auth.conf”,“namespaceauth.conf”文件復(fù)制到“/etc/puppet”目錄中,進(jìn)入“conf/redhat”目錄,將其中的“pupet.conf”文件也復(fù)制過去,同時將“client.init”文件復(fù)制到“/etc/init”目錄中,將其更名為“puppet”。
執(zhí)行“chmod +x/etc/init.d/puppet”命令,為其設(shè)置執(zhí)行權(quán)限。
執(zhí)行“chkconfig puppetd on”命令,將其設(shè)置wield開啟啟動狀態(tài)。
為了讓客戶端準(zhǔn)確找到Puppet服務(wù)器,需要執(zhí)行“vim /etc/puppet/puppet.conf”命令,在該配置文件中的“[agent]”段中添加“server = server1.com”,“certname = server1.com”兩行,告訴客戶端服務(wù)器的名稱以及證書的名稱。
同樣地,在客戶端也需要執(zhí)行“puppetmasterd--mkusers”命令,創(chuàng)建名為“puppet”的賬戶。
執(zhí)行“/etc/init.d/pupet start”命令,啟 動Puppet客戶端程序。
為了保證雙方的通訊安全,客戶端需要先向服務(wù)器發(fā)送簽名請求,在客戶端 執(zhí) 行“rm-rf/var/lib/puppet/ssl/*”命令,將無關(guān)的認(rèn)證文件刪除。
執(zhí)行“puppetd--test--server server.com”命令,生成證書請求文件。
在服務(wù)器上執(zhí)行“puppetca--list”命令,查看證書請求信息。
執(zhí)行“puppetca-s client.com”命名,對指定客戶端請求進(jìn)行簽名處理。
進(jìn)入“/var/lib/puppet/ssl/ca/signed”目錄,看到生成的指定客戶端的證書文 件,例如“client1.com.pem”。
當(dāng)然,如果想對所有客戶端請求進(jìn)行簽名,可以執(zhí)行“puppet-a-s”命令來實現(xiàn)。執(zhí)行“puppetca-a--list”命令,在列表中出現(xiàn)“+”符號的證書表示簽署成功。
在客戶端執(zhí)行“/etc/init.d/pupetd restart”命令,重啟Pupper服務(wù)。
然后可以自動從服務(wù)器上下載證書,執(zhí)行“l(fā)s /var/lib/puppet/ssl/certs”命令,可以看到從服務(wù)器上得到的證書文件,然后就可以使用新的CA證書進(jìn)而服務(wù)器進(jìn)行通訊了。
下面使用簡單的例子,來說明使用Puppet實現(xiàn)自動化操作的方法。例如在客戶端的“/tmp”目錄下創(chuàng)建名為“test.txt”的文件,在其中寫入一些文本。
在服務(wù)器端進(jìn)入“/etc/puppet/manifests”目 錄,執(zhí)行“vim site.pp”命令,在該入口文件中逐行寫入:“node default{”,“file{"/temp/test.txt":”,“content=>"hello,World!";”,“}”,“}”等內(nèi)容。
其中的“default”表示針對所有的客戶端,當(dāng)然也可以輸入特定的客戶端名稱,表示僅僅針對該客戶端有效。
服務(wù)器之所以可以找到客戶端信息,是因為Factor組件在發(fā)揮作用。在“file”部分設(shè)置需要寫入的文件信息。
執(zhí)行“/etc/init.d/pupetmaster restart”命令,重啟Pupper服務(wù),讓上述配置信息生效。在默認(rèn)情況下,每隔30分鐘,客戶端可以和服務(wù)器進(jìn)行一次同步。
當(dāng)然,您可以根據(jù)實際需要,來修改默認(rèn)的同步時間。
在客戶機(jī)上執(zhí)行“vim/etc/puppet/puppet.conf”命令,在該配置文件中的“[agent]”段中添加“runinterval=60”行,表示將間隔時間設(shè)置為60秒。根據(jù)上述配置信息,在客戶端上創(chuàng)建預(yù)設(shè)的文件。
也可以在客戶端上執(zhí)行執(zhí) 行“/etc/init.d/puppet restart”命令,重啟Puppet服務(wù),讓其立即和服務(wù)器端進(jìn)行同步。然后進(jìn)入“/tmp”目錄,就會發(fā)現(xiàn)名為“test.txt”的文件。
當(dāng) 然,執(zhí)行“puppet--test --server server1.com”命令,也可以實現(xiàn)同樣的效果。
接下來舉例說明如何分發(fā)文件,例如,將服務(wù)器上“/opt”目錄下的“test.c”文件分發(fā)到客戶端的“/opt”目錄下。
當(dāng)然,不要發(fā)布“/root”目錄下的文件,避免權(quán)限問題的干擾。該例子主要模擬軟件包的更新操作。
在服務(wù)器上執(zhí)行“vim/etc/puppet/fileserver.conf”命令,在其中添加“[files]”,“path /opt/”,“allow 192.168.1.0/24”行,即允許指定網(wǎng)段的主機(jī)同步“/opt”目錄下的內(nèi)容。
執(zhí) 行“vim/etc/puppet/manifests/pp.site”命令,在其中添加“file { "/opt/test.c":”,“source =>"puppet://$puppetserver/files/test.c",”,“owner=> "puppet",”,“group=> "puppet",”,“mode =>777,”,“}”行,其 中 的“/opt/test.c”為同步到客戶端的路徑,“$puppetserver”表示服務(wù)器的IP。這里的“files”必須和上述配置文件中的小節(jié)名一致。
注意,因為在“site.pp”文件中已經(jīng)存在內(nèi)容,所以上述部分應(yīng)該插入到最后兩個“}”之間。在其中設(shè)置了權(quán)限信息,即針對該文件為“Puppet”賬戶設(shè)置了指定的權(quán)限。
然后直接在客戶端上執(zhí)行“puppet--test--server server1.com”命令,可以立即實現(xiàn)文件分發(fā)操作。
如果想在客戶機(jī)上執(zhí)行腳本,可以按照上述方法,對服務(wù)器上“site.pp”文件進(jìn)行編輯,在其中 添 加“file{ "/opt/test.sh":”,“source=>"puppet://$puppetserver/files/test.sh",”,“owner=>"puppet",”,“group=>"puppet",”,“mode=>755,”,“}”,“exec { "execmkdir":”,“cwd =>"/opt",”,“command =>"sh /opt/test.sh",”,“user =>"puppet",”,“path =>"/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"”,“}”行。
其作用是先將服務(wù)器上的“/opt”目錄下的“test.sh”腳本文件同步到客戶端上的“/opt”目錄下,并為其設(shè)置針對“Puppet”賬戶的執(zhí)行權(quán)限,之后在客戶機(jī)上執(zhí)行該腳本文件。
其中的“cwd”參數(shù)表示進(jìn)入指定的路徑,“command”參數(shù)表示執(zhí)行目標(biāo)腳本文件,“path”參數(shù)指明環(huán)境變量信息。
然后直接在客戶端上執(zhí)行“puppetd--test--server server1.com”命令,可以立即同步并執(zhí)行該腳本文件。
在Linux中存在很多服務(wù),如果想對客戶機(jī)上的服務(wù)進(jìn)行控制(例如啟動或關(guān)閉等),也可以利用Puppet來實現(xiàn)。
例如,可以按照上述方法,對服務(wù)器上“site.pp”文件進(jìn)行編輯,在其中添加“service {”,“"vsftpd":”,“ensure => stopped;”,“"nfs":”,“ensure =>running;”,“}”行,可 以 將“vsftp”服務(wù)關(guān)閉,將“NFS”服務(wù)重啟。
直接在客戶端上執(zhí)行“puppet --test --server server1.com”命令,可以立即對指定的服務(wù)的狀態(tài)進(jìn)行調(diào)整了。