MySQL主從之外,你又多了一項(xiàng)選擇,Galera
絕大部分互聯(lián)網(wǎng)公司,都使用MySQL的InnoDB引擎存儲(chǔ)數(shù)據(jù)。
為了保證數(shù)據(jù)庫(kù)的高可用,為了保證性能的擴(kuò)展,絕大部分公司又會(huì)使用主從同步,讀寫分離的MySQL集群架構(gòu)。
傳統(tǒng)的主從同步,讀寫分離MySQL集群架構(gòu)如上圖所示:
- 主庫(kù):左側(cè)第一個(gè)實(shí)例,提供寫服務(wù)的實(shí)例;
- 從庫(kù):右側(cè)兩個(gè)實(shí)例,提供讀服務(wù)的實(shí)例;
此時(shí)數(shù)據(jù)復(fù)制是如何實(shí)現(xiàn)的呢?
仍如上圖所示:
- 客戶端將寫操作提交給主庫(kù);
- Replication:主庫(kù)將操作序列化,通過binlog的方式傳輸給從庫(kù);
- 從庫(kù)執(zhí)行相同序列的操作,以實(shí)現(xiàn)副本冗余;
傳統(tǒng)的主從同步,讀寫分離冗余模式,數(shù)據(jù)庫(kù)集群存在什么問題呢?
(1)用戶要關(guān)注集群細(xì)節(jié),實(shí)施讀寫分離;
(2)寫庫(kù)仍是單點(diǎn),性能無(wú)法線性擴(kuò)充;
(3)讀庫(kù)有延時(shí),數(shù)據(jù)不一致;
(4)寫庫(kù)掛了,從庫(kù)頂上,可能出現(xiàn)數(shù)據(jù)丟失;
(5)如果引入中間件,SQL能力會(huì)受影響;
(6)運(yùn)維復(fù)雜性;
(7)…
既然這么多痛點(diǎn),有沒有一項(xiàng)技術(shù),能夠解決大家的問題呢?
Galera集群(Galera Cluster)孕育而生。
什么是Galera集群?
Galera集群是一個(gè)基于MySQL InnoDB同步復(fù)制的:
- 同步;
- 多主;
- 數(shù)據(jù)庫(kù)集群。
畫外音:它能支持例如MariaDB等其他數(shù)據(jù)庫(kù),本文重點(diǎn)講MySQL。
如上圖所示:
- Galera集群由一組MySQL集群組成;
- Replication:這一組MySQL服務(wù)器使用復(fù)制插件來(lái)管理數(shù)據(jù)庫(kù)復(fù)制;
- 客戶端可以讀寫集群中的任何一個(gè)節(jié)點(diǎn)。
Galera集群官網(wǎng)號(hào)稱,它及其流弊:
(1)真正的多主(True Multi_Master),任何數(shù)據(jù)修改會(huì)被復(fù)制到其他節(jié)點(diǎn);
(2)沒有所謂的從庫(kù)延時(shí)(slave lag),同步復(fù)制;
(3)強(qiáng)一致性,所有節(jié)點(diǎn)處于一致的狀態(tài);
(4)熱備,高可用,不需要處理所謂的主從故障轉(zhuǎn)移,也不需要虛IP;
(5)無(wú)需讀寫分離,隨時(shí)可以讀寫任何節(jié)點(diǎn);
(6)支持InnoDB;
(7)對(duì)應(yīng)用程序透明;
(8)…
總之,在官網(wǎng)的描述中,Galera集群是一個(gè)高可用的,高性能的,能保證數(shù)據(jù)一致性與完整性的:
(1)針對(duì)MySQL的;
(2)基于同步認(rèn)證的(synchronous certification-based);
(3)多副本(replication)。
解決方案:
網(wǎng)上Galera的資料好像比較少,問了幾個(gè)之前的朋友,在互聯(lián)網(wǎng)公司似乎也用得不多,準(zhǔn)備深入寫一下Galera集群,畢竟是MySQL主從之后的又一種選擇。
【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】