puppet完全攻略(一)puppet应用原理及安装部署
生活随笔
收集整理的這篇文章主要介紹了
puppet完全攻略(一)puppet应用原理及安装部署
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
puppet完全攻略(一)puppet應用原理及安裝部署??
puppet簡介 ? puppet官方網站:http://www.puppetlabs.com/ puppet中文wiki:http://puppet.chinaec2.com/ puppet中文論壇:http://www.puppetfans.com/ puppet是一種Linux、Unix平臺的集中配置管理系統,所謂配置管理系統,就是管理機器里面諸如文件,用戶,進程,軟件包這些資源,其設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關系 puppet使用一種描述性語言來定義配置項,配置項中被稱為”資源”,描述性語言可以聲明你的配置的狀態---比如聲明一個軟件包應該被安裝或者一個服務應該被啟動 用puppet,可以運行一個服務器端,然后每個客戶端通過ssl證書連接服務器,得到本機器的配置列表,然后更加列表的來完成配置工作,所以如果硬件配置好,在一天之內配置好上千上萬臺機器是很容易實現的事情,前提得大部分機器配置類似 在大規模的生成環境中,如果只有一臺puppetmaster會忙不過來的,因為puppet是用ruby寫 的,ruby是解析型語言,每個客戶端來訪 問,都要解析一次,當客戶端多了就忙不過來,所以需要擴展成一個服務器組。puppetmaster可以看作一個web服務器,實際上也是由ruby提供 的web服務器模塊來做的。因此可以利用web代理軟件來配合puppetmaster做集群設置 puppe項目主要開發者是Luke Kanies,目前是puppet labs CEO,puppet遵循GPLv2版權協議。從1997年開始Kanies參與UNIX的系統管理工作,Puppet的開發源于這些經驗。因為對已有的 配置工具不甚滿意,從2001年到2005年間,Kanies開始在Reductive實驗室從事工具的開發。很快,Reductive實驗室發布了他們 的 與Luke Kanies談Puppet工具:http://article.yeeyan.org/view/neilalaer/4629 ? puppet?系統架構 ? Puppet是開源的基于Ruby的系統配置管理工具,puppet是一個C/S結構, 當然,這里的C可以有很多,因此,也可以說是一個星型結構. 所有的puppet客戶端同一個服務器端的puppet通訊.?每個puppet客戶端每半小時(可以設置)連接一次服務器端, 下載最新的配置文件,并且嚴格按照配置文件來配置服務器. 配置完成以后,puppet客戶端可以反饋給服務器端一個消息. 如果出錯,也會給服務器端反饋一個消息. 下圖展示了一個典型的puppet配置的數據流動情況 puppet工作流程?
1)?????????客戶端通過facter收集客戶端信息并發送至服務端 2)?????????連接服務端并請求catalog日志 3)?????????請求節點(node)的信息 4)?????????從服務器端接收節點(node)的實例 5)?????????編譯代碼(包括語法檢查等工作) 6)?????????查詢是否有exported 虛擬資源 7)?????????如有,則從數據庫接收虛擬資源 8)?????????接收完整的catalog日志 9)?????????存儲catalog日志到數據庫 10)???????客戶端接收完整的catalog日志 實驗效果圖: 。。。。。。。。。。。。 實驗環境: puppetmaster?? 192.168.50.55????? server.viong.com puppet???????? 192.168.50.56????? client1.viong.com centos x64 5.5?????最小化安裝+?Developtool 安裝步驟: 由于centos最小化安裝,需要yum一些常用工具 #?yum install ntp vixie-cron wget vim-enhanced telnet 安裝NTP同步時間,統一master和client上的時間 crontables(用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序)默認是安裝的,可vixie-cron軟件包是cron的主程序 wget下載安裝文件 VI只默認安裝了vim-minimal-7.x,所以無論是輸入vi或者 vim查看文件,syntax功能都無法正常啟用。因此需要用yum安裝另外兩個組件:vim-common-7.x和vim-enhanced- 7.x ,yum vim-enhanced-會自動下載關聯vim-common telnet只安裝client,便于測試網絡連通性 [root@puppet soft]# chkconfig --level 35 ntpd on [root@puppet soft]# crontab -e# 加入這一行:?
10 5 * * * root /usr/sbin/ntpdate?time.nist.gov?; /sbin/hwclock –w #每天凌晨5點10分同步time.nist.gov,并將 Linux 時間寫入 BIOS時 [root@localhost ~]# service crond restart [root@localhost ~]# ntpdate pool.ntp.org; hwclock –w 29 Feb 15:22:47 ntpdate[15867]: step time server 196.25.1.1 offset 98.750417 sec Puppet 要求所有機器有完整的域名(FQDN),如果沒有 DNS 服務器提供域名的話,可以在兩臺機器上設置主機名(注意要先設置主機名再安裝 Puppet,因安裝 Puppet 時會把主機名寫入證書,客戶端和服務端通信需要這個證書): [root@puppet puppet-2.7.14]#echo "192.168.50.56 client1.viong.com" >>/etc/hosts [root@puppet puppet-2.7.14]#hostname server.viong.com [root@puppet puppet-2.7.14]# vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=server.viong.com GATEWAY=192.168.50.1 --------------------------------------------------------------------------------------------------默認DNS設置過,個別童鞋有報錯無法認證記得查詢一下 [root@puppet puppet-2.7.14]#vi /etc/resolv.conf ; generated by /sbin/dhclient-script #search localdomain??????? #注釋掉這行,不然造成后面無法認證 nameserver 8.8.8.8 修改完以上文件,退出重新登錄 --------------------------------------------------------------------------------------------------? 安裝ruby 由于puppet是由ruby語言編寫,所以要安裝ruby環境及庫文件,命令幫助文件 [root@puppet soft]# yum install ruby ruby-libs ruby-rdoc? 安裝facter puppet資源下載點?http://downloads.puppetlabs.com/? facter是一個系統盤點工具,收集主機的一些資料,比如CPU,主機IP等,它收集到值發送給puppet服務器端,服務器端就可以根據不同的條件來對不同的節點機器生成不同的puppet配置文件 安裝puppet之前必須先安裝facter [root@puppet soft]# wget?http://downloads.puppetlabs.com/facter/facter-1.6.8.tar.gz [root@puppet soft]# tar -zxvf facter-1.6.8.tar.gz [root@puppet soft]# cd facter-1.6.8? [root@puppet facter-1.6.8]# ruby install.rb 安裝puppet [root@puppet facter-1.6.8]# cd .. [root@puppet soft]# wget http://downloads.puppetlabs.com/puppet/puppet-2.7.14.tar.gz [root@puppet soft]# tar -zxvf puppet-2.7.14.tar.gz [root@puppet soft]# cd puppet-2.7.14 [root@puppet puppet-2.7.14]# ruby install.rb ? 復制配置文件 [root@puppet puppet-2.7.14]# cp conf/redhat/fileserver.conf /etc/puppet/ [root@puppet puppet-2.7.14]# cp conf/redhat/puppet.conf /etc/puppet/ [root@puppet puppet-2.7.14]# cp conf/redhat/server.init /etc/init.d/puppetmaster 設置puppetmaster為服務,并自動啟動 ? 確認puppetmaster是否有執行權限 [root@puppet puppet-2.7.14]# ll /etc/init.d/puppetmaster -rwxr-xr-x?1 root root 3936 06-05 18:19 /etc/init.d/puppetmaster [root@puppet puppet-2.7.14]# chkconfig --add puppetmaster [root@puppet puppet-2.7.14]# chkconfig --level 35 puppetmaster on 創建puppet帳號 [root@puppet puppet-2.7.14]#?puppetmasterd?–mkusers 1)確認是否生成清單文件夾 [root@puppet soft]# ll /etc/puppet/ 總計 32 -rw-r--r-- 1 root root 2552 06-05 01:29 auth.conf -rwxr-xr-x 1 root root?381 2012-06-05 fileserver.conf drwxr-xr-x 2 root root 4096 2012-06-05 manifests -rwxr-xr-x 1 root root?853 2012-06-05 puppet.conf manifests目錄:用來存放puppet的腳本文件的,必須包含init.pp文件,通常情況下可以把腳本都寫入到這個一個文件中,但為了便于管理,最好是按照功能或者項目分開存放 2)確認系統生成puppet用戶 [root@puppet puppet-2.7.14]# cat /etc/passwd |grep puppet puppet:x:500:500::/home/puppet:/bin/bash 3)保證/var/lib/puppet/rrd目錄存在且屬主是puppet [root@puppet puppet-2.7.14]# ll /var/lib/puppet/ 總計 72 drwxr-x--- 2 puppet puppet 4096 06-05 18:49 bucket drwxr-xr-x 2 root?? root?? 4096 06-05 18:49 facts drwxr-xr-x 2 root?? root?? 4096 06-05 18:49 lib drwxr-x--- 2 puppet puppet 4096 06-05 18:49 reports drwxr-x--- 2 puppet puppet 4096 06-05 18:49 rrd drwxr-x--- 2 puppet puppet 4096 06-05 18:49 server_data drwxrwx--x 8 puppet root?? 4096 06-05 18:50 ssl drwxr-xr-t 2 root?? root?? 4096 06-05 18:49 state drwxr-x--- 2 puppet puppet 4096 06-05 18:49 yaml 查看是否安裝成功 [root@server ~]# netstat -ntpl|grep 8140 tcp??????? 0????? 0 0.0.0.0:8140??????????????? 0.0.0.0:*?????????????????? LISTEN????? 2993/ruby [root@server ~]# ps -ef|grep puppet|grep -v grep puppet??? 2993???? 1?0 10:57 ???????? 00:00:00 /usr/bin/ruby /usr/sbin/puppetmasterd? iptable安全設置 默認iptable配置如下: # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT 修改為: # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8140 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT 客戶端 [root@puppet puppet-2.7.14]# echo "192.168.50.55 server.viong.com" >>/etc/hosts [root@puppet puppet-2.7.14]#hostname?client1.viong.com [root@puppet puppet-2.7.14]# vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAME= client1.viong.com GATEWAY=192.168.50.1 在客戶端安裝ruby facter puppet的步驟參考服務端配置 ? 特別說明:請注意客戶端和服務器端版本要一致。如果版本不一致的話,那么高版本的只能是puppet server,另一臺只能作為puppet客戶端,也就是說puppet 服務端的版本可以大于或者等于客戶端版本,不可以小于 其中區別一些如下: [root@puppet puppet-2.7.14]# cp conf/redhat/client.init /etc/init.d/puppet [root@puppet puppet-2.7.14]# chkconfig --level 35 puppet on [root@puppet puppet-2.7.14]# puppetd --mkusers??? Could not prepare for execution: Got 1 failure(s) while initializing: change from absent to present failed: Could not create user puppet: Execution of '/usr/sbin/useradd -g puppet -M puppet' returned 6: useradd: unknown group puppet #手動創建puppet用戶與組 [root@puppet puppet-2.7.14]# groupadd puppet;useradd -g puppet -M puppet [root@puppet puppet-2.7.14]# service puppet start 測試解析與puppetmaster端口是否暢通 [root@puppet puppet-2.7.14]# telnet server.viong.com 8140 Trying 192.168.50.55... Connected to server.viong.com. Escape character is '^]'. Connection closed by foreign host [root@client1 puppet-2.7.14]# puppetd --test --server server.viong.com info: Creating a new SSL key for client1.viong.com warning: peer certificate won't be verified in this SSL session info: Caching certificate for ca warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session info: Creating a new SSL certificate request for client1.viong.com info: Certificate Request fingerprint (md5): 6F:6A:45:D9:14:28:D1:5B:05:3B:4F:0B:9A:51:D1:71 warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session Exiting; no certificate found and waitforcert is disabled # puppetd --test --server server.viong.com命令是指puppetd 從 server.viong.com去讀取 puppet配置文件. 第一次連接,雙方會進行ssl證書的驗證,這是一個新的客戶端,在服務器端那里還沒有被認證,因此需要在服務器端進行證書認證 以下這步批準證書是在服務端操作 查看當然待批準證書列表 [root@server ~]# puppetca –l client1.viong.com (B0:85:72:E6:7D:63:EA:CC:BD:0C:E4:F1:70:89:24:70) 批準當前證書 [root@server ~]# puppetca -s client1.viong.com notice: Signed certificate request for client1.viong.com notice: Removing file Puppet::SSL::CertificateRequest client1.viong.com at '/var/lib/puppet/ssl/ca/requests/client1.viong.com.pem' 查看驗證簽名,注意前面的+號,說明已經簽名 [root@server ~]# puppetca -a --list + server.viong.com?(43:33:D3:A0:26:C4:E9:89:66:A6:DC:54:20:90:E9:4D) (alt names: DNS:puppet, DNS:puppet.viong.com, DNS:server.viong.com) -------------------------------------------------------------------------------------------------- 如果要批準全部證書 puppetca -s -a 也可以在puppetmaster端的puppet.conf加入這行: autosign = true 服務端就自動簽證書 -------------------------------------------------------------------------------------------------- 回到客戶端操作,從服務端取回已批準的證書 [root@client1 puppet-2.7.14]# puppetd --test --server server.viong.com warning: peer certificate won't be verified in this SSL session info: Caching certificate for client1.viong.com info: Caching certificate_revocation_list for ca info: Caching catalog for client1.viong.com info: Applying configuration version '1338897814' info: Creating state file /var/lib/puppet/state/state.yaml notice: Finished catalog run in 0.02 seconds 驗證證書是否正確 服務端: [root@server ~]# md5sum /var/lib/puppet/ssl/ca/signed/client1.viong.com.pem 8529a6f2d42c1b492c016fe870b744b6?/var/lib/puppet/ssl/ca/signed/client1.viong.com.pem 客戶端: [root@client1 puppet-2.7.14]# md5sum /var/lib/puppet/ssl/certs/client1.viong.com.pem 8529a6f2d42c1b492c016fe870b744b6?/var/lib/puppet/ssl/certs/client1.viong.com.pem ------------------------------------------------------------------------------------------------ 出現修改主機名問題引起無法認證,需要重新申請證書,操作以下兩個步驟: 服務端: [root@server ca]# rm -rf /var/lib/puppet/ssl/ca/signed/client1.viong.com.pem 客戶端: [root@client1 puppet-2.7.14]# rm -rf /var/lib/puppet/ssl/? ------------------------------------------------------------------------------------------------ 功能測試 服務端: 建立pp文件測試 puppet的第一個執行的代碼是在/etc/puppet/manifest/site.pp
因此這個文件必須存在,而且其他的代碼也要通過代碼來調用. [root@server ~]# vim /etc/puppet/manifests/site.pp node default { file {"/tmp/viong.txt": content=>"good,test pass!\n";} 上面的代碼對默認連入的puppet客戶端執行一個操作,在/tmp目錄生成一個viong.txt文件,內容是good,test pass!?并自動回車換行 初次創建pp文件,需要重啟puppetmaster [root@server ~]# service puppetmaster restart???? 停止 puppetmaster:??????????????????????????????????????? [確定] 啟動 puppetmaster:??????????????????????????????????????? [確定] 客戶端: [root@client1 puppet-2.7.14]# puppetd --test --server server.viong.com info: Caching catalog for client1.viong.com info: Applying configuration version '1338897814' notice: /Stage[main]//Node[default]/File[/tmp/viong.txt]/ensure: defined content as '{md5}9a3f5438e1d35a72d853974203de4254' notice: Finished catalog run in 0.03 seconds
成功的話就會顯示puppet反饋一些調試信息,并在/tmp目錄下創建了 /tmp/viong.txt文件. [root@client1 puppet-2.7.14]# cat /tmp/viong.txt good,test pass! ============================================================== 設置客戶端的守護進程 [root@client1 puppet-2.7.14]#?puppetd --test --server server.viong.com --verbose --waitforcert?100 info: Caching catalog for client1.viong.com info: Applying configuration version '1338897814' notice: Finished catalog run in 0.03 seconds --server 服務端FQDN?–-verbose 輸出冗余信息 –-waitforcert 超時100 本人覺得使用cron或者手動運行puppet比較符合需求,或者以腳本方式,當master有改變再執行編寫的腳本? 先整理到這里,資源管理這塊涉及到很多內容需要花時間慢慢咀嚼. 整理一篇文章挺辛苦,這次發布遇到一些問題,謝謝邵程程幫忙解決了,有問題請大家提出來,謝謝 參考文檔: http://www.slideshare.net/myw58/puppet-7159486 http://dongxicheng.org/cluster-managemant/puppet/ http://www.mysqlops.com/2011/11/03/puppet-install.html
http://viong.blog.51cto.com/844766/890553
轉載于:https://www.cnblogs.com/L-H-R-X-hehe/p/3790057.html
總結
以上是生活随笔為你收集整理的puppet完全攻略(一)puppet应用原理及安装部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业搜索引擎开发之连接器connecto
- 下一篇: HBase之HFile解析