Linux

Heartbeat、Pacemaker 和 CoroSync 的替代品?

  • November 6, 2018

除了典型的 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+ 節點集群,不過,我從未親自嘗試過,不知道它是否適用於單播)。

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