High-Availability

複製 beanstalkd 以實現高可用性

  • September 2, 2013

標題說明了一切。

有誰知道複製 beanstalkd 的方法,這樣如果 beanstalk 伺服器出現故障,其他奴隸可以接管?

這是我想到的一種方法:我可以讓 beanstalk 將其 binlog(使用 -b)寫入共享位置,然後如果主伺服器失敗,則以某種方式讓輔助/備份伺服器啟動 beanstalkd。

不過一定有更好的方法。

由於它是通過 binlog 寫入磁碟,我認為您可以做一些類似於 MySQL 管理員通常做的事情:帶DRBD的心跳(此處為範例)。

上次我嘗試使用 heartbeat 時,它不支持節點之間的非多播檢查,這意味著它或多或少不可能在雲/VPS 基礎設施(AWS、Linode、Slicehost 等)上執行。事實上,大多數集群服務都使用多播。這可能不再是這種情況,但需要注意。您也許可以使用keepalived提供基於 ip 的故障轉移,它也只支持多播,但通過 Willy Tarreau(HAProxy的作者)提供了一個更新檔來添加單播支持。我已經在一對 Linode VPS 伺服器上親自測試過,keepalived 能夠在主伺服器出現故障時故障轉移共享 IP 地址。

您可以做的一件可能不太理想的事情是將作業寫入多個 beanstalkd 伺服器(也稱為分區)。如果其中一個發生故障,請讓您的應用檢測到這一點並改為寫入其他實例。您的工作人員必須智能地輪詢每個 beanstalkd 實例並能夠忽略死實例。由於您正在記錄日誌,因此備份實例應該像重新啟動它一樣簡單,並且應用程序/工作人員將檢測到這一點並照常繼續(並開始處理新啟動的實例中的作業)。我顯然是在簡化這個過程,但這是另一種處理方式。

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