讓puppet agent同步變得更加隨機和離散

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,就可以半小時同步一次了。


cron {

puppet_init:

command => "/usr/bin/puppet agent --test;sleep 1800;/usr/bin/puppet agent --test",

user => root,

hour => '*',

minute => inline_template("<%= hostname.hash % 60 %>");

}



這樣就可以將所有節點的同步的時間點在每隔半小時的時間段中,隨機的離散了,可以很好的優化對puppet master的負載。


優化前後master負載情況

在實際生產環境中,我剛開始是運行puppet agent進程的方式去做同步的,300多個節點下,master負載最高達到2,優化後,master負載沒有超過1,基本維持在0.5以下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章