ceph里面osd容量分布不均问题的处理办法

在某些情况下,ceph里各个osd的容量使用不均衡,某些osd已经使用了80%的容量了,某些osd只使用了20%的容量,这样一方面会导致很多读写都压在那个高容量osd上,造成用户读写缓慢;另一方面,一但那个高容量的osd的使用了继续扩张达到full ratio就会导致整个集群不可用。
具体怎么解决这个问题呢?至少有以下几个思路

osdmaptool

具体使用方法参见:
http://strugglesquirrel.com/2019/05/22/超实用的pg均衡工具upmap/
但是,在我的集群上这个方法不能生效,产出迁移计划的时候总是显示
Unable to find further optimization, or distribution is already perfect
系统觉得我的集群已经很完美了。。
而且还有一个问题,上面的博客命令里 --upmap-deviation 0.01
说明允许的偏差是1%,也就是说 upmap-deviation 应该是一个大于0小于1的小数
但是我查看osdmaptool的help信息,展示如下:

--upmap-deviation <max-deviation>
                           max deviation from target [default: 5]

说明upmap-deviation应该是大于1小于100的整数。
不知道是不是版本差异,我的版本是Ceph 17.2.5

Ceph Balancer

同上,我很怀疑网上写博客的小伙伴有没有亲自试验过自己文章里面的工具。
我反正没有找到Balancer里面设置迁移参数(就是上面upmap-deviation那个参数代表的逻辑),没有迁移参数,系统怎么知道我想把osd容量的方差降到什么程度?

pg-upmap-items

第三个方案就是直接手动执行迁移计划

  1. 先根据如下命令查看每个osd占据的空间,和分布的osd数量
    ceph osd df
  2. 找到一个占据空间最大的osd,假定为osd 3,执行如下命令,查找这个osd,前缀为1的pg都有哪些
    ceph pg ls-by-osd osd.3 | egrep ^1
  3. 再找一个占据空间最小的osd(最好选择和上面那个osd同属一个机器的osd,这样不至于破坏容灾域),假定是osd 2
  4. 使用如下命令进行搬迁,下面命令的语义就是把1.77这个pg在osd 3上面的副本数据迁移到osd2上 osd 4上面的副本数据迁移到osd5上
    ceph osd pg-upmap-items 1.77 3 2 4 5
  5. 这就是只迁移一个副本
    ceph osd pg-upmap-items 1.77 3 2
posted @ 2024-11-25 11:38  蓝枫居士  阅读(144)  评论(0)    收藏  举报