Mysql

如何通過 MySQL 複製或集群來設置故障轉移方案?

  • November 27, 2022

在我的德國供應商出現大量數據問題後,我現在不得不處理故障轉移情況。但是有幾個問題我找不到任何真正的答案。所以我希望有人能在這裡幫助我。

我目前讓 server1 在單獨的 docker 容器中執行兩個 MySQL 數據庫。這些現在應該在第二台伺服器上複製。萬一 server1 出現故障,我可以通過 ClusterIP 相對快速地切換到 server2。

萬一重要的是要知道:使用數據庫的軟體是一個體育比賽管理系統,它對數據庫進行了大量的寫操作(未測試但總的來說是寫操作和讀操作)。

我現在的問題是:

  • 哪種複制方式最合適?
  • 據我了解, MASTER <-> MASTER 是最合適的。但我也在這裡一遍又一遍地讀到可能會出現問題。
  • 使用 MASTER <-> SLAVE,問題出現了,從站只能讀取。如果主人失敗了怎麼辦?奴隸會自動成為主人並且也可以寫嗎?
  • 還是集群是最好的解決方案?目前我只有一個活動節點。將來可能會在美國添加另一個 DB 節點。但目前它不存在。

我真的很感謝任何幫助,因為我需要一個快速工作的解決方案,而且這個一般主題似乎非常龐大而且並不那麼容易。

你提出兩個問題。

MySQL Topology In order(從OK到Best)

  • 主要 -> 副本 - 可以實現“故障轉移”,但需要手動操作,因此需要時間。
  • Primary <=> Primary – 這只是設置起來稍微複雜一點,同時提供對其他伺服器的“即時”使用。
  • 至少 3 個伺服器的集群。這進一步自動化了故障轉移。請參閱“InnoDB Cluster”(MySQL 8)或“Galera”(包含在 MariaDB 中)。

地理——請注意,即使是數據中心也可能會失敗。例如,一次颶風可以使佛羅里達州的多少網路癱瘓?

注意“裂腦”場景。這是您只有兩台伺服器的地方,並且都執行良好,但網路已關閉。他們看不出來,你也看不出來是什麼情況。如果每個人都認為它是唯一活著的伺服器並繼續進行寫入,那麼您將陷入混亂。因此,相反,您必須假設整個系統都已關閉。

底線——您至少需要 3 台物理上分開的伺服器。

代理人

仍然存在客戶端知道數據庫系統的哪一部分處於活動狀態(用於讀取和/或寫入)的問題。當只有“讀取”很重要時,具有任意數量副本的許多拓撲就足夠了——並提供“無限”縮放。“寫入”是真正的挑戰所在。

有幾種第 3 方產品擅長注意到一台伺服器已關閉並“做正確的事”重新路由到其他伺服器。研究它們。

編碼

當發生故障時,您的程式碼很可能會出現某種錯誤。你必須檢查錯誤,有些不是自我修復的。大多數網路錯誤需要一些時間才能注意到。

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