MySQL集群最全詳解
MySQL集群
MySQL集群是為了解決單一 MySQL 服務(wù)器性能瓶頸、提高數(shù)據(jù)庫的可用性、和擴(kuò)展性而設(shè)計的一種解決方案。
采用MySQL集群模式,主要可以解決4大問題:
1. 性能提升:通過將負(fù)載分散到多個服務(wù)器,集群可以顯著提升數(shù)據(jù)庫的讀、和寫的性能;
2. 高可用性:集群模式提供冗余和故障轉(zhuǎn)移機(jī)制,比如:當(dāng)某個節(jié)點發(fā)生故障時,其他節(jié)點可以接管其工作;
3. 擴(kuò)展性:集群可以通過添加更多節(jié)點,來水平擴(kuò)展系統(tǒng)的容量、和處理能力;
4. 數(shù)據(jù)一致性:通過復(fù)制、和同步技術(shù),集群模式可以確保數(shù)據(jù)在多個節(jié)點間的一致性。
MySQL集群模式
大家熟知的:主從復(fù)制、雙主復(fù)制、主備模式.......等等,這些都是屬于典型的MySQL集群模式。
主從復(fù)制模式
主從復(fù)制是 MySQL 中最常用的集群模式之一,一個主服務(wù)器(Master)負(fù)責(zé)所有的寫操作,并將這些更改,異步復(fù)制到一個或多個從服務(wù)器(Slave)上。
如下圖所示:
圖片
主從復(fù)制,主要會涉及到如下3大步驟:
第一步:主服務(wù)器上的數(shù)據(jù)更改記錄
比如:當(dāng)主服務(wù)器將所有的數(shù)據(jù)更改操作,會記錄在二進(jìn)制日志(binary log)中。
第二步:數(shù)據(jù)同步
下一步,將這些更改的數(shù)據(jù),異步復(fù)制到一個、或多個從服務(wù)器(Slave)上。
第三步:數(shù)據(jù)讀取
從服務(wù)器上的讀取和應(yīng)用:從服務(wù)器讀取主服務(wù)器上的二進(jìn)制日志,并在從服務(wù)器上重放這些日志。
優(yōu)點:
提高讀性能:讀請求可以分散到多個從服務(wù)器上;
缺點:
延遲:從服務(wù)器的數(shù)據(jù)可能會有一定的延遲。
分庫分表集群模式
MySQL 分庫分表集群模式,是為了解決單一數(shù)據(jù)庫性能瓶頸,為了提高數(shù)據(jù)庫擴(kuò)展性的一種解決方案。
這里會涉及到:
- 分庫:將數(shù)據(jù)按一定規(guī)則,分布到不同的數(shù)據(jù)庫中;
- 分表:將數(shù)據(jù)按一定規(guī)則,分布到不同的表中。
分庫分表的實現(xiàn):通常需要借助一些中間件、或框架,以便在應(yīng)用層透明地處理數(shù)據(jù)的分布、和路由。
比如:你可以采用MyCat來實現(xiàn),如下圖所示:
圖片
MyCAT 是一個開源的數(shù)據(jù)庫中間件,MyCAT 通過配置規(guī)則將, SQL 請求路由到相應(yīng)的數(shù)據(jù)庫、或表。
采用這種方式,優(yōu)點非常明顯,就是可以極大的降低數(shù)據(jù)量,從而提升性能。
同樣,缺點也非常名且,比如:
不具備高可用性,某一臺分片服務(wù)器掛掉后,會查詢不到數(shù)據(jù);
分布式事務(wù)處理復(fù)雜,跨庫事務(wù)需要分布式事務(wù)協(xié)調(diào)器;
還有,就是:數(shù)據(jù)分片規(guī)則變化時,數(shù)據(jù)遷移復(fù)雜且風(fēng)險較大。
總之,采用MySQL 分庫分表集群模式后,能夠有效提高數(shù)據(jù)庫系統(tǒng)的擴(kuò)展性、和性能。
但也同時也帶來了更高的復(fù)雜性、和運維成本,需要自己來衡量自己團(tuán)隊的技術(shù)實力。
主流的MySQL集群架構(gòu)
在實際應(yīng)用中,為了進(jìn)一步提高數(shù)據(jù)庫的性能和擴(kuò)展性,可以采用讀寫分離、和分片法(分庫分表)相結(jié)合的方式構(gòu)建 MySQL 集群。
如下圖所示:
圖片
讀寫分離
通過主從復(fù)制實現(xiàn),將寫操作集中在主庫(Master),讀操作分散到多個從庫(Slave)。
可以使用 MyCAT 、或 ShardingSphere 等中間件,來實現(xiàn)讀寫分離。
分片(分庫分表)
將數(shù)據(jù)按照一定的規(guī)則分布到多個數(shù)據(jù)庫(或表)中,進(jìn)一步分擔(dān)單個數(shù)據(jù)庫的負(fù)載。
通過將這兩種方法組合使用,可以有效地分散數(shù)據(jù)庫的讀寫負(fù)載,同時實現(xiàn)水平擴(kuò)展。