问个 ceph pg 的问题
- 0次
- 2021-06-10 23:13:29
- idczone
求大佬前来搭救。
集群是这样配置的:
node-0,node-1,node-2,node-3 上 HDD 硬盘,pool name:storage 。
Node-4,node-5,node-6 上 SDD 硬盘,pool name:cache, 做成缓存。
# ceph osd lspools
4 storage
5 image-storage_data
6 image-storage_metadata
8 cache
查看 pool 8 ( cache )的情况,可以看到每个 osd 有 64 个 pg, 集中在 4,5,6 三个 node 上。没问题。
# osdmaptool osdmap --import-crush ./crushmap --test-map-pgs --pool 8
osdmaptool: osdmap file 'osdmap'
osdmaptool: imported 1839 byte crush map from ./crushmap
pool 8 pg_num 64
#osd count first primary c wt wt
osd.0 0 0 0 9.09419 1
osd.1 0 0 0 10.9131 1
osd.2 0 0 0 9.09419 1
osd.3 0 0 0 14.5527 1
osd.4 64 27 27 0.872299 0.950012
osd.5 64 21 21 0.872299 0.950012
osd.6 64 16 16 0.872299 0.950012
in 7
avg 27 s大带宽服务器tddev 31.6747 (1.17314x) (expected 4.84873 0.179583x))
min osd.4 64
max osd.4 64
size 3 64
osdmaptool: writing epoch 4682 to osdmap
但是看 pool 4 ( storage ), 为什么每个 osd 上都有属于 pool storage 的 pg 呢? 4,5,6 结点上没有 hdd 呀。
# osdmaptool osdmap --import-crush ./crushmap --test-map-pgs --pool 4
osdmaptool: osdmap file 'osdmap'
osdmaptool: imported 1839 byte crush map from ./crushmap
pool 4 pg_num 128
#osd count first primary c wt wt
osd.0 93 28 28 9.09419 1
osd.1 100 30 30 10.9131 1
osd.2 75 27 27 9.09419 1
osd.3 88 35 35 14.5527 1
osd.4 15 6 6 0.872299 0.950012
osd.5 10 2 2 0.872299 0.950012
osd.6 3 0 0 0.872299 0.950012
in 7
avg 54 stddev 40.1639 (0.743777x) (expected 6.85714 0.126984x))
min osd.6 3
max osd.1 100
size 3 128
查看 pg 的状态,发现很多 pg 的副本是同时存在于两个 pool 的。
ceph pg ls-by-osd 4
PG OBJECTS DEGRADED MISPLACED UNFOUND BYTES OMAP_BYTES* OMAP_KEYS* LOG STATE SINCE VERSION REPORTED UP ACTING SCRUB_STAMP DEEP_SCRUB_STAMP
4.5 13154 0 0 0 55052803072 76 8 3064 active+clean 6h 4678'25693372 4678:36403484 [4,6,1]p4 [4,6,1]p4 2021-06-08 08:40:18.746379 2021-06-06 22:45:04.723214
4.b 12745 0 0 0 53309668388 76 8 3018 active+clean 8h 4679'14474815 4679:21985894 [3,1,4]p3 [3,1,4]p3 2021-06-07 19:05:19.609229 2021-06-01 15:14:08.633892
4.c 12861 0 0 0 53772528128 0 0 3094 active+clean 6h 4678'15078958 4678:20963884 [4,3,1]p4 [4,3,1]p4 2021-06-08 07:54:49.711211 2021-06-05 20:05:37.202050
4.d 13102 0 0 0 54819514898 0 0 3072 active+clean 3h 4678'21367130 4679:28327270 [4,2,3]p4 [4,2,3]p4 2021-06-08 11:27:17.714580 2021-06-08 11:27:17.714580
4.10 12828 0 0 0 53681672210 0 0 3009 active+clean 10h 4678'9153051 4678:13302772 [0,4,2]p0 [0,4,2]p0 2021-06-07 10:19:00.018771 2021-06-07 10:19:00.018771
4.17 13035 0 0 0 54525949881 0 0 3048 active+clean 10h 4678'10906087 4679:15392312 [0,4,2]p0 [0,4,2]p0 2021-06-07 19:06:35.025947 2021-06-05 03:43:30.623975
4.21 12884 0 0 0 53878359040 0 0 3068 active+clean 10h 4678'13903340 4678:19842337 [0,3,4]p0 [0,3,4]p0 2021-06-07 18:56:16.993401 2021-06-04 23:57:05.083683
4.24 12915 0 0 0 54005068288 76 8 3004 active+clean 10h 4679'10099444 4679:16249023 [3,4,0]p3 [3,4,0]p3 2021-06-07 18:56:19.869887 2021-06-01 08:26:30.348797
crushmap 是你自己写的吗?
我记得创建 osd 的时候,ceph 会自动加上 class 为 ssh 和 hdd 的,用 ceph osd tree,应该有个 class 字段能直接区分。
```
ceph osd crush rule create-replicated hdd_rule default host hdd
ceph osd crush rule create-replicated ssd_rule default host ssd
ceph osd pool create rbd_ssd 512 512 replicated ssd_rule
ceph osd pool create rbd_hdd 512 512 replicated hdd_rule
```
我之前是直接这么创建就可以了的
如果你的磁盘是用了硬件 raid 卡,ceph 可能无法自动识别出了了,推荐用 jbod 直连
另外 “很多 pg 的副本是同时存在于两个 pool 的” 这句话没看懂
感谢你的指导,
我也是这样添加的。
比如,0,1,2 是来自 hdd pool 的 osd,
4,5,6 是来此 ssd pool 的 osd 。
通过 ceph pg 来查看的时候,很多 pg 是类似[0,2,4]这样分布的。我疑惑的是为啥可以分布在两个 pool 上。
而且,查看 pg 分布的时候,选定--pool 4 ( 4 是 hdd 的 pool ),结果却看到了在 osd 4,5,6 上也有这个 pool 的 pg 。
osdmaptool osdmap --import-crush ./crushmap --test-map-pgs --pool 4
osdmaptool: osdmap file 'osdmap'
osdmaptool: imported 1839 byte crush map from ./crushmap
pool 4 pg_num 128
count first primary c wt wt
osd.0 93 28 28 9.09419 1
osd.1 100 30 30 10.9131 1
osd.2 75 27 27 9.09419 1
osd.3 88 35 35 14.5527 1
osd.4 15 6 6 0.872299 0.950012
osd.5 10 2 2 0.872299 0.950012
osd.6 3 0 0 0.872299 0.950012
不明白这是怎么回事。
为什么 4,5,6 这三个 osd 上面会有来自 hdd 这个 pool 的 pg 呢?