一、Ceph RADOS組成
1、OSDs,負責存儲所有的Objects數據;
2、Monitor,保存集羣中所有OSDs狀態信息,以及負責管理Cluster Map,其中Cluster Map是整個RADOS系統的關鍵數據結構,管理集羣中的所有成員、關係、屬性等信息以及數據的分發。多Monitor時,使用paxos算法來選擇leader,避免單點故障;
二、RADOS 系統邏輯結構
三、RADOS設計思想
基於計算的對象尋址機制,流程圖如下:
尋址流程解讀:(映射、映射、再映射......)
(1)FIle---->object映射:將用戶態的file,映射成RADOS能夠處理的object,實質以統一大小進行切塊,並分配id,便於管理以及方便對多個object並行處理;
(2)Object--->PG映射:利用靜態哈希函數得到objectID的僞隨機值,再“位與”mask上使得每個object獲取屬於自己的PG;
(3)PG--->OSD映射:將pg映射到數據的shij實際存儲單元OSD,RADOS利用CRUSH算法,由pgid得到一組n個OSD;再由OSD daemon執行映射到本地的object在本地系統中存儲、訪問、雲數據維護等操作,
特別注意:該次映射功能性特別強;直接受到cluster map以及rule的影響,只有在cluster map和存儲策略均不發生改變時,PG和OSD映射關係才固定的;
計算PG的ID示例:
Client輸入pool ID和對象ID(如 pool=‘livepool’,object-id=‘join’)
CRUSH獲取對象IDbibi並對其hash
CRUSH計算OSD個數hash取模獲得PG的ID(如0 * 58)
CRUSH獲取已命名pool的ID(如livepool=4)
CRUSH預先考慮到pool ID相同的PG ID(如4.0 * 58)
數據操作流程之寫入流程:
數據操作流程之讀流程:
四、CRUSH
(1)一致性hash
(2)CRUSH核心:PG and Crushmap
POOL概述:
存儲對象的邏輯分區:所有權和訪問對象
對象副本的數目
pg的數目
crush rule set的使用
pg、pool、osd關係圖