Posted on 2013-10-24 01:03
whspecial 閱讀(1254)
評論(0) 編輯 收藏 引用 所屬分類:
KFS分析
KFS的元數據持久化是依賴checkpoint和operation log結合來工作的,其中checkpoint顧名思義保存的是某個點內存的狀態(tài),operation log記錄的是對元數據修改的操作日志。
使用checkpoint+log的設計
(1) 元數據信息必須要持久化,否則掉電或者人工重啟之后該信息丟失
(2) 便于快速重啟,可以從最近的一個cp中快速構建內存狀態(tài),加上該cp之后的log就可以完整地構建內存
讀寫checkpoint和log的過程
Metaserver啟動時的內存構建:
在Startup.cc調用rebuild函數
(1) 如果之前已經有了checkpoint,從checkpoint里重建內存樹,否則新建一棵內存樹
(2) 在內存中replay該checkpoint之后的所有operation log
MetaServer運行時寫入新的checkpoint:
logcompactor_main.cc的main函數調用,應該是以調用另一個進程的方式來執(zhí)行,猜想是Metaserver進程會定時調用該進程
(1) 根據舊的checkpoint在內存中生成狀態(tài)
(2) 在內存中replay之后的op log
(3) 將此時的內存狀態(tài)寫入新的checkpoint
MetaServer運行時寫入新的log:
由logger.cc來寫入新log,看了代碼應該是每次修改了元信息的操作,都會將這條op log寫入磁盤,雖然性能不高,但是比較可靠(之前也自己寫過日志庫,使用的是兩個buffer交換寫入,這樣比較高效一些)