一、概述
osd上pg的分布决定了数据分布的均匀与否,所以能直观的看到pg到osd的上分布是很有必要的;
ceph只身提供了相关的命令:
1 #ceph pg ls-by-osd.{osd_id} 2 #for i in `ceph osd ls`; do ceph pg ls-by-osd osd.$i |awk '{print $1}' >> /tmp/aaa ;done #NOTE: 每次osd输出,第一行有一个pg_stat,需要去掉之后,就可以获取pg总数是ceph -s中 pg个数*副本数
上述方式可以很好的解决问题,但还是另一种方式也可以:
1、获取map:
# ceph osd getmap -o osdmap got osdmap epoch 2381
2、获取crushmap:
#osdmaptool osdmap --export-crush crushmap osdmaptool: osdmap file 'osdmap' osdmaptool: exported crush map to crushmap
也可以使用:
#ceph osd getcrushmap -o crushmap
3、获取某个pool在pg上的分布情况
#osdmaptool osdmap --import-crush crushmap --test-map-pgs --pool {pool_id}
例如:
osdmaptool osdmap --import-crush crushmap --test-map-pgs --pool 16 osdmaptool: osdmap file 'osdmap' osdmaptool: imported 864 byte crush map from crushmap pool 16 pg_num 32 #osd count first primary c wt wt osd.1 14 4 4 0.149994 1 osd.2 5 1 1 0.149994 1 osd.3 7 4 4 0.149994 1 osd.4 6 1 1 0.149994 1 osd.5 6 3 3 0.149994 1 osd.6 5 3 3 0.149994 1 osd.7 9 8 8 0.149994 1 osd.8 6 4 4 0.149994 1 osd.9 6 4 4 0.149994 1 in 9 avg 7 stddev 2.68742 (0.383917x) (expected 2.51416 0.359165x)) min osd.2 5 max osd.1 14 size 0 0 size 1 0 size 2 32 size 3 0 osdmaptool: writing epoch 2383 to osdmap
可以看出单个pool的pg分布在osd上不是均匀的,我们可以迭代所有的pool来比较;并且通过以下命令来修改:
#ceph osd crush reweight osd.id {value}