聊聊分布式 SQL 数据库Doris(二)
Doris中,Leader節(jié)點(diǎn)與非Leader節(jié)點(diǎn)和Observer節(jié)點(diǎn)之間的元數(shù)據(jù)高可用和一致性,是通過bdbje(全稱:Oracle Berkeley DB Java Edition)的一致性和高可用實(shí)現(xiàn)的。
元數(shù)據(jù)與同步流程
元數(shù)據(jù)主要存儲四類數(shù)據(jù):
- 用戶數(shù)據(jù)信息. 包括數(shù)據(jù)庫, 表的schema, 分片信息等
- 各類作業(yè)信息. 如導(dǎo)入作業(yè), clone作業(yè), schemaChange作業(yè)等。
- 用戶及權(quán)限信息.
- 集群及節(jié)點(diǎn)信息.
元數(shù)據(jù)同步圖:
元數(shù)據(jù)流轉(zhuǎn)如下:
-
leader寫入元數(shù)據(jù)
寫操作在修改leader的內(nèi)存后,序列化為log,按照key-value格式寫入到bdbje. 其中 key 為連續(xù)的整型數(shù)字,全局唯一、遞增,作為 log id;value 即為序列化后的操作日志,由2部分組成。OperationType為操作類型,如建庫操作、建表操作等。Writable Entity為序列化后的操作具體內(nèi)容,通過反序列化該值,可以從鏡像上回放元數(shù)據(jù)操作。
-
集群節(jié)點(diǎn)同步元數(shù)據(jù)
日志寫入bdbje后,bdbje會根據(jù)策略(寫多數(shù)/全寫), 將日志復(fù)制到FE其他的follower節(jié)點(diǎn)。FE節(jié)點(diǎn)通過對bdbje中元數(shù)據(jù)日志的reply, 修改自身的元數(shù)據(jù)內(nèi)存鏡像,完成與leader節(jié)點(diǎn)的元數(shù)據(jù)同步。
-
元數(shù)據(jù)checkpoint持久化
leader 節(jié)點(diǎn)的日志條數(shù)達(dá)到閾值(默認(rèn) 10w 條)并且滿足checkpoint線程執(zhí)行周期(默認(rèn)六十秒)。checkpoint 會讀取已有的 image 文件,和其之后的日志,重新在內(nèi)存中回放出一份新的元數(shù)據(jù)鏡像副本。然后將該副本寫入到磁盤,形成一個(gè)新的 image。之所以是重新生成一份鏡像副本,而不是將已有鏡像寫成 image,主要是考慮寫 image 加讀鎖期間,會阻塞寫操作。所以每次 checkpoint 會占用雙倍內(nèi)存空間。
-
image 文件生成后,leader 節(jié)點(diǎn)會通知其他 non-leader 節(jié)點(diǎn)新的 image 已生成。non-leader 主動通過 http 拉取最新的 image 文件,來更換本地的舊文件.
-
bdbje 中的日志,在 image 做完后,會定期刪除舊的日志
-
刪除舊的磁盤元數(shù)據(jù)鏡像
總結(jié)
Leader節(jié)點(diǎn)修改內(nèi)存元數(shù)據(jù)后,元數(shù)據(jù)日志首先寫入bdbje,達(dá)到閾值后,bdbje形成一個(gè)新的DB,然后將新的DB內(nèi)的日志,在舊的image上回放,生成一個(gè)新的image,然后刪除bdbje中已經(jīng)被集群節(jié)點(diǎn)全部同步的舊的元數(shù)據(jù)日志。這樣周而復(fù)始。保證bdbje中的數(shù)據(jù)不會無限制得增長,也保證了image中始終保存著較新的元數(shù)據(jù)。同時(shí),其他非leader節(jié)點(diǎn),也訪問bdbje,將bdbje中的新寫入的元數(shù)據(jù)日志,在自己內(nèi)存中的元數(shù)據(jù)上回放。
Doris的元數(shù)據(jù)存儲是 memory -> bdbje -> checkpoint(image)。
為什么同時(shí)需要 bdbje 和 image 鏡像呢?
-
高性能和實(shí)時(shí)查詢: bdbje 作為嵌入式數(shù)據(jù)庫提供了高性能的元數(shù)據(jù)訪問,適用于實(shí)時(shí)的查詢和操作。它通常保存在內(nèi)存中,可以快速地提供元數(shù)據(jù)信息。
-
數(shù)據(jù)恢復(fù)和持久性: image 鏡像則用于實(shí)現(xiàn)元數(shù)據(jù)的持久化,以便在系統(tǒng)重啟或發(fā)生故障時(shí),能夠使用鏡像還原元數(shù)據(jù)。這有助于確保系統(tǒng)的可靠性。
參考:
Apache Doris元數(shù)據(jù)管理
元數(shù)據(jù)設(shè)計(jì)文檔
元數(shù)據(jù)運(yùn)維
總結(jié)
以上是生活随笔為你收集整理的聊聊分布式 SQL 数据库Doris(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三星二季度营收457亿美元同比下滑5.6
- 下一篇: 三天暴涨1480%!,破产的"胶卷大王"