Puppe的2種同步方式
對于puppet agent的同步,有2種方式可以去做
1.在用戶端運作一個agent程序,通過配置/etc/puppet/puppet.conf配置檔案中的[agent]項下的runinterval去控制agent的同步時間間隔。
2.通過crontab,每隔一段時間去執行puppet agent --test做同步。
2種同步方式的優劣
分析一下以上2種方式對agent同步時間的離散性
第一種方式的問題:取決于你的agent是什麼時候開始運作的,假設在部署agent的時候是一個個的去部署的,那麼agent的同步間隔就可以相對的比較離散。但要是是批量并發的去部署agent,或者所有節點機器都重新開機或者一部分重新開機,就可以認為是相當一部分節點的puppet agent在同一時刻運作的,那麼同步的間隔也會保持一緻。這樣會導緻,平時puppet master很閑,沒有agent過來同步,而在某一刻時間,agent同步會有一個相當大的并發,輕則導緻逾時,重則master當機。
第二種方式的問題:通過crontab結合puppet自帶的inline_template功能,計算hostname的hash,通過hash取出一個随機的分鐘,每小時的某一分鐘去執行puppet agent --test做同步。因為每隔主機名都是不一樣的,是以這個分鐘數也是不一緻的。
樣例如下:
cron {
puppet_init:
command => "/usr/bin/puppet agent --test;
user => root,
hour => '*',
minute => inline_template("<%= hostname.hash % 60 %>");
}
按照上面的樣例,agent可以在每小時同步一次,而且每個agent在這個小時中分鐘數十不同的(通過hostname的hash做離散)
導緻的問題:隻能每小時做同步了。
我的優化方案
修改crontab任務,在執行一次puppet agent --test後,sleep 30分鐘,再執行一次puppet agent --test,就可以半小時同步一次了。
command => "/usr/bin/puppet agent --test;sleep 1800;/usr/bin/puppet agent --test",
這樣就可以将所有節點的同步的時間點在每隔半小時的時間段中,随機的離散了,可以很好的優化對puppet master的負載。
優化前後master負載情況
在實際生産環境中,我剛開始是運作puppet agent程序的方式去做同步的,300多個節點下,master負載最高達到2,優化後,master負載沒有超過1,基本維持在0.5以下
本文轉自lustlost 51CTO部落格,原文連結:http://blog.51cto.com/lustlost/1309141,如需轉載請自行聯系原作者