10款常見MySQL高可用方案選型解讀

作者介紹:

王鬆磊,現任職於UCloud,從事MySQL數據庫內核研發工作。主要負責UCloud雲數據庫udb的內核故障排查工作以及數據庫新特性的研發工作。
原文鏈接:https://yq.aliyun.com/articles/80365

一、概述

我們在考慮MySQL數據庫的高可用架構時,主要考慮如下幾方面:

  • 如果數據庫發生了宕機或者意外中斷等故障,能儘快恢復數據庫的可用性,儘可能的減少停機時間,保證業務不會因爲數據庫的故障而中斷。

  • 用作備份、只讀副本等功能的非主節點的數據應該和主節點的數據實時或者最終保持一致。

  • 當業務發生數據庫切換時,切換前後的數據庫內容應當一致,不會因爲數據缺失或者數據不一致而影響業務。

關於對高可用的分級我們暫不做詳細的討論,這裏只討論常用高可用方案的優缺點以及選型。

二、高可用方案

2.1、主從或主主半同步複製

使用雙節點數據庫,搭建單向或者雙向的半同步複製。在5.7以後的版本中,由於lossless replication、logical多線程複製等一些列新特性的引入,使得MySQL原生半同步複製更加可靠。

常見架構如下:

20170323094056168.jpg

通常會和Proxy、Keepalived等第三方軟件同時使用,即可以用來監控數據庫的健康,又可以執行一系列管理命令。如果主庫發生故障,切換到備庫後仍然可以繼續使用數據庫。

優點:

  • 架構比較簡單,使用原生半同步複製作爲數據同步的依據;

  • 雙節點,沒有主機宕機後的選主問題,直接切換即可;

  • 雙節點,需求資源少,部署簡單;

缺點:

  • 完全依賴於半同步複製,如果半同步複製退化爲異步複製,數據一致性無法得到保證;

  • 需要額外考慮HAProxy、Keepalived的高可用機制;

2.2、半同步複製優化

半同步複製機制是可靠的。如果半同步複製一直是生效的,那麼可以認爲數據是一致的。但是由於網絡波動等一些客觀原因,導致半同步複製發生超時而切換爲異步複製,這時便不能保證數據的一致性。所以儘可能的保證半同步複製,就可以提高數據的一致性。

該方案同樣使用雙節點架構,但是在原有半同複製的基礎上做了功能上的優化,使半同步複製的機制變得更加可靠。

可參考的優化方案如下:

(1)雙通道複製

20170323094116947.jpg

半同步複製由於發生超時後,複製斷開,當再次建立起復制時,同時建立兩條通道,其中一條半同步複製通道從當前位置開始複製,保證從機知道當前主機執行的進度。另外一條異步複製通道開始追補從機落後的數據。當異步複製通道追趕到半同步複製的起始位置時,恢復半同步複製。

(2)binlog文件服務器

20170323094125164.jpg

搭建兩條半同步複製通道,其中連接文件服務器的半同步通道正常情況下不啓用,當主從的半同步複製發生網絡問題退化後,啓動與文件服務器的半同步複製通道。當主從半同步複製恢復後,關閉與文件服務器的半同步複製通道。

優點:

  • 雙節點,需求資源少,部署簡單;

  • 架構簡單,沒有選主的問題,直接切換即可;

  • 相比於原生複製,優化後的半同步複製更能保證數據的一致性;

缺點:

  • 需要修改內核源碼或者使用MySQL通信協議。需要對源碼有一定的瞭解,並能做一定程度的二次開發;

  • 依舊依賴於半同步複製,沒有從根本上解決數據一致性問題;

2.3、高可用架構優化

將雙節點數據庫擴展到多節點數據庫,或者多節點數據庫集羣。可以根據自己的需要選擇一主兩從、一主多從或者多主多從的集羣。

由於半同步複製,存在接收到一個從機的成功應答即認爲半同步複製成功的特性,所以多從半同步複製的可靠性要優於單從半同步複製的可靠性。並且多節點同時宕機的機率也要小於單節點宕機的機率,所以多節點架構在一定程度上可以認爲高可用性是好於雙節點架構。

但由於數據庫數量較多,所以需要數據庫管理軟件來保證數據庫的可維護性。可以選擇MMM、MHA或者各個版本的Proxy等等。常見方案如下:

(1)MHA+多節點集羣

20170323094133900.jpg
MHA Manager會定時探測集羣中的master節點,當master出現故障時,它可以自動將最新數據的slave提升爲新的master,然後將所有其他的slave重新指向新的master,整個故障轉移過程對應用程序完全透明。

MHA Node運行在每臺MySQL服務器上,主要作用是切換時處理二進制日誌,確保切換儘量少丟數據。

MHA也可以擴展到如下的多節點集羣:

20170323094141680.jpg

優點:

  • 可以進行故障的自動檢測和轉移;

  • 可擴展性較好,可以根據需要擴展MySQL的節點數量和結構;

  • 相比於雙節點的MySQL複製,三節點/多節點的MySQL發生不可用的概率更低;

