http://www.quts.me/ceph-readwrite/
初步的Ceph讀寫流程分析。更詳細的IO路徑整理好了放上來。
Ceph OSD層的數據層級
1.OSD
主要實現 OSD,OSDService ,每個數據節點的守護進程
2.PG
主要實現 PG,ReplicatedPG,ReplicatedBackend,Object的邏輯組織
3.ObjectStore
主要實現 FileStore,KeyValueStore,MemStore,直接操作數據
OSD層和PG層的讀寫
OSD和ObjectStore層,都有一個線程池(tp)和消息隊列(wq),每個線程會從不同消息隊列中取出消息然后執行。
- 下圖是OSD的消息入隊路徑,紅色為主要路徑
- 消息入隊后,線程池OSDService->op_tp(osd->osd_op_tp)從隊列中拿出消息開始工作。詳細流程見下圖
圖中,紅色方框都是主OSD的操作,藍色方框是從OSD的操作。
首先會有主OSD消息,經過一定檢查后,執行到右半部分,提交事務前,先將從OSD的op添加到Apply和Commit的等待隊列,然后發消息給從PG的OSD,最后提交自己的操作到ObjectStore。
從OSD收到消息后,會注冊Apply和Commit事件(在完成事務后執行),然后提交事務到ObjectStore。