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

2021-09-21 09:34:07 字數 1531 閱讀 6632

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以下

讓std map operator 變聰明

std map operator是乙個設計得很磋卻很好用的介面,看下面的例子 include include using namespace std int main mapiimap iimap 1 2 1 iimap 2 2 cout iimap 1 iimap 2 iimap 3 endl r...

如何讓自己變聰明

一 喚醒身體 1 閉上眼睛吃飯。2 用手指分辨硬幣。3 戴上耳機上下樓梯。4 捏住鼻子喝咖啡。5 放開嗓子大聲朗讀。6 聞咖啡看魚的。二 尋求腦刺激 7 到餐館點沒吃過的菜。8 把自己的錢花掉。9 專門繞遠路。10 用左手端茶杯。11 聽不同型別的歌曲。12 一天睡覺6小時。三 積極鍛鍊左右腦 13...

讓apk變可除錯

最近學習android逆向發現已經發布的應用基本都不能直接除錯,於是總結一下目前使用過的讓apk變成可除錯的方法。使用adb如下命令檢視default.prop檔案內容 發現ro.debuggable 0,這個屬性控制手機中的應用是否可除錯,0表示不可除錯,1表示可除錯 這裡使用mprop工具來修改...