- Ceph企業級分布式存儲:原理與工程實踐
- 景顯強 龔向宇 黃軍寶
- 1215字
- 2021-11-05 10:18:52
3.4.2 放置組的計算方法
CRUSH會為每個對象計算放置組,但實際上不知道該放置組所在的每個OSD中存儲了多少數據,因此放置組數與OSD數之比可能會影響數據的分布。例如,如果3個副本存儲池中只有一個放置組,而Ceph集群有N個OSD,則Ceph只使用3個OSD來存儲數據。因為CRUSH別無選擇,只能使用唯一的放置組。當有更多的放置組可用時,CRUSH有可能在OSD上均勻分布數據。
OSD與放置組數量的比例調整不能解決數據分布不均問題,因為CRUSH沒有考慮對象的大小。使用Librados接口存儲一些容量相對較小的對象和一些容量非常大的對象可能會導致數據分布不均。例如,在10個OSD上的1000個放置組中平均分配100萬個4KB對象,空間總計4GB,每個OSD上使用400MB的存儲空間。如果將這100萬個對象中的1個對象大小調整為400MB,則存放該對象的放置組對應的3個OSD上的對象數據大小都是800MB,而其余7個OSD上的對象數據大小還是400MB,這就導致數據分布不均勻。Ceph使用RBD時,默認對象的大小為固定值4MB,將一個塊設備以4MB為單位切割,最后寫入底層時都按照4MB的基本單位操作。按照放置組均勻分布,就能保證集群數據在集群內均勻分布。Ceph文件存儲和對象存儲的對象沒有固定4MB的大小限制。
注意 推薦一個OSD中配置的放置組數量為100~200,否則影響計算性能。
以上講述了很多關于放置組數量的問題,那么在一個已知容量規模的Ceph集群中如何計算出合理的放置組數量呢?計算Ceph集群總放置組的公式如下:

舉兩個示例說明:
1)一個Ceph集群有100個OSD(可理解為100塊盤,通常一塊盤啟動1個OSD進程),推薦每個OSD配置100~200個放置組。假設放置組數取值100,集群采用3副本進行數據冗余,那么集群放置組需配置3333(100×100/3)個。注意,此值要取2的冪次方(要取大于3333的2的冪次方),距離3333最近的2的冪次方數為4096,因此集群最大的放置組數為4096。
2)一個Ceph集群有100個OSD(可理解為100塊盤,通常一塊盤啟動1個OSD進程),推薦每個OSD配置100~200個放置組。假設放置組數取值100,采用4+2糾刪碼方式進行數據冗余,那么集群放置組需配置1666(100×100/(4+2))個。注意,此值要取大于1666的2的冪次方數,距離1666最近的2的冪次方數為2048,因此集群最大的放置組數為2048。
知道了集群中一共可以有多少個放置組,那么放置組如何分給存儲池呢?你可以按照集群中存儲池的數量進行數據存儲百分比規劃,然后將放置組數量乘以此百分比算出每個存儲池中的放置組數量。
以上面的例子為例繼續分析,對于100個OSD、3副本集群,最多配置4096個放置組,假設你規劃了兩個存儲池,其中存儲池A預計存儲量占整個集群存儲量的75%,那么存儲池A的放置組數為3072。存儲池B預計存儲量占整個集群存儲量的25%,那么存儲池B的放置組數為1024。通常,存儲池的放置組數要設置為2的冪次方,如果存儲池A的放置組數向上調整,那么集群總的放置組數將大于之前計算的值。如果這樣強制設置放置組,集群會報告too many PGs per OSD,因此要向下調整存儲池A的放置組數,即調整為2048。
Ceph也提供了參數mon_target_pg_per_osd對OSD上放置組數量進行限制。target_size_bytes參數可以對存儲池的容量進行硬限制,即限制存儲池最大使用容量。
- 樂學Windows操作系統
- 蘋果電腦玩全攻略 OS X 10.8 Mountain Lion
- 操作系統基礎與實踐:基于openEuler平臺
- 高性能Linux服務器構建實戰:運維監控、性能調優與集群應用
- 新手易學:系統安裝與重裝
- Docker+Kubernetes應用開發與快速上云
- Windows 7案例教程
- AutoCAD 2014中文版從入門到精通
- 深入淺出Node.js
- 統信UOS應用開發進階教程
- VMware Horizon Mirage Essentials
- Azure Resource Manager Templates Quick Start Guide
- Microsoft Hyper-V Cluster Design
- Less Web Development Essentials
- openEuler操作系統核心技術與行業應用實踐