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