集群模式
Mysql數(shù)據(jù)庫的集群方案通常包括主從復(fù)制涡贱、主主復(fù)制以及分片集群模式冤馏。
主從復(fù)制或者主主復(fù)制都是借助于Mysql的binlog同步實現(xiàn)數(shù)據(jù)在主從、主主不同節(jié)點之間的同步的。binlog中記錄了mysql數(shù)據(jù)庫執(zhí)行的所有修改語句溉知,比如insert ...? update ...? delete ... 等鬼譬。通過同步主節(jié)點binlog到本節(jié)點relay log再進行sql語句的重放執(zhí)行從而達到數(shù)據(jù)跟主節(jié)點的同步娜膘。
主從模式
主從復(fù)制模式下,通常主服務(wù)器承載寫請求而從服務(wù)器承載讀請求优质】⑻埃可以視負(fù)載情況選擇一主一從或者一主多從方式進行部署。binlog的同步方式如下圖所示:
主從復(fù)制模式下巩螃,從節(jié)點會監(jiān)聽主節(jié)點binlog的變化演怎,同步binglog到relay log中, 由同步線程重放執(zhí)行relay log牺六。 這樣可以做到從節(jié)點數(shù)據(jù)跟主節(jié)點保持一致颤枪。但主從模式下存在主節(jié)點宕機后無法繼續(xù)提供sql寫服務(wù),無法保持系統(tǒng)高可用淑际。
主主模式
為了進一步提升系統(tǒng)的高可用畏纲,可以采用主主復(fù)制模式。采用雙主模式避免某個節(jié)點(主節(jié)點)宕機導(dǎo)致寫服務(wù)不可用春缕。主主復(fù)制的模式如下圖:
主主模式因為在數(shù)據(jù)同步中存在一致性問題盗胀。比如對同一條記錄的并發(fā)更改發(fā)生在兩個主節(jié)點中,先后順序在binlog同步時可能存在先后順序的問題導(dǎo)致數(shù)的最后狀態(tài)不一致锄贼。所以票灰,通常情況下主主模式也只有一個主提供寫服務(wù),而另一個主實質(zhì)上是做熱備宅荤。
分布式數(shù)據(jù)庫
無論是主從模式還是主主模式都無法提高數(shù)據(jù)的存儲(在一臺數(shù)據(jù)庫服務(wù)器上進行全量數(shù)據(jù)的存儲)和寫并發(fā)能力(一臺主數(shù)據(jù)庫承擔(dān)應(yīng)用的所有數(shù)據(jù)寫請求)屑迂。 那如何提高數(shù)據(jù)存儲能力和寫請求處理能力呢? 通常會采用分片數(shù)據(jù)庫集群的方式冯键。通過對數(shù)據(jù)進行切分分別存儲到不同的數(shù)據(jù)庫服務(wù)器上惹盼。這樣可以借助不同的數(shù)據(jù)庫服務(wù)器組成分庫集群為應(yīng)用提供統(tǒng)一的數(shù)據(jù)庫存儲能力。這就是分布式數(shù)據(jù)庫核心解決的問題惫确。 當(dāng)前主流的方式是client和server proxy方式實現(xiàn)數(shù)據(jù)庫的分庫分表手报。具有代表性的產(chǎn)品分別有sharding-jdbc和mycat蚯舱,也都在業(yè)界得到了廣泛的使用。具體sharding和mycat的能力在后續(xù)分享中進行單獨的整理掩蛤。?