MySQL高可用架構對比

MMM與MHA以及MGR,高可用架構都有以下的共同點:數據庫

  • 對主從複製集羣中的Master節點進行監控
  • 自動的對Master進行遷移,經過VIP。
  • 從新配置集羣中的其它slave對新的Master進行同步

MMM

須要兩個Master,同一時間只有一個Master對外提供服務,能夠說是主備模式。bash

image-20190402160607794

須要基礎資源:服務器

資源 數量 說明
主DB 2 用於主備模式的主主複製
從DB 0~N臺 能夠根據須要配置N臺從服務器
IP地址 2n+1 N爲MySQL服務器的數量
監控用戶 1 用戶監控數據庫狀態的MySQL用戶(replication)
代理用戶 1 用於MMM代理端改變read_only狀態

故障轉移步驟:架構

  • Slave服務器上的操做
    • 完成原主上已經複製的日誌恢復
    • 使用Change Master命令配置新主
  • 主服務器上操做
    • 設置read_only關閉
    • 遷移VIP到新主服務器

優勢:異步

  • 提供了讀寫VIP的配置,試讀寫請求均可以達到高可用
  • 工具包相對比較完善,不須要額外的開發腳本
  • 完成故障轉移以後能夠對MySQL集羣進行高可用監控

缺點:工具

  • 故障簡單粗暴,容易丟失事務,建議採用半同步複製方式,減小失敗的機率
  • 目前MMM社區已經缺乏維護,不支持基於GTID的複製

適用場景:spa

  • 讀寫都須要高可用的
  • 基於日誌點的複製方式

MHA

image-20190402162734119

須要資源:插件

資源 數量 說明
主DB 2 用於主備模式的主主複製
從DB 2~N臺 能夠根據須要配置N臺從服務器
IP地址 n+2 N爲MySQL服務器的數量
監控用戶 1 用戶監控數據庫狀態的MySQL用戶(replication)
複製用戶 1 用於配置MySQL複製的用戶

MHA採用的是從slave中選出Master,故障轉移:3d

  • 從服務器:
    • 選舉具備最新更新的slave
    • 嘗試從宕機的master中保存二進制日誌
    • 應用差別的中繼日誌到其它的slave
    • 應用從master保存的二進制日誌
    • 提高選舉的slave爲master
    • 配置其它的slave向新的master同步

優勢:代理

  • MHA除了支持日誌點的複製還支持GTID的方式
  • 同MMM相比,MHA會嘗試從舊的Master中恢復舊的二進制日誌,只是未必每次都能成功。若是但願更少的數據丟失場景,建議使用MHA架構。

缺點:

MHA須要自行開發VIP轉移腳本。

MHA只監控Master的狀態,未監控Slave的狀態

MGR

MGR是基於現有的MySQL架構實現的複製插件,能夠實現多個主對數據進行修改,使用paxos協議複製,不一樣於異步複製的多Master複製集羣。

支持多主模式,但官方推薦單主模式:

  • 多主模式下,客戶端能夠隨機向MySQL節點寫入數據
  • 單主模式下,MGR集羣會選出primary節點負責寫請求,primary節點與其它節點均可以進行讀請求處理.

image-20190402165047454

// 查看MGR的組員
select * from performance_schema.replication_group_members;
// 查看MGR的狀態
select * from performance_schema.replication_group_member_stats;
// 查看MGR的一些變量
show variables like 'group%';
// 查看服務器是否只讀
show variables like 'read_only%';
複製代碼

優勢:

  • 基本無延遲,延遲比異步的小不少
  • 支持多寫模式,可是目前還不是很成熟
  • 數據的強一致性,能夠保證數據事務不丟失

缺點:

  • 僅支持innodb
  • 只能用在GTID模式下,且日誌格式爲row格式

適用的業務場景:

  • 對主從延遲比較敏感
  • 但願對對寫服務提供高可用,又不想安裝第三方軟件
  • 數據強一致的場景

讀寫負載大問題

讀負載大:

  • 增長slave

  • 加中間層(MyCat,ProxySQL,Maxscale)

  • 讀寫分離

關於寫負載大:

  • 分庫分表
  • 增長中間層

最後

參考慕課網課程,s.imooc.com/S8KFBvs

相關文章
相關標籤/搜索