Chef

使用 Ansible 或 Saltstack 自動重試配置推送?

  • March 5, 2020

我正在嘗試為 500-2000 個地理分佈非常分散的主機選擇一個配置管理系統。由於不同的網路可靠性,在任何給定時間,許多主機可能暫時不可用。出於這個原因,我最初的選擇是 Chef,因為它使用“拉”模型,當主機上線並簽入時,他們會立即獲得目前配置。

但是,如果我的主機僅每 30 分鐘輪詢一次 Chef 伺服器以獲取新配置,那麼快速部署是不可能的。另外,我不是Rubyist。我更喜歡使用基於推送的模型,在那裡我可以盡快將配置推送到主機。所以,自然的選擇似乎是 Ansible 或 SaltStack(可能是 SaltStack)。但我的問題是:Ansible 和 SaltStack 如何處理失敗或宕機的主機?有什麼方法可以一直重試推送,直到主機重新上線?是否存在使用這些工具正確處理主機最終一致性的模式?謝謝!

Salt在從節點到主節點的拉模型中執行。您可以從 master 發出全域命令,例如

salt 'api*.domain.com` state.highstate

這將在所有 id(hostname) 為 api*.domain.com 的主機上執行 highstate。高級狀態就像一個完整的廚師執行。

通常預設情況下,人們要麼讓主調度 highstate 在 minions 上執行,要麼他們自己在 minions 上執行調度,比如每 10 分鐘執行一次 highstate。

因此,如果一個節點已關閉,並且您在主伺服器上執行命令以執行狀態,那麼 salt 將在其執行輸出中報告該節點已關閉,該輸出可以以多種不同的方式格式化以供您攝取。例如,它甚至可以記錄到 mysql。

因此,例如,如果您在主伺服器上執行上述命令以在所有api*.domain.com節點上執行 highstate。如果 5000 中的 2 個目前正在重新啟動,一旦salt-minion重新聯機,它們將通過消息匯流排從主設備獲得偶數並執行高狀態。

Salt還有一個叫做代理節點的東西來幫助主節點的負載。你可以在某個地方有一個主節點,每個數據中心都有一個代理節點,從主節點發送的所有命令都通過代理節點,這些數據中心中的僕從命中他們的代理節點,而不是主節點

引用自:https://serverfault.com/questions/759302