Heartbeat、Pacemaker 和 CoroSync 的替代品?
除了典型的 Heartbeat/Pacemaker/CoroSync 組合之外,Linux 上的自動故障轉移還有其他主要替代方案嗎?特別是,我在 EC2 實例上設置故障轉移,它只支持單播 - 不支持多播或廣播。我專門嘗試處理我們擁有的少數軟體,這些軟體還沒有自動故障轉移並且不支持多主機環境。這包括 HAProxy 和 Solr 等工具。
我有 Heartbeat+Pacemaker 工作,但我對此並不感到興奮。以下是我的一些問題:
- Heartbeat - 就其本身而言,僅限於兩個節點。我想要3+。
- Pacemaker - 無法自動配置。集群必須以法定人數執行,然後仍然需要手動配置。
- CoroSync - 不支持單播。
Pacemaker 工作得非常好,雖然它的功率使其難以設置。Pacemaker 的真正問題是沒有簡單的方法來自動化配置。我真的很想啟動一個 EC2 實例,安裝 Chef/Puppet 並在沒有我干預的情況下啟動整個集群。
我更喜歡使用keepalived來實現高可用性。我發現設置(一個守護程序和配置)比心跳和公司更簡單。我遇到的唯一缺點是keepalived預設沒有單播選項,並且只使用VRRP進行通信(HAProxy的作者已經為keepalived編寫了一個單播更新檔)
實際上,我正在研究與您所描述的非常相似的東西(EC2 上的故障轉移集群),並且在嘗試了 Heartbeat 之後,選擇了 Corosync 作為我的消息傳遞層。Corosync 將在多個伺服器上執行,並且從 1.3.0 版(從 2010 年 11 月開始)開始支持單播 (UDPU)。我已經在 Amazon 的 EC2 雲(使用 Amazon 的 Linux AMI)上設置並測試了 Corosync,並且可以確認它可以正常工作。
範例 udpu 文件安裝到 /etc/corosync。
在每個節點的介面部分添加一個成員塊,並將傳輸指定為 updu。(我在下面的範例中使用了與心跳相同的埠,但您可以根據需要更改它)。
例如:
totem { version: 2 secauth: off interface { member { memberaddr: 10.xxx.xxx.xxx } member { memberaddr: 10.xxx.xxx.xxx } ringnumber: 0 bindnetaddr: 10.xxx.xxx.xxx mcastport: 694 } transport: udpu }
(Heartbeat 應該在 1.2.3+ 版本中支持 3+ 節點集群,不過,我從未親自嘗試過,不知道它是否適用於單播)。