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