Puppe的2種同步方式併發
對於puppet agent的同步,有2種方式能夠去作ide
1.在客戶端運行一個agent進程,經過配置/etc/puppet/puppet.conf配置文件中的[agent]項下的runinterval去控制agent的同步時間間隔。優化
2.經過crontab,每隔一段時間去執行puppet agent --test作同步。spa
2種同步方式的優劣進程
分析一下以上2種方式對agent同步時間的離散性crontab
第一種方式的問題:取決於你的agent是何時開始運行的,假設在部署agent的時候是一個個的去部署的,那麼agent的同步間隔就能夠相對的比較離散。但要是是批量併發的去部署agent,或者全部節點機器都重啓或者一部分重啓,就能夠認爲是至關一部分節點的puppet agent在同一時刻運行的,那麼同步的間隔也會保持一致。這樣會致使,平時puppet master很閒,沒有agent過來同步,而在某一刻時間,agent同步會有一個至關大的併發,輕則致使超時,重則master當機。部署
第二種方式的問題:經過crontab結合puppet自帶的inline_template功能,計算hostname的hash,經過hash取出一個隨機的分鐘,每小時的某一分鐘去執行puppet agent --test作同步。由於每隔主機名都是不同的,因此這個分鐘數也是不一致的。同步
樣例以下:
hash
cron { it 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如下