缺點:

  • 至少需要三節點,相對於雙節點需要更多的資源;

  • 邏輯較爲複雜,發生故障後排查問題,定位問題更加困難;

  • 數據一致性仍然靠原生半同步複製保證,仍然存在數據不一致的風險;

  • 可能因爲網絡分區發生腦裂現象。

(2)ZooKeeper+Proxy

ZooKeeper使用分佈式算法保證集羣數據的一致性,使用ZooKeeper可以有效的保證Proxy的高可用性,可以較好地避免網絡分區現象的產生。

20170323094150647.jpg

優點:

  • 較好的保證了整個系統的高可用性,包括Proxy、MySQL;

  • 擴展性較好,可以擴展爲大規模集羣;

缺點:

  • 數據一致性仍然依賴於原生的mysql半同步複製;

  • 引入ZK,整個系統的邏輯變得更加複雜;

2.4、共享存儲

共享存儲實現了數據庫服務器和存儲設備的解耦,不同數據庫之間的數據同步不再依賴於MySQL的原生複製功能,而是通過磁盤數據同步的手段,來保證數據的一致性。

(1)SAN共享儲存

SAN的概念是允許存儲設備和處理器(服務器)之間建立直接的高速網絡(與LAN相比)連接,通過這種連接實現數據的集中式存儲。常用架構如下:
20170323094159545.jpg

使用共享存儲時,MySQL服務器能夠正常掛載文件系統並操作,如果主庫發生宕機,備庫可以掛載相同的文件系統,保證主庫和備庫使用相同的數據。

優點:

  • 兩節點即可,部署簡單,切換邏輯簡單;

  • 很好的保證數據的強一致性;

  • 不會因爲MySQL的邏輯錯誤發生數據不一致的情況;

缺點:

  • 需要考慮共享存儲的高可用;

  • 價格昂貴;

(2)DRBD磁盤複製

DRBD是一種基於軟件、基於網絡的塊複製存儲解決方案,主要用於對服務器之間的磁盤、分區、邏輯卷等進行數據鏡像,當用戶將數據寫入本地磁盤時,還會將數據發送到網絡中另一臺主機的磁盤上,這樣的本地主機(主節點)與遠程主機(備節點)的數據就可以保證實時同步。常用架構如下:

20170323094219460.jpg
當本地主機出現問題,遠程主機上還保留着一份相同的數據,可以繼續使用,保證了數據的安全。

DRBD是Linux內核模塊實現的快級別的同步複製技術,可以與SAN達到相同的共享存儲效果。

優點:

  • 兩節點即可,部署簡單,切換邏輯簡單;

  • 相比於SAN儲存網絡,價格低廉;

  • 保證數據的強一致性;

缺點:

  • 對IO性能影響較大;

  • 從庫不提供讀操作;

2.5、分佈式協議

分佈式協議可以很好地解決數據一致性問題。比較常見的方案如下:

(1)MySQL Cluster

MySQL Cluster是官方集羣的部署方案,通過使用NDB存儲引擎實時備份冗餘數據,實現數據庫的高可用性和數據一致性。

20170323094231398.jpg

優點:

  • 全部使用官方組件,不依賴於第三方軟件;

  • 可以實現數據的強一致性;

缺點:

  • 國內使用的較少;

  • 配置較複雜,需要使用NDB儲存引擎,與MySQL常規引擎存在一定差異;

  • 至少三節點;

(2)Galera

基於Galera的MySQL高可用集羣, 是多主數據同步的MySQL集羣解決方案,使用簡單,沒有單點故障,可用性高。常見架構如下:

20170323094241555.jpg

優點:

  • 多主寫入,無延遲複製,能保證數據強一致性;

  • 有成熟的社區,有互聯網公司在大規模的使用;

  • 自動故障轉移,自動添加、剔除節點;

缺點:

  • 需要爲原生MySQL節點打wsrep補丁;

  • 只支持innodb儲存引擎;

  • 至少三節點;

(3)Paxos

Paxos算法解決的問題是一個分佈式系統如何就某個值(決議)達成一致。這個算法被認爲是同類算法中最有效的。Paxos與MySQL相結合可以實現在分佈式的MySQL數據的強一致性。常見架構如下:
20170323094250895.jpg

優點:

  • 多主寫入,無延遲複製,能保證數據強一致性;

  • 有成熟理論基礎;

  • 自動故障轉移,自動添加、剔除節點;

缺點:

  • 只支持InnoDB儲存引擎;

  • 至少三節點;

三、總結

隨着人們對數據一致性要求不斷的提高,越來越多的方法被嘗試用來解決分佈式數據一致性的問題,如MySQL自身的優化、MySQL集羣架構的優化、Paxos、Raft、2PC算法的引入等。

而使用分佈式算法用來解決MySQL數據庫數據一致性問題的方法,也越來越被人們所接受,一系列成熟的產品如PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等越來越多的被大規模使用。

隨着官方MySQL Group Replication的GA,使用分佈式協議來解決數據一致性問題已經成爲了主流的方向。期望越來越多優秀的解決方案被提出,MySQL高可用問題也可以被更好的解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章