MySQL叢集解決方案

weixin_43224306發表於2020-11-16

1:mysql資料分庫分表,讀寫分離,主從切換使用mycat
2:叢集方案

多圖文,詳細介紹mysql各個叢集方案
一,mysql原廠出品
1,MySQL Replication
2,MySQL Fabirc
3,MySQL Cluster
二,mysql第三方優化
4,MMM
5,MHA
6,Galera Cluster
三,依託硬體配合
7,heartbeat+SAN
8,heartbeat+DRDB
四,其它
9,Zookeeper + proxy
10,Paxos
 mysql第三方優化
  2.1,MMM
  MMM是在MySQL Replication的基礎上,對其進行優化。

   MMM(Master Replication Manager for MySQL)是雙主多從結構,這是Google的開源專案,使用Perl語言來對MySQL Replication做擴充套件,提供一套支援雙主故障切換和雙主日常管理的指令碼程式,主要用來監控mysql主主複製並做失敗轉移。

在這裡插入圖片描述

 MMM_lgx211

注意:這裡的雙主節點,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱。

就各個叢集方案來說,其優勢為:

自動的主主Failover切換,一般3s以內切換備機。
多個從節點讀的負載均衡。
其劣勢為:

無法完全保證資料的一致性。如主1掛了,MMM monitor已經切換到主2上來了,而若此時雙主複製中,主2資料落後於主1(即還未完全複製完畢),那麼此時的主2已經成為主節點,對外提供寫服務,從而導致資料不一。
由於是使用虛擬IP浮動技術,類似Keepalived,故RIP(真實IP)要和VIP(虛擬IP)在同一網段。如果是在不同網段也可以,需要用到虛擬路由技術。但是絕對要在同一個IDC機房,不可跨IDC機房組建叢集。
2.2,MHA
MHA是在MySQL Replication的基礎上,對其進行優化。

MHA(Master High Availability)是多主多從結構,這是日本DeNA公司的youshimaton開發,主要提供更多的主節點,但是缺少VIP(虛擬IP),需要配合keepalived等一起使用。

在這裡插入圖片描述

要搭建MHA,要求一個複製叢集中必須最少有三臺資料庫伺服器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫。

MHA_lgx211

就各個叢集方案來說,其優勢為:

可以進行故障的自動檢測和轉移
具備自動資料補償能力,在主庫異常崩潰時能夠最大程度的保證資料的一致性。
其劣勢為:

MHA架構實現讀寫分離,最佳實踐是在應用開發設計時提前規劃讀寫分離事宜,在使用時設定兩個連線池,即讀連線池與寫連線池,也可以選擇折中方案即引入SQL Proxy。但無論如何都需要改動程式碼;

關於讀負載均衡可以使用F5、LVS、HAPROXY或者SQL Proxy等工具,只要能實現負載均衡、故障檢查及備升級為主後的讀寫剝離功能即可,建議使用LVS

2.3,Galera Cluster
Galera Cluster是由Codership開發的MySQL多主結構叢集,這些主節點互為其它節點的從節點。不同於MySQL原生的主從非同步複製,Galera採用的是多主同步複製,並針對同步複製過程中,會大概率出現的事務衝突和死鎖進行優化,就是複製不基於官方binlog而是Galera複製外掛,重寫了wsrep api。

非同步複製中,主庫將資料更新傳播給從庫後立即提交事務,而不論從庫是否成功讀取或重放資料變化。這種情況下,在主庫事務提交後的短時間內,主從庫資料並不一致。

同步複製時,主庫的單個更新事務需要在所有從庫上同步 更新。換句話說,當主庫提交事務時,叢集中所有節點的資料保持一致。

對於讀操作,從每個節點讀取到的資料都是相同的。對於寫操作,當資料寫入某一節點後,叢集會將其同步到其它節點。

在這裡插入圖片描述

MHA_lgx211

就各個叢集方案來說,其優勢為:

多主多活下,可對任一節點進行讀寫操作,就算某個節點掛了,也不影響其它的節點的讀寫,都不需要做故障切換操作,也不會中斷整個叢集對外提供的服務。
擴充性優秀,新增節點會自動拉取線上節點的資料(當有新節點加入時,叢集會選擇出一個Donor Node為新節點提供資料),最終叢集所有節點資料一致,而不需要手動備份恢復。
其劣勢為:

能做到資料的強一致性,毫無疑問,也是以犧牲效能為代價。

3:mysq5.7已經支援分散式事務

