Ceph存儲池pg_num配置詳解


PG_NUM

用此命令創建存儲池時:

ceph osd pool create {pool-name} pg_num

確定 pg_num 取值是強制性的,因為不能自動計算。下面是幾個常用的值:

  • 少於 5 個 OSD 時可把 pg_num 設置為 128;
  • OSD 數量在 5 到 10 個時,可把 pg_num 設置為 512;
  • OSD 數量在 10 到 50 個時,可把 pg_num 設置為 4096;
  • OSD 數量大於 50 時,你得理解權衡方法、以及如何自己計算 pg_num 取值;
  • 自己計算 pg_num 取值時可借助 pgcalc 工具( https://ceph.com/pgcalc/ )。

隨着 OSD 數量的增加,正確的 pg_num 取值變得更加重要,因為它顯著地影響着集群的行為、以及出錯時的數據持久性(即災難性事件導致數據丟失的概率)。

各個歸置組、 OSD 和監視器都一直需要內存、網絡、處理器,在恢復期間需求更大。為消除過載而把對象聚集成簇是歸置組存在的主要原因。

最小化歸置組數量可節省不少資源。

確定歸置組數量

             (OSDs * 100)
Total PGs =  ------------
              pool size

比如,一個配置了 200 個 OSD 且副本數為 3 的集群,你可以這樣估算歸置組數量:

(200 * 100)
----------- = 6667. Nearest power of 2: 8192
     3

當用了多個數據存儲池來存儲數據時,你得確保均衡每個存儲池的歸置組數量、且歸置組數量分攤到每個 OSD ,這樣才能達到較合理的歸置組總量,並因此使得每個 OSD 無需耗費過多系統資源或拖慢連接進程就能實現較小變遷。例如,在10個OSD上具有512個放置組的10個池的集群是遍布10個OSD的總共5,120個放置組,即每個OSD 512個放置組。 這不會占用太多資源。 但是,如果創建了1,000個池,每個池有512個放置組,則OSD將每個處理約50,000個放置組,這將需要更多的資源和時間進行對等。

設置歸置組數量

要設置某存儲池的歸置組數量,你必須在創建它時就指定好,詳情見創建存儲池。一存儲池的歸置組數量設置好之后,還可以增加(但不可以減少),下列命令可增加歸置組數量:

ceph osd pool set {pool-name} pg_num {pg_num}

你增加歸置組數量后、還必須增加用於歸置的歸置組( pgp_num )數量,這樣才會開始重均衡。 pgp_num 數值才是 CRUSH 算法采用的用於歸置的歸置組數量。雖然 pg_num 的增加引起了歸置組的分割,但是只有當用於歸置的歸置組(即 pgp_num )增加以后,數據才會被遷移到新歸置組里。 pgp_num 的數值應等於 pg_num 。可用下列命令增加用於歸置的歸置組數量:

ceph osd pool set {pool-name} pgp_num {pgp_num}

獲取歸置組數量

要獲取一個存儲池的歸置組數量,執行命令:

ceph osd pool get {pool-name} pg_num

獲取歸置組統計信息

要獲取集群里歸置組的統計信息,執行命令:

ceph pg dump [--format {format}]

可用格式有純文本 plain (默認)和 json 。

獲取卡住的歸置組統計信息

要獲取所有卡在某狀態的歸置組統計信息,執行命令:

ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format <format>] [-t|--threshold <seconds>]

Inactive (不活躍)歸置組不能處理讀寫,因為它們在等待一個有最新數據的 OSD 復活且進入集群。
Unclean (不干凈)歸置組含有復制數未達到期望數量的對象,它們應該在恢復中。
Stale (不新鮮)歸置組處於未知狀態:存儲它們的 OSD 有段時間沒向監視器報告了(由 mon_osd_report_timeout 配置)。
可用格式有 plain (默認)和 json 。閥值定義的是,歸置組被認為卡住前等待的最小時間(默認 300 秒)。

獲取一歸置組運行圖

要獲取一個具體歸置組的歸置組圖,執行命令:

ceph pg map {pg-id}

例如:

ceph pg map 1.6c

Ceph 將返回歸置組圖、歸置組、和 OSD 狀態:

osdmap e13 pg 1.6c (1.6c) -> up [1,0] acting [1,0]

獲取一 PG 的統計信息

要查看一個具體歸置組的統計信息,執行命令:

ceph pg {pg-id} query

洗刷歸置組

要洗刷一個歸置組,執行命令:

ceph pg scrub {pg-id}

Ceph 檢查原始的和任何復制節點,生成歸置組里所有對象的目錄,然后再對比,確保沒有對象丟失或不匹配,並且它們的內容一致。

恢復丟失的歸置組

如果集群丟了一或多個對象,而且必須放棄搜索這些數據,你就要把未找到的對象標記為丟失( lost )。

如果所有可能的位置都查詢過了,而仍找不到這些對象,你也許得放棄它們了。這可能是罕見的失敗組合導致的,集群在寫入完成前,未能得知寫入是否已執行。

當前只支持 revert 選項,它使得回滾到對象的前一個版本(如果它是新對象)或完全忽略它。要把 unfound 對象標記為 lost ,執行命令:

ceph pg {pg-id} mark_unfound_lost revert|delete

Important:要謹慎使用,它可能迷惑那些期望對象存在的應用程序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM