一個分布式 MySQL Binlog 存儲系統(tǒng)的架構(gòu)設(shè)計_第1頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一個分布式 mysql binlog 存儲系統(tǒng)的架構(gòu)設(shè)計1. kingbus簡介1.1 kingbus是什么?kingbus是一個基于raft強(qiáng)全都協(xié)議實(shí)現(xiàn)的分布式mysql binlog 存儲系統(tǒng)。它能夠充當(dāng)一個mysql slave從真正的master上同步binlog,并存儲在分布式集群中。同時又充當(dāng)一個mysql master將集群中的binlog 同步給其他slave。 kingbus具有如下特性:兼容mysql 復(fù)制協(xié)議,通過gtid方式同步master上的binlog,同時支持slave通過gtid方式從kingbus拉取binlog??绲赜驍?shù)據(jù)復(fù)制,kingbus通過raft協(xié)

2、議支持跨地域間的數(shù)據(jù)復(fù)制。寫入到集群的binlog數(shù)據(jù)在多個節(jié)點(diǎn)間保證強(qiáng)全都,并保證binlog挨次與master上徹低全都。高可用,因?yàn)閗ingbus是構(gòu)建在raft強(qiáng)全都協(xié)議之上,能夠?qū)崿F(xiàn)集群中過半數(shù)節(jié)點(diǎn)存活的狀況下,囫圇binlog拉取和推送服務(wù)高可用。1.2 kingbus能解決什么問題?kingbus能降低master的網(wǎng)絡(luò)傳輸流量。在一主多從的復(fù)制拓?fù)渲?,master需要發(fā)送binlog到各個slave,假如slave過多的話,網(wǎng)絡(luò)流量很有可能達(dá)到master的網(wǎng)卡上限。例如在master執(zhí)行delete大表或者online ddl等操作,都有可能造成眨眼生成大量的binlog e

3、vent,假如master下面掛10臺slave的話,master上的網(wǎng)卡流量就會放大10倍。假如master用法千兆網(wǎng)卡,產(chǎn)生了10mb/s以上的流量就有可能將其網(wǎng)卡跑滿。通過kingbus銜接master的方式,可以將slave簇?fù)淼蕉嗯_機(jī)器上,從而均衡傳輸流量。簡化master failover流程,只需將銜接在kingbus上的一臺slave提升為master,并將kingbus重新指向新的master,其他slave依然銜接在kingbus上,復(fù)制拓?fù)浔3植蛔?。?jié)約master存儲binlog文件的空間。普通mysql上都是較為昂貴的ssd,假如binlog文件占用空間較多,就使得m

4、ysql存儲的數(shù)據(jù)不得不降低??梢酝ㄟ^將binlog都存儲到kingbus中,從而降低master上binlog文件的存儲數(shù)量支持異構(gòu)復(fù)制。通過阿里巴巴開源的canal銜接到kingbus,kingbus綿綿不斷推送binlog給canal,canal接收完binlog再推送給kafka消息隊列,終于存入hbase里,業(yè)務(wù)部門通過hive挺直寫sql的方式來實(shí)現(xiàn)業(yè)務(wù)的實(shí)時分析。2.kingbus總體架構(gòu)kingbus整體架構(gòu)如下圖所示:storage負(fù)責(zé)存儲raft log entry和metadata,在kingbus中,將raft log和mysql binlog融合在一起了,通過不同的頭

5、部信息區(qū)別,raft log的數(shù)據(jù)部分就是binlog event,這樣就不需要分開存儲兩類log,節(jié)約存儲空間。由于kingbus需要存儲一些元信息,例如raft 節(jié)點(diǎn)投票信息、某些特別binlog event的詳細(xì)內(nèi)容(format_description_event)。raft復(fù)制kingbus集群的lead選舉、日志復(fù)制等功能,用法的是etcd raft library。binlog syncer,只運(yùn)行在raft集群的lead節(jié)點(diǎn)上,囫圇集群惟獨(dú)一個syncer。syncer偽裝成一個slave,向master建立主從復(fù)制銜接,master會按照syncer發(fā)送的executed_g

6、tid_set過濾syncer已經(jīng)接受的binlog event,只發(fā)送syncer沒有接收過的binlog event,這套復(fù)制協(xié)議徹低兼容mysql 主從復(fù)制機(jī)制。syncer收到binlog event后,會按照binlog event類型做一些處理,然后將binlog event封裝成一個消息提交到raft 集群中。通過raft算法,這個binlog event就可以在多個節(jié)點(diǎn)存儲,并達(dá)到強(qiáng)全都的效果。binlog server,就是一個實(shí)現(xiàn)了復(fù)制協(xié)議的master,真正的slave可以銜接到binlog server監(jiān)聽的端口,binlog server會將binlog event發(fā)

7、送給slave,囫圇發(fā)送binlog event的過程參照mysql 復(fù)制協(xié)議實(shí)現(xiàn)。當(dāng)沒有binlog event發(fā)送給slave時,binlog server會定期發(fā)送heartbeat event給slave,?;顝?fù)制銜接。api server,負(fù)責(zé)囫圇kingbus集群的管理,包括以下內(nèi)容:raft cluster membership操作,查看集群狀態(tài),添加一個節(jié)點(diǎn)、移除一個節(jié)點(diǎn),更新節(jié)點(diǎn)信息等binlog syncer相關(guān)操作,啟動一個binlog syncer,停止binlog syncer,查看binlog syncer狀態(tài)。binlog server相關(guān)操作,啟動一個binlo

8、g server,停止binlog server,查看binlog server狀態(tài)。 server層的各種異樣,都不會影響到raft層,server可以理解為一種插件,按需啟動和停止。以后擴(kuò)展kingbus時,只需要實(shí)現(xiàn)相關(guān)規(guī)律的server就行。例照實(shí)現(xiàn)一個kafka協(xié)議的server,那么就可以通過kafka client消費(fèi)kingbus中的消息。3.kingbus核心實(shí)現(xiàn)3.1 storage的核心實(shí)現(xiàn)storage中有兩種日志形態(tài),一種是raft日志(以下稱為raft log),由raft算法產(chǎn)生和用法,另一種是用戶形態(tài)的log(也就是mysql binlog event)。sto

9、rage在設(shè)計中,將兩種log形態(tài)組合成一個log entry。只是通過不同的頭部信息來區(qū)別。storage由數(shù)據(jù)文件和索引文件組成,如下圖所示:segment固定大小(1gb),只能追加寫入,名字為first_raft_index-last_raft_index,表示該segment的raft index范圍。惟獨(dú)最后一個segment可寫,其文件名為first_raft_index-inprogress,其他segment只讀。只讀的segment和對應(yīng)的index file都是通過mmap方式寫入和讀取。最后一個segment的index 內(nèi)容同時存儲在磁盤和內(nèi)存。讀取索引是只需要在內(nèi)存

10、中讀取。3.2 etcd raft庫的用法etcd raft library在處理已經(jīng)apply的日志、committed entries等內(nèi)容時,是單線程處理的。詳細(xì)函數(shù)參考鏈接,這個函數(shù)處理時光要確保盡可能短,假如處理時光超過raft 選舉時光,會造成集群重新選舉。這一點(diǎn)需要特殊注重。3.3 binlog syncer的核心實(shí)現(xiàn)binlog syncer主要工作就是:拉取binlog event解析并處理binlog event提交binlog event到raft 集群。 很顯然可以通過pipeline機(jī)制來提個囫圇過程的處理速度,每個階段kingbus都用法單獨(dú)的goroutine來處理,通過管道來連接不同階段。 因?yàn)閎inlog syncer是根據(jù)binlog event一個一個接收的,syncer并不能保證事務(wù)完整性,有可能在syncer掛了后,需要重新銜接master,這時候最后一個事務(wù)有可能不完整,binlog syncer需要有發(fā)覺事務(wù)完整性的能力,kingbus實(shí)現(xiàn)了事務(wù)完整性解析的功能,徹低參考mysql源碼實(shí)現(xiàn)。3.4 binlog server的核心實(shí)現(xiàn)binlog server實(shí)現(xiàn)了一個master的功能,slave與binlog server建立復(fù)制銜接時,slave會發(fā)送相關(guān)指令,binlog server需要響應(yīng)這些指令。終于發(fā)送binlog e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論