最近在测试ceph的pg相关功能中,留意了一下各个osd的数据分布情况,发现不同的osd之间数据分布差异很大,全部盘都是HDD且容量都是8T
写在前面
松鼠哥的ceph专业课程上线啦!
面向新手同学,从0实战,全面入门ceph安装部署与运维,有需要的同学赶紧扫码订购吧:
测试阶段就该做好技术调研啊~
集群的情况
首先用ceph osd df
查看osd的具体容量情况:
1 | ID CLASS WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS |
可以看到,osd.15仅使用了51.42%的容量而osd.13则使用了79.04%的容量,二者相差近30%,在集群数据量91T的情况下,30%的数据就非常多了,并且,在集群需要持续拓展、长期运行的情况下,它们的差距恐怕会进一步扩大
对于这种osd容量差距大的情况,研读了国内大神徐小胖的PG对数据分布的影响后恍然大悟,我们即使是测试环境,数据也往往会在百T之上,并且都是小文件,这种情况下,存储池的pg分布问题就非常突出
看了下集群的存储池pg情况:
1 | [xxx@ceph-c43 ~]$ sudo ceph osd dump |grep num |
然后再查看了一下各个存储池的用量:
1 | [xxx@ceph-c43 ~]$ sudo ceph df |
一目了然,default.rgw.buckets.data存放了近99.9999%的数据,而default.rgw.buckets.index却只放了少量的数据,但是default.rgw.buckets.index却使用了512个pg,这样算下来,有大量的pg没有存放数据,就被映射到osd上,由于crushmap映射的时候是根据pg而不考虑存储池及pg的实际存放数据量,使得那些没有放数据的pg(例如default.rgw.buckets.index的pg)占用了大量osd资源,因而这些osd的容量就会占用得少一些
解决方案有两个:
1、使用reweight对占用高的osd进行降权重操作,使得其上的pg迁往其他osd,但这样也只是暂时解决问题,不能从根本上消灭这个问题
2、在建存储池的时候就该想到,要提前规划pg的数目,最直接的办法就是在PG Calc上进行评估,在一开始的时候就控制好各个存储池的比例,例如上述存储池,除了default.rgw.buckets.data,其他存储池大可以只分配16个pg,如果后续出现扩展集群的场景,再来增加pg也可以
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2018/03/26/数据量大时osd出现数据分布不均匀/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!