Mysql

如何在多伺服器 Docker 容器設置上為數據庫執行數據複製?

  • March 21, 2021

設置草圖

對於使用 docker 設置災難恢復拓撲,是否可以在不使用任何編排層(swarm/Kubernetes)的情況下執行從一台伺服器到另一台伺服器的數據複製?有什麼方法可以在 2 個伺服器設置上設置 MySQL Master-Master 或 Master-Slave?

我不想要的:

  1. 使用共享磁碟空間進行數據複製
  2. 沒有第三方工具/軟體
  3. 沒有 Swarm 或 Kubernetes

據我了解,對於一個合適的容災系統,建議備用系統在完全不同的區域,數據複製存在延遲是可以​​接受的。我想知道的是兩個 docker 容器能否正常通信?有什麼需要配置的嗎?或者他們會像沒有 docker 那樣正常通信嗎?

物理上彼此靠近的兩台數據庫伺服器將實現該目標。

  • 從 Primary 到 Replica 仍然會有一些延遲,但可能小於 1ms。
  • 副本在主節點上送出之前不會開始執行複制查詢。(這是另一個強制性滯後。)只要您的寫入僅影響少量行,這也是亞毫秒或低毫秒。
  • 如果是Master-Master,則允許每個接收寫入,並且每個都是“master”和“slave”。但是,我建議一次只寫一個;另一個只是熱備。
  • MM 是已經在兩個方向上設置的 MS,因此可以簡化故障轉移。
  • 每個數據庫伺服器是否實際上都在 Docker 容器中並不重要。
  • 但是擁有兩台獨立的機器可以提供災難恢復,而單個伺服器中的兩個 Docker 不能防止主機板、磁碟等故障。
  • 故障轉移部分是標準問題 MySQL/MariaDB 的一部分,但執行故障轉移仍然是手動的。
  • 如果兩台機器中的一台出現故障,您需要花費一些不小的努力(和時間)來重建另一台機器。
  • 同一洪氾區、地震斷層、龍捲風巷等的兩台機器——對於真正的 DR,你需要地理上的分離。但這會導致伺服器之間的延遲。不能擁有一切!

另請參閱 Galera Cluster(隨 MariaDB 提供;或者可以添加到 MySQL)。有了它,3 個“節點”,每台伺服器一個,提供自動故障轉移和自動修復。

據我所知,Docker 沒有引入任何額外的障礙。也許其他人會插話。如果多個 docker 中有多個 MySQL 實例,則存在將埠號分開的問題。

PS。dba.stackoverflow.com 更適合 MySQL/MariaDB 問題。

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