Ssh

使用 puppet、ansible 或 fabric 滾動更新

  • April 4, 2013

我有一些碼頭伺服器,它們前面有一個負載平衡器。現在我想在不停機的情況下更新我的應用程序。當一個碼頭髮生故障並且不再可達時,負載均衡器會自動將其從列表中刪除,因此這不是問題。

主要問題是避免停機:所以,我必須確保一次只有一個碼頭重新啟動 - 或者確保至少有 N 個碼頭線上!

目前我正在使用一個簡單的 bash 腳本,我需要手動等待一個碼頭重新上線,然後再重新啟動下一個碼頭,依此類推。

現在 bash 對於這類東西並不是很理想,我希望有更適合使整個任務自動化的工具。http://jetty-number-n.com/ping例如,如果第 n 個碼頭線上,我可以使用一個簡單的 ping URL響應 OK (200)。

我該如何解決這個任務以及使用哪個工具?

感謝@ceejayoz,我找到了 ansible的滾動更新。但這仍然不是最理想的,因為我需要設置一個固定的超時時間。

這對於 Ansible 來說相當容易。粗略的偽ansible劇本:

---
 - hosts: your_server_group
   sudo: yes
   serial: 1
   tasks:
     - shell: reboot now
     - wait_for: port=22

Salt 有一個方便的批處理選項。

salt -G 'os:RedHat' --batch-size 25% service.restart jetty

一次在 25% 的 RedHat 伺服器上重新啟動 jetty 服務。

salt -N group1 -b 2 system.restart

重新啟動預定義的“group1”中的伺服器,一次 2 個。

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