【ceph | 運維】PG相關命令


PG

一個 Pool 中有多個 PG,具體數量可以通過以下命令查看:

ceph osd pool get test pg_num

 

查看 Pool 中 PG 的分布:

ceph pg ls-by-pool test

 查看對象的位置:

ceph osd map test test-object
osdmap e264282 pool 'test' (4) object 'test-object' -> pg 4.bf8f6aea (4.a) -> up ([1,0,2], p1) acting ([1,0,2], p1)

【解釋】test-object 是對象名,test 是 pool。

  • osdmap e264282 是 osdmap 的版本號
  • pool 'test' (4) 是 pool 名字及 ID
  • object 'test-object' 是對象名稱
  • pg 4.bf8f6aea (4.a) 是對象所在 PG 的編號

結果顯示這個對象在 ID 為 4.a 的 PG 上,並且位於 OSD1,OSD0,OSD2 上,三個副本。

查看 pg 中有哪些對象:

$ rados --pgid 4.a ls

 

像 Pool,PG 這些東西都是有 id 的,查看 Pool 的 ID:

ceph osd lspools
 

我這里名為 test 的 pool 的 ID 為 4,所以 test 下面的 PG 的 ID 都是以 4 開頭的。

查看pg和osd的映射關系:

ceph pg dump | grep ^4. |awk '{print $1 "\t" $17 "\t" $10}'

 

查看pg狀態:

ceph pg dump pgs_brief

 

獲取pg數量

ceph osd pool get {pool-name} pg_num

 

c存儲池相關pg信息

ceph pg dump pools

 

查看pg和osd的映射關系:osd為主

ceph pg dump osds

 

手動觸發peering

pg repeer pg repeer <pgid>

 

要檢索特定放置組的統計信息,請執行以下操作:

ceph pg {pg-id} query

這里的query其實是一種元數據信息,部分形式如下:

 1 {
 2     "snap_trimq": "[]",
 3     "snap_trimq_len": 0,
 4     "state": "active+clean",
 5     "epoch": 236,
 6     "up": [
 7         1,
 8         2,
 9         0
10     ],
11     "acting": [
12         1,
13         2,
14         0
15     ],
16     "acting_recovery_backfill": [
17         "0",
18         "1",
19         "2"
20     ],
21     "info": {
22         "pgid": "1.0",
23         "last_update": "223'23",
24         "last_complete": "223'23",
25         "log_tail": "0'0",
26         "last_user_version": 23,
27         "last_backfill": "MAX",
28         "purged_snaps": [],
29         "history": {
30             "epoch_created": 2,
31             "epoch_pool_created": 2,
32             "last_epoch_started": 221,
33             "last_interval_started": 220,
34             "last_epoch_clean": 221,
35             "last_interval_clean": 220,
36             "last_epoch_split": 0,
37             "last_epoch_marked_full": 0,
38             "same_up_since": 220,
39             "same_interval_since": 220,
40             "same_primary_since": 212,
41             "last_scrub": "189'21",
42             "last_scrub_stamp": "2020-12-14T06:56:57.181447+0800",
43             "last_deep_scrub": "189'20",
44             "last_deep_scrub_stamp": "2020-12-13T04:09:17.431508+0800",
45             "last_clean_scrub_stamp": "2020-12-14T06:56:57.181447+0800",
46             "prior_readable_until_ub": 0
47         },
48 ...
49 }
View Code

我們可以看到很多理論部分講過的元數據,比如 up 、acting、info、epoch、peer、interval等。snap_trimq表示快照刪除隊列。

 

 

【獲取pg map】要獲取特定放置組的放置組映射,請執行以下操作:

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 1.6c被映射到 編號為 [1,0]的兩個OSD上。 Acting 表示Acting Set。

 

Scrub擦洗

關於Scrub的含義,我們在《Ceph糾刪碼部署》已經介紹了,Scrub指數據掃描,通過讀取對象數據並重新計算校驗和,再與之前存儲在對象屬性的校驗和進行比對,以判斷有無靜默錯誤(磁盤自身無法感知的錯誤)。要Scrub,請執行以下操作:

ceph pg scrub {pg-id}

Ceph檢查主節點和任何副本節點,生成放置組中所有對象的目錄並進行比較,以確保沒有丟失或不匹配的對象,並且它們的內容一致。假設所有副本都匹配,則最終的語義掃描可確保所有與快照相關的對象元數據都是一致的。通過日志報告錯誤。

要從特定池中清理所有放置組,請執行以下操作:

ceph osd pool scrub {pool-name}

 

參考資料:

1. 遷移之美——PG讀寫流程與狀態遷移詳解

2. Ceph 中的 Pools 和 PGs

3. Ceph儲存引擎BlueStore.md


免責聲明!

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



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