mysql 高可用

高可用的設計原理:linux

  • 要作到數據不丟,就必須要持久化
  • 要作到服務高可用,就必須要有備用(複本),不管是應用結點仍是數據結點
  • 要作到複製,就會有數據一致性的問題。
  • 咱們不可能作到100%的高可用,也就是說,咱們能作到幾個9個的SLA。

一致性sql

1)Weak 弱一致性:當你寫入一個新值後,讀操做在數據副本上可能讀出來,也可能讀不出來。好比:某些cache系統,網絡遊戲其它玩家的數據和你沒什麼關係,VOIP這樣的系統,或是百度搜索引擎(呵呵)。服務器

2)Eventually 最終一致性:當你寫入一個新值後,有可能讀不出來,但在某個時間窗口以後保證最終能讀出來。好比:DNS,電子郵件、Amazon S3,Google搜索引擎這樣的系統。網絡

3)Strong 強一致性:新的數據一旦寫入,在任意副本任意時刻都能讀到新值。好比:文件系統,RDBMS,Azure Table都是強一致性的。架構

 

方案:異步

1. MySQL Replication(半同步->異步同步)搜索引擎

  • master-slave
  • master-slave-slave
  • 優勢:設計

    1. 架構比較簡單,使用原生半同步複製做爲數據同步的依據;
    2. 雙節點,沒有主機宕機後的選主問題,直接切換便可;
    3. 雙節點,需求資源少,部署簡單;

    缺點:3d

    1. 徹底依賴於半同步複製,若是半同步複製退化爲異步複製,數據一致性沒法獲得保證;
    2. 須要額外考慮haproxy、keepalived的高可用機制。

2. Mysql Clusterblog

優勢:

  1. 所有使用官方組件,不依賴於第三方軟件;
  2. 能夠實現數據的強一致性;

缺點:

  1. 國內使用的較少;
  2. 配置較複雜,須要使用NDB儲存引擎,與MySQL常規引擎存在必定差別;
  3. 至少三節點;

共享存儲SAN

優勢:

  1. 兩節點便可,部署簡單,切換邏輯簡單;
  2. 很好的保證數據的強一致性;
  3. 不會由於MySQL的邏輯錯誤發生數據不一致的狀況;

缺點:

    1. 須要考慮共享存儲的高可用;
    2. 價格昂貴;

DRBD

是一個以linux內核模塊方式實現的塊級別同步複製技術。它經過網卡將主服務器的每一個塊複製到另一個服務器塊設備上,並在主設備提交塊以前記錄下來。

 

MySQL Fabric

簡單來講就是數據分片下的M/S的讀寫分離模式。這個方案的的可用性能夠達到99%