<Puppet 集中組態管理系統>

來源:互聯網
上載者:User

標籤:des   http   使用   檔案   資料   os   

Puppet 集中組態管理系統
puppet 是一個組態管理工具, 典型的, puppet 是一個 C/S 結構, 當然,這裡的 C 可以有很多,因
此,也可以說是一個星型結構. 所有的 puppet 用戶端同一個伺服器端的 puppet 通訊. 每個
puppet 用戶端每半小時(可以設定)串連一次伺服器端, 下載最新的設定檔,並且嚴格按照配
置檔案來設定管理員. 配置完成以後,puppet 用戶端可以反饋給伺服器端一個訊息. 如果出錯,
也會給伺服器端反饋一個訊息. 展示了一個典型的 puppet 配置的資料流動情況.
穩定性
puppet 與其他手工操作工具有一個最大的區別就是 puppet 的配置具有穩定性,因此你可以多次
執行 puppet, 一旦你更新了你的設定檔,puppet 就會根據設定檔來更改你的機器配置,通常
每 30 分鐘檢查一次. puppet 會讓你的系統狀態同設定檔所要求的狀態保持一致. 比如你配
置檔案裡面要求 ssh 服務必須開啟. 假如不小心 ssh 服務被關閉了,那麼下一次執行 puppet 的
時候,puppet 會發現這個異常,然後會開啟 ssh 服務. 以使系統狀態和設定檔保持一
致.puppet 就象一個魔術師,會讓你的混亂的系統收斂到 puppet 設定檔所想要的狀態.
可以使用 puppet 管理伺服器的整個生命週期,從初始化到退役.不同於傳統的例如 sun 的
Jumpstart 或者 redhat 的 Kickstart, puppet 可以長年讓伺服器保持最新狀態.只要一開始就正
確的配置他們,然後再也不用去管他們.通常 puppet 使用者只需要給機器安裝好 puppet 並讓他們
運行,然後剩餘的工作都由 puppet 來完成.
puppet 的細節和原理
puppet 的目的是讓你只集中於你要管理的目標,而忽略實現的細節,例如命令名,參數或者檔案
格式. puppet 把系統裡面的使用者,軟體包,服務看作是"資源", puppet 的作用就是管理這些資源
以及資源之間的相互聯絡.
Puppet 採用了非常簡單的 C/S 架構,所有資料的互動都通過 SSL 進行,以保證安全。它的工作
流程
1. 用戶端 Puppetd 向 Master 發起認證請求,或使用帶簽名的認證。
2. Master 告訴 Client 你是合法的。
3. 用戶端 Puppetd 調用 Facter,Facter 探測出主機的一些變數,例如主機名稱、記憶體大小、IP 位址
等。Puppetd 將這些資訊通過 SSL 串連發送到伺服器端。
4. 伺服器端的 Puppet Master 檢測用戶端的主機名稱,然後找到 manifest 對應的 node 配置,並對該
部分內容進行解析。Facter 送過來的資訊可以作變數處理,node 牽涉到的代碼才解析,其他
沒牽涉的代碼不解析。解析分幾個階段,首先是語法檢查,如果語法錯誤就報錯;如果文法
沒錯,就繼續解析,解析的結 果產生一個中間的“虛擬碼”(catelog),然後把虛擬碼發給客
戶端。
5. 用戶端接收到“虛擬碼”,並且執行。
6. 用戶端在執行時判斷有沒有 File 檔案,如果有,則向 fileserver 發起請求。
7. 用戶端判斷有沒有配置 Report,如果已配置,則把執行結果發送給伺服器。
8. 伺服器端把用戶端的執行結果寫入日誌,並發送給報告系統。
http://puppet.   wikidot.com  中文 wiki
系統內容:rhel6.3 selinux and iptables disabled
sever:192.168.0.201 desktop1.example.com puppet master
client:192.168.0.202 desktop2.example.com puppet agent
client:192.168.0.203 desktop3.example.com puppet agent
重要:server 與所有 client 之間需要解析,以及時間同步,不然會驗證失敗。
server 端:
# yum localinstall -y rubygems-1.3.7-1.el6.noarch.rpm
把以下條目加入 yum 倉庫:
[puppet]
name=puppet
baseurl=http://yum.puppetlabs.com/el/6Server/products/x86_64/
gpgcheck=0
[ruby]
name=ruby
baseurl=http://yum.puppetlabs.com/el/6Server/dependencies/x86_64/
gpgcheck=0
# yum install puppet-server -y
/etc/puppet 配置目錄:
組織圖如下:
|-- puppet.conf  #主配置設定檔,詳細內容可執行 puppet --genconfig
|-- fileserver.conf  #檔案伺服器設定檔
|-- auth.conf  #認證設定檔
|-- autosign.conf  #自動驗證設定檔
|-- tagmail.conf  #郵件設定檔(將錯誤資訊發送)
|-- manifests  #檔案儲存體目錄(puppet 會先讀取該目錄的.PP 檔案<site.pp>)
|--nodes
| puppetclient.pp
|-- site.pp #定義 puppet 相關的變數和預設配置。
|-- modules.pp #載入 class 類別模組檔案(include syslog)
|-- modules  #定義模組
|-- syslog #以 syslog 為例
|-- file
|-- manifests
|-- init.pp #class 類配置
|-- templates #模組配置目錄
|-- syslog.erb #erb 模板
puppet 的第一個執行的代碼是在/etc/puppet/manifest/site.pp,因此這個檔案必須存在,而
且其他的代碼也要通過該檔案來調用。
# touch /etc/puppet/manifest/site.pp #沒有此檔案 puppet master 無法啟動,配置後面再定義
# service puppetmaster start #啟動 puppet master
# netstat -antlp |grep ruby
tcp 0 0 0.0.0.0:8140 0.0.0.0:* LISTEN 1596/ruby
client 端:
只要安裝 puppet 即可,安裝方法同 server 端:
# yum install puppet -y
puppet 用戶端串連到 puppet master:
# puppet agent --server=puppet.example.com --no-daemonize --verbose
Info: Creating a new SSL key for desktop2.example.com
Info: Caching certificate for ca
Info: Creating a new SSL certificate request for desktop2.example.com
Info: Certificate Request fingerprint (SHA256):
5C:72:77:D8:27:DF:5A:DF:34:EF:25:97:5A:CF:25:29:9F:58:83:A2:61:57:D9:20:7B:1E:C0:36:75:9D:
FB:FC
client 向 master 發出認證驗證請求,然後等待 master 簽名並返回認證。
參數--server 指定了需要串連的 puppet master 的名字或是地址,預設串連名“puppet”的主機
如要修改預設串連主機可以修改/etc/sysconfig/puppet 檔案中的 PUPPET_SERVER=puppet 選項
參數--no-daemonize 是 puppet 用戶端運行在前台
參數--verbose 使用戶端輸出詳細的日誌
在 master 端:
# puppet cert list #顯示所有等待簽名的認證
"desktop2.example.com" (SHA256)
CD:BD:13:D0:B8:46:07:F2:B7:AE:00:C4:E6:E9:E1:A4:92:F6:A4:F1:AB:F7:FF:8D:BE:B0:B7:90:E1:
7B:A8:C0
# puppet cert sign desktop2.example.com #簽署憑證
Signed certificate request for desktop2.example.com
Removing file Puppet::SSL::CertificateRequest desktop2.example.com at
‘/var/lib/puppet/ssl/ca/requests/desktop2.example.com.pem‘
如要同時簽名所有認證,執行以下命令:
# puppet cert sign --all
# puppet cert clean desktop2.example.com #刪除簽署憑證
在對認證簽名後的兩分鐘後,在 agent 端上可以看到如下輸出:
Info: Caching certificate for desktop2.example.com
Starting Puppet client version 3.0.0
Info: Caching certificate_revocation_list for ca
Info: Retrieving plugin
Info: Caching catalog for desktop2.example.com
Info: Applying configuration version ‘1349536603‘
Finished catalog run in 0.13 seconds
自動驗證:
在 server 端, 編輯 puppet.conf 檔案:
[main]
autosign = true #允許所有用戶端的認證
/etc/puppet 目錄下建立 autosign.conf 檔案,內容如下:
*.example.com #表示允許所有 example.com 域的主機
# service puppetmaster reload
在 client 端只需執行:
# puppet agent

# server puppet start
在實際中有時會修改 client 端的主機名稱,這樣就需要重建認證:
1)在 server 端執行:puppet cert --clean desktop2.example.com #你要刪除的原 client 端主機名稱
2)在 client 端執行:rm -fr /var/lib/puppet/ssl/*
puppet agent --server=puppet.example.com
puppet 資源定義
以下資源均定義在/etc/puppet/manifest/site.pp 檔案中,在沒有指定節點的情況下,對所有
已經經過驗證的 client 都生效。
1. 建立檔案
file { "/var/www/html/index.html": content => "www.example.com" }
mkdir /etc/puppet/files
echo www.redhat.org > /etc/puppet/files/index.html
vi /etc/puppet/fileserver.conf
[files]
path /etc/puppet/files
allow *.example.com
service puppetmaster reload
file { "/var/www/html/index.html":
source => "puppet:///files/index.html",
}
2. 軟體包定義
package { “httpd”: ensure => present;
“vsftpd”: ensure => absent
}
3. 服務定義
service { "httpd": ensure => running;
“vsftpd”: ensure => stopped
}
4. 組定義
group { "wxh": gid => 600 }
5. 使用者定義
user { "wxh":
uid => 600,
gid => 600,
home => "/home/wxh",
shell => "/bin/bash" ,
password => westos
}
file { "/home/wxh":
owner => wxh,
group => wxh,
mode => 700,
ensure => directory
}
file { "/home/wxh/.bash_logout":
source => "/etc/skel/.bash_logout",
owner => wxh,
group => wxh
}
file { "/home/wxh/.bash_profile":
source => "/etc/skel/.bash_profile",
owner => wxh,
group => wxh
}
file { "/home/wxh/.bashrc":
source => "/etc/skel/.bashrc",
owner => wxh,
group => wxh
}
user { "test": uid => 900,
home => "/home/test",
shell => "/bin/bash",
provider => useradd,
managehome => true,
ensure => present
}
exec { "echo westos | passwd --stdin test":
path => "/usr/bin:/usr/sbin:/bin",
onlyif => "id test"
}
6. 檔案系統掛載
file { "/public":
ensure => directory
}
mount { "/public":
device => "192.168.0.254:/var/ftp/pub",
fstype => "nfs",
options => "defaults",
ensure => mounted
}
自動掛載檔案系統,並同步 fstab 檔案,如果需要卸載,改為 absent
7. crontab 任務
cron { echo:
command => "/bin/echo `/bin/date` >> /tmp/echo",
user => root,
hour => [‘2-4‘],
minute => ‘*/10‘
}
# 任務會在 client 上/var/spool/cron 目錄中產生。
不同節點的定義:
1. 在 puppetmaster 上編輯 site.pp
# vi /etc/puppet/manifests/site.pp
import "nodes.pp"
2. 建立節點檔案
# vi /etc/puppet/manifests/nodes.pp
node ‘desktop2.example.com‘ {
file { "/var/www/html/index.html":
content => "desktop2.example.com"
}
}
node ‘desktop3.example.com‘ {
file { "/var/www/html/index.html":
content => "desktop3.example.com"
}
}
編寫模組:
mkdir -p /etc/puppet/modules/httpd/{files,manifests,templates}
cd /etc/puppet/modules/httpd/manifests
vi install.pp
class httpd::install {
package { "httpd":
ensure => present
}
}
vi config.pp
class httpd::config {
file { "/etc/httpd/conf/httpd.conf":
ensure => present,
source => "puppet:///modules/httpd/httpd.conf",
#實際路徑在/etc/puppet/modules/httpd/files/httpd.conf
require => Class["httpd::install"],
notify => Class["httpd::service"]
}
}
vi service.pp
class httpd::service {
service { "httpd":
ensure => running,
require => Class["httpd::install","httpd::config"]
}
}
vi init.pp
class httpd {
include httpd::install,httpd::config,httpd::service
}
vi nodes.pp
node ‘server90.example.com‘ {
include httpd
}
service puppetmaster reload
Puppet dashboard 安裝 (用以 web 方式管理 puppet)
依賴性:
* Ruby 1.8.7
* RubyGems
* Rake >= 0.8.3
* MySQL server 5.x
* Ruby-MySQL bindings 2.7.x or 2.8.x
# rpm -ivh rubygem-rake-0.8.7-2.1.el6.noarch.rpm
# yum install puppet-dashboard ruby-mysql mysql mysql-server -y
#mysql 5.1 遇到的資訊包過大問題用用戶端匯入資料的時候,遇到錯誤碼: 1153 - Got a
packet bigger than ‘max_allowed_packet‘ bytes 終止了資料匯入,可以使用如下參數解決:
(rhel6.3 上未遇到)
# vi /etc/my.cnf
[mysqld]
max_allowed_packet = 32M #添加此行
# server mysqld start
配置 mysql 資料庫:
mysql> CREATE DATABASE dashboard_production CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER ‘dashboard‘@‘localhost‘ IDENTIFIED BY ‘westos‘;
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON dashboard_production.* TO ‘dashboard‘@‘localhost‘;
Query OK, 0 rows affected (0.00 sec)
mysql>
# cd /usr/share/puppet-dashboard/
# vi config/database.yml #只留下生產環境配置
production:
database: dashboard_production
username: dashboard
password: westos
encoding: utf8
adapter: mysql
# rake RAILS_ENV=production db:migrate #建立 dashboard 所需的資料庫和表
puppet-dashboard 預設時區不正確,需要修改:
# vi /usr/share/puppet-dashboard/config/settings.yml
time_zone: ‘Beijing‘
啟動服務:
# service puppet-dashboard start
Starting Puppet Dashboard: => Booting WEBrick
=> Rails 2.3.14 application starting on http://0.0.0.0:3000 [ OK ]
# chmod 0666 /usr/share/puppet-dashboard/log/production.log
# service puppet-dashboard-workers start
即時報告匯總:
設定 server 端:
# vi /etc/puppet/puppet.conf
[main] #添加以下兩項
reports = http
reporturl = http://192.168.0.201:3000/reports
# service puppetmaster reload
設定 client 端:
# vi /etc/puppet/puppet.conf
[agent] #添加以下行
report = true
# service puppet reload
在用戶端安裝完 puppet 後,並且認證完後,我們可以看到效果,那怎樣讓它自動與伺服器同步
呢?預設多少分鐘跟伺服器同步呢?怎樣修改同步的時間呢,這時候我們需要配置用戶端:
(1) 配置 puppet 相關參數和同步時間:
# vi /etc/sysconfig/puppet
PUPPET_SERVER=puppet.example.com #puppet master 的地址
PUPPET_PORT=8140 #puppet 監聽連接埠
PUPPET_LOG=/var/log/puppet/puppet.log #puppet 本地日誌
#PUPPET_EXTRA_OPTS=--waitforcert=500  【預設同步的時間,我這裡不修改這行參數】
(2) 預設配置完畢後,用戶端會半個小時跟伺服器同步一次,我們可以修改這個時間。
# vi /etc/puppet/puppet.conf
[agent]
runinterval = 60  #代表 60 秒跟伺服器同步一次
# service puppet reload

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.