2 主機 MariaDB Galera 集群,只有 keepalived,沒有 HAproxy?
我們即將使用 MariaDB Galera 主-主複製集群替換使用主從複製(總共只有 2 台主機 - 一台主,一台從)的傳統 MySQL 數據庫,以確保更輕鬆的故障轉移。我通讀的教程通常指示在 Galera 節點前創建一個 HAproxy 實例,以在它們之間進行負載平衡(如果需要高可用性,則使用更多的 HAproxy 實例使用 keepalived 共享一個虛擬 IP)。這就是建議的拓撲結構。
然而,在我們的環境中,我們總共只會有 2 台 Galera 主機(負載低,所以一台主機就足夠了),主要要求是冗餘,連接應用程序的最終故障轉移盡可能無縫。
由於單個主機必須能夠在其他主機出現故障時處理所有負載,因此負載平衡只會掩蓋需要升級硬體的點,並且還可能引入不必要的寫入衝突。所有查詢都應該轉到一台主機(另一台只是靜默複製),並且只有在第一個主機發生故障的情況下,才應該將所有查詢都故障轉移到第二台主機,從那時起,第二台主機應該成為“主要”主機並能夠複製所有內容當它恢復時回到原來的故障主機。
問題:如果我們只需要冗餘而不需要負載平衡,那麼完全省略 Galera 主機前面的 HAproxy 實例,只讓兩個 Galera 實例直接共享 keepalived 虛擬 IP 是否合理?或者在我們的情況下仍然使用 HAproxy 是否有任何值得注意的優勢(不包括對 3 個以上 Galera 主機的簡單擴展)?
是的,一個虛擬IP就足夠了。
但是,您應該有第三台主機至少執行 Galera 仲裁守護程序,它負責處理仲裁,即決定兩個節點中的哪一個是同步的。
如果只有兩個節點,而另一個節點以意外方式關閉,並且該節點啟動,則集群狀態是未知的,因為這兩個節點都不知道它是否是最新的。
有關更多資訊,請查看https://www.sebastien-han.fr/blog/2012/10/10/galera-arbitrator-resource-agent/。