萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> 自動化運維之 Puppet 實戰

自動化運維之 Puppet 實戰

 隨著IT行業的迅猛發展,傳統的運維方式靠大量人力比較吃力,近幾年自動化運維管理快速的發展,得到了很多IT運維人員的青睐,一個完整的自動化運維包括系統安裝、配置管理、服務監控三個方面。那今天咱們大家一起來學習一下Puppet實際運維中的案例。僅供參考,歡迎大家提更多的意見!

一、應用背景

某公司新到500台服務器,需要安裝Linux系統,並部署上線以及後期的管理配置。對於系統安裝,這個時候肯定得采用批量安裝的,常見批量安裝方式有大家熟知的Kickstart和Cobbler,具體配置方法,網上也有很多好文章,這裡略過。

提示:如果采用自動安裝的話,我們可以自動初始化系統、內核簡單優化、及常見服務、軟件客戶端等安裝。當然Puppet客戶端也可以放在Kickstart中安裝並配置完畢。

當系統穩定運行後,現在我們需要調整和管理部分服務器,例如要修改100台服務器的系統參數、遠程執行命令等,這時候如何操作呢?我們可能會想到腳本,想法很好,如果讓你手動去100台服務器執行同樣的腳本、或者修改某一個配置,是不是也浪費時間呢,利用Puppet可以在幾分鐘、甚至數秒內全部搞定。

二、實際案例配置

現在有一個需求,需要修改100台Linux服務器上的crontab ntp時間服務器地址,原服務器crontab NTP配置段為:

0 0 * * * /usr/sbin/ntpdate pool.ntp.org >>/data/logs/crontab/ntpdate.log 2>&1

現在需要調整為內部自建的服務器地址10.1.1.21,並且修改同步的時間,如下:

0 */5 * * * /usr/sbin/ntpdate 10.1.1.21 >>/data/logs/crontab/ntpdate.log 2>&1

編寫puppet ntp模塊:

Vi /etc/puppet/modules/ntp/manifests/init.pp
class ntp {
Exec { path =>”/bin:/sbin:/bin/sh:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin”}
exec {
“auto change crontab ntp config”:
command =>”sed -i -e ‘/ntpdate/s/0/*/5 /2′ -e ‘s/pool.ntp.org/10.1.1.21/’ /var/spool/cron/root”,
    }
}

這段代碼的注解:創建ntp模塊,利用exec資源遠程執行一條命令,同樣可以舉一反三,其他的修改和配置都可以參考此方法。其中Exec path的意思是定義全局path。如果不定義的話,每一次exec資源都要定義一個path路徑。

二、實際案例配置

當我們有大規模集群的時候,所有服務器要求要求數據一致,可以采用rsync同步,配置rsync服務器端,客戶端執行腳本命令即可。同樣可以使用puppet+腳本來同步,這樣比較快捷,當然也可以使用puppet rsync模塊。Rsync配置此處忽略,直接上puppet代碼:

##定義www模塊

class www {

##定義全局path

Exec { path =>”/bin:/sbin:/bin/sh:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin”}

 

##推送sh腳本到客戶端,192-9-117-162-tdt.com為服務端

file {
“/data/sh/rsync_www_client.sh”:
source =>”puppet://192-9-117-162-tdt.com/files/www/rsync_www_client.sh”,
owner =>”root”,
group =>”root”,
mode =>”755″,
}

 

  ##推送密鑰文件到客戶端,權限設置為600

file {
“/etc/rsync.pas”:
source =>”puppet://192-9-117-162-tdt.com/files/www/rsync.pas”,
owner =>”root”,
group =>”root”,
mode =>”600″,
}

  ##遠程執行命令,備份原有程序,並判斷rsync客戶端腳本是否有修改,如果有變化,則執行。

exec {
“auto backup www data”:
command =>”mkdir -p /data/backup/`date +%Y%m%d`;mv /data/index /data/backup/www/`date +%Y%m%d` ; /bin/sh /data/sh/rsync_www_client.sh “,
user =>”root”,
subscribe =>File["/data/sh/rsync_bus_client.sh"],
refreshonly =>”true”,
      }
}

三、測試puppet

注*這裡如果要使用Puppetrun(Puppet kick)推送功能的話,需要提前配置好客戶端,並在客戶端授權允許服務端發送信號,具體配置文章可查看:

在服務器端執行:

puppet kick –d –host `cat puppet.txt`

Cat Puppet.txt內容為需要同步的客戶端的主機名:

192-9-117-163-tdt.com
192-9-117-164-tdt.com
192-9-117-165-tdt.com

四、puppet總結

本文僅供參考,通過了解和學習,我們可以更加深入的去理解Puppet工作原理以及深入配置,舉一反三:

1、如何在master端對客戶端進行分組?除了正則還可以用什麼?

2、當服務器數量不斷增加,一台puppe tmaster肯定很吃力,如何擴展?如何更好的維護和統一管理puppet node配置?

3、如何結合SVN直接提交代碼?等等問題。

copyright © 萬盛學電腦網 all rights reserved