Mysql
如何在多伺服器 Docker 容器設置上為數據庫執行數據複製?
對於使用 docker 設置災難恢復拓撲,是否可以在不使用任何編排層(swarm/Kubernetes)的情況下執行從一台伺服器到另一台伺服器的數據複製?有什麼方法可以在 2 個伺服器設置上設置 MySQL Master-Master 或 Master-Slave?
我不想要的:
- 使用共享磁碟空間進行數據複製
- 沒有第三方工具/軟體
- 沒有 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 問題。