(4)CEPH PG數量設置

PG

當Ceph 集羣接收到數據存儲的請求時,它被分散到各個 PG 中。然而, CRUSH 首先將數據分解成 一組對象,然後根據對象名稱、複製級別和系統中總的 PG 數目等信息執行散列操作,再將結果生成 PG ID。 PG 是一組對象的邏輯集合,通過複製它到不同的 OSD 上來提供存儲系統的可靠性。 根據 Ceph 池的複製級別,每個 PG 的數據會被複制並分發到 Ceph集羣的多個 OSD上。 可以將 PG 看成一個邏輯容器,這個容器包含多個對象,同時這個邏輯容器被映射到多個 OSD上。 PG 是保障 Ceph 存儲系統的可伸縮性和性能必不可少的部分。
(4)CEPH  PG數量設置

沒有 PG ,在成千上萬個 OSD 上管理和跟蹤數以百萬計的對象的複製和傳播是相當困難的。 沒有 PG 情況下管理這些對象所消耗的計算資源也是噩夢。 與獨立的管理每一個對象不同的是,我們的系統只管理包含大量對象的 PG。 這使得 Ceph 成爲一個更易於管理和更易上手的系統。 每個 PG 需要一定的系統資源(如 CPU 和內存),因爲每個 PG 需要管理多個對象 。因此應該精心計算集羣中 PG 的數量 。一般來說,增加集羣 PG 的數量能夠降低每個 OSD 上的負載,但是應該以規範的方式進行增加, 建議每個 OSD上放置 50 - 100個PG。 這是爲了避免 PG 佔用 OSD 節點太多的資源。 隨着存儲數據的增加,同樣需要根據集羣規模來調整 PG數, 當在集羣中添加或者刪除一個設備的時候,大部分的 PG 保持不變;CRUSH 管理 PG 在整個集羣內部的分佈。PGP 是用於定位的 PG 的總數,它應該等於 PG 的總數。

計算 PG數

        計算正確的 PG 數是構建一個企業級的 Ceph 存儲集羣中至關重要的一步。 因爲 PG在一定程度上能夠提高或者影響存儲性能。

計算 Ceph 集羣中 PG 數的公式如下:
PG 總數= (OSD 總數 100) /最大副本數
結果必須舍入到最接近2的N 次幕的值。比如:如果 Ceph 集羣有 160個 OSD 且副本數是3 ,這樣根據公式計算得到的 PG 總數是 5333.3 ,因此舍入這個值到最接近的2的N次幕的結果就是 8192個 PG。我們還應該計算 Ceph 集羣中每一個池中的 PG 總數 計算公式如下:
PG 總數= ((OSD 總數 100) /最大副本數) /池數

同樣使用前面的例子: OSD 總數是 160 ,副本數是3 ,池總數是3。 根據上面這個公式,計算得到每個池的 PG 總數應該是 1777.7 ,最後舍入到 2的N次幕得到結果爲每個池 2048個PG。平衡每個池中的 PG 數和每個 OSD 中的 PG 數對於降低 OSD 的方差、避免速度緩慢的恢復進程是相當重要的。

修改 PG PGP

如果你管理一個 Ceph 存儲集羣,有時你可能需要修改池的 PG 和PGP 的值。 在修改PG和 PGP 之前,我們先來了解一下 PGP 是什麼。PGP 是爲實現定位而設置的 PG ,它的值應該與 PG 的總數(即 pg num) 保持一致。對於Ceph 的一個池而言,如果你增加 PG 的數目(即 pg_num 的值),你還應該調整 pgp_num到同樣的值,這樣集羣才能夠開始再平衡 下文將詳細闡述神祕的再平衡機制。參數 pg_num 定義了 PG 的數量,這些 PG 映射到 OSD 當任意池的 pg_num 增加的時候,這個池的每個 PG 一分爲二,但它們依然保持跟源 OSD 的映射。直到這個時候,

Ceph 依然沒有開始再平衡 此時,當你增加該池的 pgp_num 的值時, PG 纔開始從源 OSD遷移到其他 OSD ,正式開始再平衡 從這可以看出, PGP 在集羣再平衡中扮演着重要的角色。現在,讓我們來學習如何改變 pg_num和 pgp_num:

1 )獲取現有的 PG PGP 值:
[root@node140 ~]# ceph osd pool get rbd pg_num
pg_num: 128
[root@node140 ~]# ceph osd pool get rbd pgp_num
pgp_num: 128

2 )使用下面的命令可以檢查池的副本數,找到其中 rep size 的值:
[root@node140 ~]# ceph osd dump | grep size
pool 3 'rbd' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode warn last_change 100 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd
pool 4 'remote_rbd' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode warn last_change 112 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd

3 )依據下面的參數使用公式計算新的 PG 的數目:
OSD 總數 =9,池副本數 (rep size) = 2. 池數 =3

根據前面的公式,得到每個地的 PG 數是 150 ,然後舍入到2的N 次幕 256。

4) 修改池的 PG和PGP:
[root@node140 ~]# ceph osd pool set rbd pg_num 256
set pool 3 pg_num to 256
[root@node140 ~]# ceph osd pool set rbd pgp_num 256
set pool 3 pgp_num to 256

5 )同樣,修改 metadata 池和 rbd 池的 PG PGP:
[root@node140 ~]# ceph osd pool set metadata pg_num 256
set pool 3 pg_num to 256
[root@node140 ~]# ceph osd pool set metadata pgp_num 256
set pool 3 pgp_num to 256

註釋:引用《ceph分佈式存儲學習指南》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章