一 簡介 我們來探討下多機房下的mysql架構
二 目的:
首先要清楚你的目的
1 實現異地機房的容災備份
2 實現異地機房的雙活
三 敘說
1 實現異地機房的容災備份
目的 只是將數據備份到異地,當第一機房發生故障時,能最大可能的保留數據.實現冗余效果
業務 核心業務在第一機房,第二機房和第一機房都共同使用第一機房的數據源,只有當第一機房發 生故障時,核心業務才會切換到第二機房
實現難度 簡易
角色 1 數據備份冗余 2 故障發生時的數據寫入保留
2 實現異地機房的雙活
目的 多機房狀態下的多業務進行
業務 核心業務在第一機房和第二機房都開展,各自有本地的數據源,當某一機房發生故障時,核心業務會合並到正常的機房
實現難度 復雜
角色 1數據備份冗余 2 支撐異地業務和故障的業務再支持
四 針對單一業務的解決方案
數據庫角度
1 單一業務 只需在異地機房搭建mysql從庫即可,做好mysql從庫的延遲監控,定期備份,打開讀寫,實現了數據庫的冗余備份,不要求高實時性和數據准確性
2 采用 MGR/PXC 方案,但是還是單寫方式,這樣能實現異地機房的高一致性,但是記住這樣的架構依賴於非常好的專線網絡,否則會降低整個集群的性能
3 采用 半同步復制,只要binlog傳輸到異地機房則代表可以繼續進行,這樣至少能保證binlog的成功保存,也可以直接采用binlog_server 保存binlog
4 采用程序中間件和對數據庫的二次改造 通過對異地機房程序進行數據的確認和減少binlog的傳輸量入手
程序角度
1 雙機房程序共用第一機房的數據源,第二機房的數據源不會使用,建議采用DNS方式,當第一機房掛掉后,DNS才會轉移到第二機房提供正常服務
五 針對多機房業務的解決方案
1 雙機房都提供讀寫服務,針對DB級別進行拆分,比如DB1在第一機房讀寫 DB2在第二機房讀寫,機器在雙機房進行數據同步,實現異地雙活提供服務和數據冗余備份功能
2 采用MGR/PXC方案,是多寫方式,這樣能實現雙機房數據的一致性
3 采用程序中間件和對數據庫的二次改造實現
六 總結:
建造異地機房必須要考慮的幾個方面
1 良好穩定的網絡帶寬
2 減少網絡開銷,壓縮binlog或者WS(MGR/PXC的驗證機)網絡參數優化
3 按照業務優先級進行建造
4 異地數據的確認