MySQL 主從原理,-高可用架構(gòu)與高性能架構(gòu)

MySQL主從, 高可用架構(gòu)與高性能架構(gòu)

MySQL主從復(fù)制

需求: 以前單個(gè)服務(wù)器提供服務(wù), 若突然壞了, 需要通過歷史備份將數(shù)據(jù)備份至新服務(wù)器, 需要花很長時(shí)間, 損失較大

主從復(fù)制原理,: 基于二進(jìn)制日志(binlog), 記錄所有數(shù)據(jù)的變化 , 只要某個(gè)時(shí)間點(diǎn)主從庫數(shù)據(jù)一致, 后面通過二進(jìn)制日志實(shí)現(xiàn)同步

Mysql主從結(jié)構(gòu)

方框介紹

binlog: 主庫的二進(jìn)制日志, 記錄主庫數(shù)據(jù)變化

master.info: 記錄鏈接主庫的用戶名和密碼 , 從庫當(dāng)前二進(jìn)制日志的數(shù)據(jù)位置

relay-log.info: 上次運(yùn)行過的二進(jìn)制日志的數(shù)據(jù)位置

執(zhí)行過程介紹:

  1. I/O線程拿到master.info里面存的鏈接主庫的用戶名和密碼與當(dāng)前二進(jìn)制日志的數(shù)據(jù)位置
  2. I/O線程鏈接主庫并詢問主庫是否有二進(jìn)制日志的更新, 通過master.info里面的數(shù)據(jù)位置與主庫的二進(jìn)制比較
  3. 主庫通過dump線程讀取二進(jìn)制日志
  4. 若有更新, 則將新數(shù)據(jù)通過dump線程發(fā)送給I/O線程
  5. I/O線程將新數(shù)據(jù)寫入TCP/IP緩存
  6. I/O線程給dump線程返回ack表示收到
  7. I/O線程將剛拿到的二進(jìn)制文件的最新數(shù)據(jù)更新master.info里面存的數(shù)據(jù)位置, 用于下次再詢問時(shí)的比較依據(jù)
  8. TCP/IP緩存將數(shù)據(jù)寫入relay-log(中繼日志)
  9. SQL線程讀取上次執(zhí)行過的二進(jìn)制文件的位置,
  10. 找到最新的日志文件并執(zhí)行
  11. 更新relay-log.info

可以通過中間件實(shí)現(xiàn)讀寫分離

中間件應(yīng)該實(shí)現(xiàn)的功能:

  1. 判斷請求是讀還是寫, 寫的請求發(fā)給主庫, 讀的請求發(fā)給從庫, 實(shí)現(xiàn)讀寫分離
  2. 監(jiān)控, 若某臺(tái)從庫掛了, 不在給其發(fā)請求
  3. 讀請求的負(fù)載均衡

高可用架構(gòu)

以上復(fù)制集有一個(gè)缺點(diǎn), 當(dāng)主庫掛了, 主庫里的最新數(shù)據(jù)可能沒有及時(shí)同步到從庫,造成數(shù)據(jù)丟失

比較好的分布式架構(gòu)中間件有MHA , 淘寶基于MHA開發(fā)了TMHA, TDDL

這些中間件可以監(jiān)控, 當(dāng)主庫掛了能實(shí)現(xiàn)以下功能

  1. 選主: 選數(shù)據(jù)最新的一個(gè)從庫為主庫
  2. 數(shù)據(jù)補(bǔ)償: 需要將主庫二進(jìn)制日志文件獨(dú)立出來, 單獨(dú)放到一個(gè)數(shù)據(jù)庫

mysql5.7的版本也有一個(gè)架構(gòu)目前還不太成熟

mysql innodb cluster 組成如下:

MGR(實(shí)現(xiàn)多臺(tái)服務(wù)器提供寫的功能)+mysql router(實(shí)現(xiàn)讀寫分離)+mysql shell

mysql的中間件理念來自于MongoDB sharding cluster

高性能架構(gòu)

分片集群

1. 將表分到不同的服務(wù)器

join不同服務(wù)器的兩張表時(shí), 在服務(wù)器之前擋一個(gè)中間件, 將mysql的sql層提到中間件中, 下面的服務(wù)器只需要提供表數(shù)據(jù), join等sql操作由中間件完成

2. 將單表的數(shù)據(jù)行拆到不同庫

比如一張表有90w行數(shù)據(jù), 可以拆到三個(gè)服務(wù)器, 每個(gè)服務(wù)器放30w條

同樣在服務(wù)器前擋一個(gè)中間件, 記錄數(shù)據(jù)庫的分片策略以及各節(jié)點(diǎn)的信息

各個(gè)節(jié)點(diǎn)只負(fù)責(zé)提供數(shù)據(jù)與存數(shù)據(jù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MySQL主從, 高可用架構(gòu)與高性能架構(gòu) MySQL主從復(fù)制 需求: 以前單個(gè)服務(wù)器提供服務(wù), 若突然壞了, 需要...
    火雞不肥閱讀 394評論 0 1
  • MySQL主從, 高可用架構(gòu)與高性能架構(gòu) MySQL主從復(fù)制 需求: 以前單個(gè)服務(wù)器提供服務(wù), 若突然壞了, 需要...
    aq_wzj閱讀 1,426評論 7 5
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,838評論 0 30
  • 雖然不能恢復(fù)百分百,至少能將損失降到最低。 有個(gè)問題測試: 主從同步時(shí),主庫網(wǎng)絡(luò)斷開,binlog dump線程...
    kun_zhang閱讀 3,184評論 0 6
  • 今天上課時(shí)會(huì)計(jì)孫琳老師跟我們講,不知道誰貸款然后把她的手機(jī)號留給人家了,她一晚上接到十幾個(gè)恐嚇電話,嚴(yán)重的打...
    晨呀閱讀 161評論 0 0

友情鏈接更多精彩內(nèi)容