Mysql高可用架構方案

Naylor發表於2024-11-11

目錄
  • Mysql 介紹
  • 高可用結構
  • 主從模式
    • 主從模式介紹
    • 主從複製技術
    • 主從模式注意事項
  • MHA(MasterHighAvailability)
    • MHA模式介紹
    • MHA工作流程
  • MMM(Multi-MasterReplicationManagerForMysql)
  • MGR(MysqlGroupReplication)
  • 總結

Mysql 介紹

Mysql是典型的開源關係型資料庫,是許多網站、應用程式、企業軟體產品的首選資料庫。

Mysql特性:

  • 易於使用,功能強大,支援事務、觸發器、儲存過程
  • 管理工具多種多樣且功能豐富
  • 可以作為千萬級資料管理的大型資料庫
  • 採用GPL開源協議,允許自由修改原始碼並應用到商業系統中
  • Mysql的InnoDB事務性儲存引擎符合事務ACID模型,能保證完整、可靠地進行資料地儲存

高可用結構

  • 主從模式

  • MHA

  • MMM

  • MGR

主從模式

主從模式介紹

主從模式是最基本的Mysql高可用架構,一臺伺服器作為Master節點,若干伺服器作為Slave節點。只有Master處理寫資料請求,讀請求可僅由Slave節點處理,也可讓Master、Slave同時處理。

Master和Slave透過主從複製技術保持資料一致,即Master節點將資料同步給Slave節點。

主從模式具備高可用的基礎是主從複製技術。

主從複製技術

  • 當Master 資料發生變更(新增、刪除、修改)時,Master將變更日誌寫入二進位制日誌檔案 binlog
  • Slave啟動單獨執行緒(I/O執行緒)與Master建立網路連線,從Master的binlog中獲取變更日誌
  • Slave的I/O執行緒捕獲到資料變更日誌後,按照順序儲存到中繼日誌檔案 relay log
  • Slave啟動單獨執行緒(Sql執行緒)從relay log 中讀取日誌並執行,使Slave 庫的資料和Master一致

主從模式注意事項

Mysql 5.5之前主從複製為非同步方式,Master 提交事務不需要經過Slave 們的確認,那麼就會有這種極端情況:

  • Slave 讀取Master 的binlog失敗了
  • Slave 處理relay log 失敗了
  • Slave 執行Sql語句失敗了
  • 等......

類似的極端情況將導致資料不一致。所以在Mysql 5.5 主從複製提供了半同步的方式,具體來說就是增加了ACK確認的機制,當Slave接收到binlog 後,會給Master 傳送一條確認訊息,Master在接收到ACK確認訊息之後才會提交事務。半同步方式可以提高資料的一致性,但是Master在寫入資料的時候需要等待Slave的確認,所以效能會有所下降。

複製風暴問題,來考慮這樣一種更加極端的情況,一個Master ,10個Slave , 這種情況下基於主從複製技術,Master在寫入資料前需要同時處理10個Slave的資料複製請求,這種情況下對於Master只能說是不堪重負,如果在加上“半同步機制”,寫入效能將大打折扣,這種情況稱之為複製風暴問題。解決這種問題的方法是,Master 僅處理一個Slave的主從複製,其它的Slave複製由Slave負責。

MHA(MasterHighAvailability)

MHA模式介紹

以主從模式為基礎,接下來就該考慮如下問題了:

  • 如何檢測節點故障
  • master節點故障之後如何重新選舉

MHA就是在解決這兩個問題的,理論上,MHA模式可以在10s-30s內完成主從叢集的自動故障檢測和自動主從切換。

MHA由兩個部分組成:

  • MHA-Manager:負責自動檢測Master是否故障,檢查主從複製狀態,執行自動主從切換等。需要單獨伺服器部署。
  • MHA-Node:負責修復主從資料的差異,通常和Mysql伺服器例項繫結部署。

MHA工作流程

  • Manager 和 Master之間心跳,如果連續4次探測不到心跳,就認為該Master當機了,Master例項繫結一個Node。

  • Manager 分析各個Slave的binlog,選擇一個更接近Master資料的Slave作為備選Master,一個Slave例項分別繫結一個Node。

  • Slave的Node試圖透過SSH訪問Master所在伺服器:

    • 如果可達,Slave的Node獲取Master的binlog資料,若發現Master和Slave資料存在差異,會將差異資料主動複製到Slave,以保持主從資料一致。
    • 如果不可達,Node對比各個Slave的relay log 差異,並做差異資料補齊。
  • Manager將備選Master提升為Master。

MMM(Multi-MasterReplicationManagerForMysql)

MMM模式簡單來說就是引入虛擬IP(vip)技術,這種架構下,一個叢集中有兩個Master和若干個Slave,當其中一個Master不可用的時候,MMM會指示vip切換到另外一個Master上面,同時會向所有的Slave傳送更換Master的訊息,之後主從複製將切換到新的Master。

此方案比較古老,不支援Mysql GTID ,並且社群活躍度不夠,目前處於無人維護的狀態。

MGR(MysqlGroupReplication)

MGR,Mysql組複製模式是Mysql5.7.17版本推出的高可用解決方案,具備如下特性:

  • 一致性高:資料複製基於分散式共識演算法Paxos,可以保證多個節點資料的一致性
  • 容錯性高:只要不是超過一半的節點當機,就可以繼續提供服務
  • 靈活性強:MGR支援單主模式和多主模式,單主模式下如果Master故障,Slave們會重新選舉一個新的Master,多主模式下每一個Mysql節點都可以同時處理寫請求

MGR要求至少由3個Mysql節點組成一個複製組,即一主兩從,一個事務必須經過複製組內超過半數節點透過後才能提交。

如果在不同的Mysql節點上執行不同的寫操作發生了事務衝突,那麼先提交的事務先執行,後提交的事務被回滾。在多主模式下,由於每個Mysql節點都可以執行寫請求,在寫請求高併發的場景下發生事務衝突的機率會非常大,會造成大量事務回滾。

在單主模式下,MGR會自動為複製組選擇一個Master負責寫請求,如果複製組內超過一半節點與Master通訊失敗,就認為Master當機了,這時會根據各個節點的權重和ID標識重新選主。

MGR更加適合一致性強,寫併發量不大的場景下使用。

總結

本文闡述了Mysql高可用架構方案,介紹了 主從模式,MHA模式,MMM模式,MGR模式 方案的實現方式,沒有哪個方案是完美的,開發人員在選擇何種方案應用到專案中也沒有標準答案,合適的才是最好的。

相關文章