【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

原文地址:https://www.cnblogs.com/sunbines/p/15535895.html