MySQL主從原理, 高可用架構與高效能架構

weixin_34393428發表於2019-02-21

MySQL主從, 高可用架構與高效能架構

MySQL主從複製

需求: 以前單個伺服器提供服務, 若突然壞了, 需要通過歷史備份將資料備份至新伺服器, 需要花很長時間, 損失較大

主從複製原理,: 基於二進位制日誌(binlog), 記錄所有資料的變化 , 只要某個時間點主從庫資料一致, 後面通過二進位制日誌實現同步

13223341-7b1f733691868d1d.png
Mysql主從結構

方框介紹

binlog: 主庫的二進位制日誌, 記錄主庫資料變化

master.info: 記錄連結主庫的使用者名稱和密碼 , 從庫當前二進位制日誌的資料位置

relay-log.info: 上次執行過的二進位制日誌的資料位置

執行過程介紹:

  1. I/O執行緒拿到master.info裡面存的連結主庫的使用者名稱和密碼與當前二進位制日誌的資料位置
  2. I/O執行緒連結主庫並詢問主庫是否有二進位制日誌的更新, 通過master.info裡面的資料位置與主庫的二進位制比較
  3. 主庫通過dump執行緒讀取二進位制日誌
  4. 若有更新, 則將新資料通過dump執行緒傳送給I/O執行緒
  5. I/O執行緒將新資料寫入TCP/IP快取
  6. I/O執行緒給dump執行緒返回ack表示收到
  7. I/O執行緒將剛拿到的二進位制檔案的最新資料更新master.info裡面存的資料位置, 用於下次再詢問時的比較依據
  8. TCP/IP快取將資料寫入relay-log(中繼日誌)
  9. SQL執行緒讀取上次執行過的二進位制檔案的位置,
  10. 找到最新的日誌檔案並執行
  11. 更新relay-log.info

可以通過中介軟體實現讀寫分離

中介軟體應該實現的功能:

  1. 判斷請求是讀還是寫, 寫的請求發給主庫, 讀的請求發給從庫, 實現讀寫分離
  2. 監控, 若某臺從庫掛了, 不在給其發請求
  3. 讀請求的負載均衡

高可用架構

以上覆制集有一個缺點, 當主庫掛了, 主庫裡的最新資料可能沒有及時同步到從庫,造成資料丟失

比較好的分散式架構中介軟體有MHA , 淘寶基於MHA開發了TMHA, TDDL

這些中介軟體可以監控, 當主庫掛了能實現以下功能

  1. 選主: 選資料最新的一個從庫為主庫
  2. 資料補償: 需要將主庫二進位制日誌檔案獨立出來, 單獨放到一個資料庫

mysql5.7的版本也有一個架構目前還不太成熟

mysql innodb cluster 組成如下:

MGR(實現多臺伺服器提供寫的功能)+mysql router(實現讀寫分離)+mysql shell

mysql的中介軟體理念來自於MongoDB sharding cluster

高效能架構

分片叢集

1. 將表分到不同的伺服器

join不同伺服器的兩張表時, 在伺服器之前擋一箇中介軟體, 將mysql的sql層提到中介軟體中, 下面的伺服器只需要提供表資料, join等sql操作由中介軟體完成

2. 將單表的資料行拆到不同庫

比如一張表有90w行資料, 可以拆到三個伺服器, 每個伺服器放30w條

同樣在伺服器前擋一箇中介軟體, 記錄資料庫的分片策略以及各節點的資訊

各個節點只負責提供資料與存資料

相關文章