Placement Group
PG_NUM
創建新池時,
ceph osd pool create {pool-name} pg_num
必須選擇 的值,因爲它不能(當前)自動計算。下面是一些常用的值:pg_num
- 少於 5 個 OSD 設置爲 128
pg_num
- 5 到 10 個 OSD 設置爲 512
pg_num
- 10 到 50 個 OSD 設置爲 1024
pg_num
- 如果您有 50 多個 OSD,您需要了解權衡以及如何自己計算值
pg_num
- 要自己計算值,請使用pgcalc 工具的幫助
pg_num
隨着 OSD 數量的增加,爲 pg_num 選擇正確的值變得更加重要,因爲它對羣集的行爲以及出錯時數據的持久性(即災難性事件導致數據丟失的概率)有重要影響。
選擇放置組的數量
如果您擁有超過 50 個 OSD,我們建議每個 OSD 大約 50-100 個放置組,以平衡資源使用情況、數據持久性和分佈。如果您擁有少於 50 個 OSD,則最好選擇上述預選。對於單個對象池,可以使用以下公式獲取基線:
(OSDs * 100)
Total PGs = ------------
pool size
其中池大小是複製池的副本數或擦除編碼池的 K+M 總和(由 ceph osd 擦除代碼配置文件獲取返回)。
然後,您應該檢查結果是否有意義的方式,你設計你的Ceph集羣,以最大限度地提高數據持久性,對象分佈和儘量減少資源使用。
結果應始終四舍五入到最接近的功率爲 2。
只有兩個電源才能均勻地平衡放置組中的對象數。其他值將導致數據在 OSD 中的分佈不均勻。它們的使用應限於逐步從一個兩個權力到另一個權力。
例如,對於具有 200 個 OSD 和池大小爲 3 個副本的羣集,您將估計您的 PG 數量,如下所示:
(200 * 100)
----------- = 6667. Nearest power of 2: 8192
3
使用多個數據池存儲對象時,您需要確保平衡每個池的放置組數與每個 OSD 的放置組數,以便得出合理的放置組總數,這些放置組提供合理的每個 OSD 方差,而不會對系統資源徵稅,或使對等過程過於慢。
例如,一個 10 個池的羣集,每個池在 10 個 OSD 上具有 512 個放置組,共有 5,120 個放置組分佈在 10 個 OSD 上,即每個 OSD 有 512 個放置組。這不會使用太多的資源。但是,如果創建 1,000 個池,每個池有 512 個放置組,則 OSD 將處理每個放置組 50,000 個,並且需要大量資源和時間進行對等。
您可能會發現PGCalc 工具很有幫助。
設置放置組數
若要設置池中放置組的數量,必須指定創建池時放置組的數量。有關詳細信息,請參閱創建池。即使在創建池後,您也可以更改放置組的數量:
ceph osd pool set {pool-name} pg_num {pg_num}
增加放置組數後,還必須增加放置組數 (),然後羣集才能重新平衡。這將是將考慮由 CRUSH 算法放置的放置組數。增加拆分放置組,但數據不會遷移到較新的放置組,直到放置組放置,即。 增加。應等於 。要增加放置組的數量,請執行以下操作:pgp_num``pgp_num``pg_num``pgp_num``pgp_num``pg_num
ceph osd pool set {pool-name} pgp_num {pgp_num}
減少 PG 數量時,會自動進行調整。pgp_num