天天看點

在 CentOS 和 RHEL 上安裝 Puppet 伺服器和用戶端在 CentOS 和 RHEL 上安裝 Puppet 伺服器和用戶端

當手中有相當多的機器需要管理的時候,自動化處理備援又無聊的任務對系統管理者來說就很重要了。很多管理者習慣了自己寫腳本模拟複雜軟體之間的排程。不幸的是,腳本會過時,腳本的作者會離職,如果不花費巨大精力來維護這些腳本的話,它們早晚會一點兒用也沒有。如果能有一個系統,任何人都可以使用、安裝工具,不論其受雇于何人,那真是太期待了。目前已有幾種系統可以解決這類需求,這篇教程将介紹其中之一——puppet——的使用方法。

<a target="_blank"></a>

在 CentOS 和 RHEL 上安裝 Puppet 伺服器和用戶端在 CentOS 和 RHEL 上安裝 Puppet 伺服器和用戶端

在這篇教程裡,我們将一起安裝配置一個 puppet 伺服器,然後在我們的用戶端伺服器(譯注:這裡的“用戶端伺服器”指需要部署業務邏輯的伺服器)上完成一些基本配置。

由于 puppet 不是 centos 或 rhel 發行版的基本倉庫,是以我們得手動添加 puppet 實驗室提供的自定義倉庫。在所有你想使用 puppet 的地方執行以下指令安裝這個倉庫(版本不同,對應的 rpm 檔案名可能略有不同)。

對于 centos/rhel 6.5:

# rpm -ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs-release-6-10.noarch.rpm

對于 centos/rhel 7:

# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs-release-7-10.noarch.rpm

在你打算用作 master 的伺服器上安裝 "puppet-server" 包。

# yum install puppet-server

安裝完成後,設定 puppet 伺服器開機自動啟動,然後啟動它。

# chkconfig puppetmaster on

# service puppetmaster start

現在伺服器已經運作起來了,我們試試看我們的網絡能不能通路到它。

對于使用 iptables 當做防火牆的 centos/rhel 6,在 /etc/sysconfig/iptables 檔案的 output accept 小節裡添加下面這一行。

-a input -m state --state new -m tcp -p tcp --dport 8140 -j accept

重新啟動 iptables 服務讓剛才的修改生效。

# service iptables restart

在安裝了防火牆的 centos/rhel 7 上,我們這麼做:

# firewall-cmd --permanent --zone=public --add-port=8140/tcp

# firewall-cmd --reload

執行下面的指令,在用戶端節點安裝 puppet 用戶端。

# yum install puppet

安裝完成後,確定 puppet 會随開機自動啟動。

# chkconfig puppet on

puppet 用戶端需要知道 puppet master 伺服器的位址。最佳方案是使用 dns 伺服器解析 puppet master 伺服器位址。如果你沒有 dns 伺服器,在 /etc/hosts 裡添加類似下面這幾行也可以:

1.2.3.4 server.your.domain 2.3.4.5 client-node.your.domain

1.2.3.4 對應你的 puppet master 伺服器 ip 位址,“server.your.domain”是你的 master 伺服器域名(預設通常是伺服器的 hostname),“client-node.your.domain”是你的用戶端節點。包括 puppet master 和用戶端,所有相關的伺服器都要在 hosts 檔案裡配置。

完成這些設定之後,我們要讓 puppet 用戶端知道它的 master 是誰。預設情況下,puppet 會查找名為“puppet”的伺服器,但通常這并不符合你網絡環境的真實情況,是以我們要改成 pupper master 伺服器的完整域名。打開檔案 /etc/sysconfig/puppet,把 puppet_server 變量的值改成你在 /etc/hosts 檔案裡指定的 puppet master 伺服器的域名。

puppet_server=server.your.domain

master 伺服器名也要在 /etc/puppet/puppet.conf 檔案的“[agent]”小節裡事先定義好。

server=server.your.domain

現在可以啟動 puppet 用戶端了:

# service puppet start

強制我們的用戶端在 puppet master 伺服器上登記:

# puppet agent --test

