Rgw设置shard避免单bucket下数量过大导致性能下降的方法

一. 问题描述

在前期测试集群rgw性能的过程中,发现了bucket shard 的两个严重问题。

第一个问题,通过查看bucket的状态,可以发现,bucket 已经OVER 100%,官方的建议中,bucket的一个shard存储数据为十万 当数量级远远大于这个数的时候,性能就会急烈下降

# radosgw-admin bucket limit check
    {
        "bucket": "ceph_bucket2",
        "tenant": "",
        "num_objects": 26288031,
        "num_shards": 1,
        "objects_per_shard": 26288031,
        "fill_status": "OVER 100.000000%"
    }

第二个问题,L版开始,官方提供一个参数,可以在单个bucket 数量 over 100%的时候动态进行resharding,而且这个参数是默认开启的

rgw_dynamic_resharding = true

但是这个参数有个致命的缺陷,sharding过程中bucket无法进行读写,因为元数据对象正在重新分散索引,需要保证一致性,同时,数据量越大时间会越来越长。


二. 解决方案

为了解决上面两个问题
  1. 首先第一个需要做的是关闭动态resharding,不管怎么样不能影响到生产服务质量
  2. 预估单个bucket需要存放的对象数量,按照每个shard 十万数据,提前做好分片,这有个好处是,后期不需要再进行resharding

    [global]
    rgw_dynamic_resharding = false
    
设置shard的两个方法

参考资料: