Mysql

具有 3 個節點的主-主複製

  • March 20, 2019

我需要用 3 個節點配置 mysql 主/主複製。目前我有主/從設置,我需要將它移動到具有 3 個節點的主/主。我已經瀏覽了一些關於在環形結構中配置它的文章,我對此有點緊張。

如果有人在生產中有類似的設置,如果你能建議我如何實現這一點,那就太好了。

您不想以循環方式進行多主機複製的原因有很多,但其中大多數可以總結為一個:您將遇到 3 個不同的單點故障。檢查這篇文章(這正是您所要求的,但可能不是您想要的)。標準複製很容易出現數據漂移,因為它是非同步的,如果幸運的話,所有節點的複制都會停止,或者如果不幸的話,複製會在節點之間繼續使用不同的數據。

雖然 5.6 GTID 和其他功能最大限度地減少了這些一致性問題,但您仍然有 3 個單點故障,因為複制是單主的(多源複製僅在 MariaDB 和 MySQL 5.7 中可用,不需要循環複製)。

如果您想要一個多主機設置(隨處寫入),我強烈建議您使用一種不同的技術來管理節點之間的衝突。Galera(您也可以在Percona XtraDB ClusterMariaDB Cluster的名稱下找到它)可能是要走的路。它適用於 WAN,“解決”衝突(回滾並重試事務)是多執行緒的,可用於替代正常複製和/或集群。如果您的目標是 HA 或讀取擴展,則非常推薦。它是免費和開源的,非常廣泛(我已經幫助幾家銀行和託管公司使用它),兼容標準複製並使用標準 InnoDB - 而不是不同的引擎 - 進行儲存。

當然,最大的缺點是它是一種不同的技術,可能需要一些時間才能理解(儘管可能比其他集群技術更容易),而且它有一些小怪癖。但是,在我自己看來,值得花時間學習它以使事情“正常工作”。

你能設置循環複製嗎?當然,在我上面提到的文章中,您對每個節點都有log-slave-updates,auto_increment_increment和的典型建議。auto_increment_offset但是,可能執行此程序的少數人仍然必須避免多主寫入或在非常受控的環境中執行它,在這種環境中,您無法同時對同一個表執行更新和刪除。有些人還過度設計了涉及 GTID 和半同步複製等的解決方案,但通常並非所有公司都有奉獻精神和知識將更新檔放在本機未為此做好準備的協議上。

我之前處理過三個節點的循環複製。這是我的文章:

我記得我曾經有一個客戶端,他在三節點循環複製中擁有 800 個客戶端數據庫(約 2TB)。客戶端在一台數據庫伺服器上寫入了 267 個數據庫,在第二台數據庫伺服器上寫入了 267 個數據庫,最後在第三台數據庫上寫入了 266 個數據庫。寫得很重。節點之間存在很長的複制滯後間隔。當高峰業務時間過去時,所有節點都恢復正常,Seconds_Behind_Master為 0。它們不需要 auto_increment_increment 和 auto_increment_offset,因為對特定數據庫的所有寫入都僅限於特定 DB 伺服器。

在您的情況下,如果您有一個不是寫入密集型的中小型數據庫,則循環複製是可以的。我只是將所有數據庫寫入限制在一個盒子中並對您的 SELECT 進行負載平衡。

警告

請記住,@jynus@AaronBrown都說你有多個失敗點是正確的。您還必須非常小心地進行備份,將特定數據庫的寫入限製到固定的數據庫伺服器,確保您的應用程序是集群感知的。您還必須設計嚴格的方法來執行故障轉移、將節點從環中取出、將節點重新插入環中,以及在不增加伺服器負載的情況下恢復單個數據庫。

引用自:https://dba.stackexchange.com/questions/72058