你會看到類似于下面的輸出。别怕,這是正常現象,因為伺服器還沒有在 puppet master 伺服器上驗證過。

exiting; no certificate found and waitforcert is disabled

傳回 puppet master 伺服器,檢查證書驗證請求:

# puppet cert list

你應該能看到一個列出了所有向 puppet master 伺服器發起證書簽名請求的伺服器。找到你用戶端伺服器的 hostname 然後使用下面的指令簽名(client-node 是你用戶端節點的域名):

# puppet cert sign client-node

到此為止 puppet 用戶端和伺服器都正常工作了。恭喜你!但是,現在 puppet master 沒有任何要用戶端做的事兒。好吧,我們來建立一些基本的 manifest 檔案然後讓我們的用戶端節點安裝一些基本工具。

回到你的 puppet 伺服器,確定目錄 /etc/puppet/manifests 存在。

# mkdir -p /etc/puppet/manifests

建立 manifest 檔案 /etc/puppet/manifests/site.pp,内容如下

node 'client-node' {

include custom_utils

}

class custom_utils {

package { ["nmap","telnet","vim-enhanced","traceroute"]:

ensure =&gt; latest,

allow_virtual =&gt; false,

然後重新啟動 puppetmaster 服務。

# service puppetmaster restart

用戶端預設每 30 分鐘更新一次配置,如果你希望你的修改能強制生效,就在用戶端執行如下指令:

# puppet agent -t

如果你需要修改用戶端的預設重新整理時間,編輯用戶端節點的 /etc/puppet/puppet.conf 檔案中“[agent]”小節,增加下面這一行:

runinterval =

這個選項的值可以是秒(格式比如 30 或者 30s),分鐘(30m),小時(6h),天(2d)以及年(5y)。值得注意的是,0 意味着“立即執行”而不是“從不執行”。

你免不了會送出錯誤的配置,然後不得不通過調試判斷問題出現在哪兒。一般來說,你要麼通過檢視日志檔案 /var/log/puppet 着手解決問題,要麼手動執行檢視輸出:

使用“-t”選項,你可以看到 puppet 的詳細輸出。這條指令還有額外的選項可以幫你定位問題。首先要介紹的選項是:

# puppet agent -t --debug

debug 選項會顯示 puppet 本次運作時的差不多每一個步驟,這在調試非常複雜的問題時很有用。另一個很有用的選項是:

# puppet agent -t --noop

這個選項讓 puppet 工作在 dry-run(譯注:空轉模式,不會對真實環境産生影響)模式下,不會應用任何修改。puppet 隻會把其工作内容輸出到螢幕上,不會寫到磁盤裡去。

現在,假設你已經找到了一個子產品能解決你的問題。怎麼把它安裝到你的系統中去呢?非常簡單,因為 puppet 已經有了可以直接下載下傳子產品的使用者界面,隻需要執行下面的指令:

# puppet module install &lt;module_name&gt; --version 0.0.0

&lt;module_name&gt; 是你選擇的子產品的名字,版本号可選(如果沒有指定版本号,預設使用最新的版本)。如果你不記得想安裝的子產品的名字了,試試下面的指令搜尋子產品:

# puppet module search &lt;search_string&gt;

你會得到一個包含 search_string 的清單。

# puppet module search apache

notice: searching https://forgeapi.puppetlabs.com ...

name description author keywords

example42-apache puppet module for apache @example42 example42, apache

puppetlabs-apache puppet module for apache @puppetlabs apache web httpd centos rhel ssl wsgi proxy

theforeman-apache apache http server configuration @theforeman foreman apache httpd deprecated

如果你想檢視已經安裝了哪些子產品,鍵入:

# puppet module list

到目前為止,你應該有了功能完整的可以向一個或多個用戶端伺服器推送基本配置的 puppet master 伺服器。你可以自己随便加點兒配置适配你自己的網絡環境。不必為試用 puppet 擔心,你會發現,它會拯救你的生活。

如果你有任何問題,敬請在文章下方評論,我會盡我所能回答你并給你建議。

原文釋出時間:2014-10-06

本文來自雲栖合作夥伴“linux中國”

繼續閱讀