主流MySQL集群實現架構優劣勢與適用場景分析
本文主要分析總結了目前主流的幾種MySQL集群架構實現方法及優缺點,現發出來以供大家參考學習、共同進步,如有不妥之處,請不吝賜教~
一、主從復制架構MHA
MHA即Master High Availability Manager and Tools for MySQL,是日本的一位MySQL專家采用Perl語言編寫的一個MySQL高可用管理工具,目的在於維持Master主庫的高可用性及數據的一致性。
MHA目前在 MySQL高可用方面是一個相對成熟的解決方案且在大量的企業得到廣泛使用。其最大特點是可以修復多個Slave之間的差異日志,最終使所有Slave保持數據一致,然後從中選擇一個Slave數據庫作為新的Master,並將其它Slave指向它。
當Master故障時,MHA會從多個Slave中隨機選擇一個充當新的Master,也可在配置文件中指定某一個Slave優先成為Master。
其架構如下,請參考:
對上圖做如下簡單解釋,請參考:
1.在MHA架構中讀寫分離,最佳實踐是在應用開發設計時提前規劃讀寫分離事宜,在使用時設置兩個連接池,即讀連接池與寫連接池,也可以選擇折中方案即引入SQL Proxy;
2.關於讀負載均衡可以使用F5、LVS、HAPROXY或者SQL Proxy等工具,只要能實現負載均衡、故障檢查及備升級為主後的讀寫剝離功能即可,建議使用LVS;
3.MHA Manager Node 主要負責主庫在crash時將bin log完整同步到slave庫、監控主備庫的狀態及切換。
二、官方集群MySQLCluster架構
MySQL Cluster是Oracle官方提供的一種企業級解決方案。其采用了無共享存儲的數據存儲模式,真正實現了數據在集群中的實時同步及數據庫節點故障對應用的透明性。官方承諾MySQL Cluster可以保證數據庫系統99.999%的可用性。
對上圖做如下簡單解釋,請參考:
1.關於讀、寫負載均衡可以使用F5、LVS、HAPROXY或則其他SQL Proxy等工具,只要能實現負載均衡、故障檢查即可;
2. MySQL Cluster同時支持Cluster和Sharding功能,一般根據實際需要進行設計表;
3.做Sharding的表一般需要使用NDB Cluster 存儲引擎;
4.MGM節點:作用是管理MySQL Cluster內的其他節點,如提供配置數據、啟動並停止節點、運行備份等,其本身產生故障不會影響MySQL Cluster;
5.SQL節點:用來訪問 Cluster數據的節點;
6.NDB節點:用於保存 Cluster的數據;
7.MySQL Cluster支持集群到集群之間的實時同步,粒度可細致到行級別,可實現誇數據中心部署。
三、開源分布式方案Cobar
Cobar是阿裡巴巴B2B部門開發的一種關系型數據的分布式處理系統,它可以在分布式的環境下看上去像傳統數據庫一樣為您提供海量數據服務。Cobar的主要功能如下:
1. Cobar支持將一張表水平拆分成多份分別放入不同的庫來實現表的水平拆分;
2. Cobar也支持將不同的表放入不同的庫;
3.多數情況下,會將以上兩種方式混搭使用;
4. Cobar可以自動向後端連接的MySQL發送心跳,判斷MySQL運行狀況,一旦運行出現異常,Cobar可以自動切換到備機工作。
對上圖做如下簡單解釋,請參考:
1.Cobar同時支持Cluster集群功能和Sharding數據切片功能,一般根據實際需要會采用混搭的方式;
2.Cobar實現了對應用請求的負載均衡、後端節點的健康檢查、SQL切分及查詢結果集的聚合等功能;
3.MySQL主備庫應設置成主主雙向同步方式即須將MySQL M01與MySQL S01設置成主主同步模式。