计算ceph集群中每个osd上的pg数

可以有多种方法获取ceph集群中每个osd上的pg数量,测试环境如下

# 使用osd df命令
ceph osd df tree | awk '/osd\./{print $NF":"$(NF-1)}'
 
# 使用ls-by-osd命令
#ceph pg ls-by-osd osd.id 根据osd输出pg信息
for i in `ceph osd ls`;do echo -n "osd.$i:";ceph pg ls-by-osd $i | grep -v '^pg_stat' | wc -l;done
 
# 从pg dump输出中过滤
# 上面两个都是ceph提供的命令,我们知道ceph pg dump可以输出集群中所有pg详细信息,从这些信息中可以很容易过滤出各个osd上的pg数,也是对上面命令的验证
for i in `ceph osd ls`;do echo -n "osd.$i:";ceph pg dump 2>/dev/null | egrep '^[0-9]+\.[0-9a-f]+\s' | awk '{print $15}' | egrep "^\[$i,|,$i,|,$i\]$" | wc -l;done

上面三种方法输出结果一致,只要一种即可,但多种方法使我们可以更好的理解ceph中pg在osd上的分布,如果你的集群使用默认的crush,每个osd crush weight值一样,那么可以从输出看到各个osd上的pg数量近似相等.

  • storage/ceph/每个osd上pg总数.txt
  • 最后更改: 2019/04/16 18:31
  • (外部编辑)