4:分散式id生成
在這裡插入圖片描述

2.2 Mycat 高可用方案
Mycat 作為一個代理層中介軟體,Mycat 系統的高可用涉及到 Mycat 本身的高可用以及後端 MySQL 的高可用,
前面章節所講的 MySQL 高可用方案都可以在此用來確保 Mycat 所連線的後端 MySQL 服務的高可用性。在大多
數情況下,建議採用標準的 MySQL 主從複製高可用性配置並交付給 Mycat 來完成後端 MySQL 節點的主從自動
切換。

mycat的三大功能:分庫分表、讀寫分離、主從切換

Mycat關鍵特性
關鍵特性
支援SQL92標準
支援MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語法
遵守Mysql原生協議,跨語言,跨平臺,跨資料庫的通用中介軟體代理。
基於心跳的自動故障切換,支援讀寫分離,支援MySQL主從,以及galera cluster叢集。
支援Galera for MySQL叢集,Percona Cluster或者MariaDB cluster
基於Nio實現,有效管理執行緒,解決高併發問題。
支援資料的多片自動路由與聚合,支援sum,count,max等常用的聚合函式,支援跨庫分頁。
支援單庫內部任意join,支援跨庫2表join,甚至基於caltlet的多表join。
支援通過全域性表,ER關係的分片策略,實現了高效的多表join查詢。
支援多租戶方案。
支援分散式事務(弱xa)。
支援XA分散式事務(1.6.5)。
支援全域性序列號,解決分散式下的主鍵生成問題。
分片規則豐富,外掛化開發,易於擴充套件。
強大的web,命令列監控。
支援前端作為MySQL通用代理,後端JDBC方式支援Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支援密碼加密
支援服務降級
支援IP白名單
支援SQL黑名單、sql注入攻擊攔截
支援prepare預編譯指令(1.6)
支援非堆記憶體(Direct Memory)聚合計算(1.6)
支援PostgreSQL的native協議(1.6)
支援mysql和oracle儲存過程,out引數、多結果集返回(1.6)
支援zookeeper協調主從切換、zk序列、配置zk化(1.6)
支援庫內分表(1.6)
叢集基於ZooKeeper管理,線上升級,擴容,智慧優化,大資料處理(2.0開發版)。
什麼是MYCAT
一個徹底開源的,面向企業應用開發的大資料庫叢集
支援事務、ACID、可以替代MySQL的加強版資料庫
一個可以視為MySQL叢集的企業級資料庫,用來替代昂貴的Oracle叢集
一個融合記憶體快取技術、NoSQL技術、HDFS大資料的新型SQL Server
結合傳統資料庫和新型分散式資料倉儲的新一代企業級資料庫產品
一個新穎的資料庫中介軟體產品
MYCAT監控
支援對Mycat、Mysql效能監控
支援對Mycat的JVM記憶體提供監控服務
支援對執行緒的監控
支援對作業系統的CPU、記憶體、磁碟、網路的監控

目標
低成本的將現有的單機資料庫和應用平滑遷移到“雲”端,解決資料儲存和業務規模迅速增長情況下的資料瓶頸問題。

1.6版本架構

長期規劃2.0
完全實現分散式事務,完全的支援分散式。
通過Mycat web(eye)完成視覺化配置,及智慧監控,自動運維。
通過mysql 本地節點,完整的解決資料擴容難度,實現自動擴容機制,解決擴容難點。
支援基於zookeeper的主從切換及Mycat叢集化管理。
通過Mycat Balance 替代第三方的Haproxy,LVS等第三方高可用,完整的相容Mycat叢集節點的動態上下線。
接入Spark等第三方工具,解決資料分析及大資料聚合的業務場景。
通過Mycat智慧優化,分析分片熱點,提供合理的分片建議,索引建議,及資料切分實時業務建議。
優勢
基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和效能以及眾多成熟的使用案例使得MYCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,我們能看到更遠。業界優秀的開源專案和創新思路被廣泛融入到MYCAT的基因中,使得MYCAT在很多方面都領先於目前其他一些同類的開源專案,甚至超越某些商業產品。

MYCAT背後有一支強大的技術團隊,其參與者都是5年以上軟體工程師、架構師、DBA等,優秀的技術團隊保證了MYCAT的產品質量。

MYCAT並不依託於任何一個商業公司,因此不像某些開源專案,將一些重要的特性封閉在其商業產品中,使得開源專案成了一個擺設。

相關文章