RadosGW 大索引
laurentbarbe
$ rados -p .default.rgw.buckets.index listomapkeys .dir.default.1970130.1 | wc -l
166768275
对于每个键包含 100 到 250 字节,这会使 rados 中的对象非常大(几个 GB)……尤其是在从一个 OSD 迁移到另一个 OSD 时(这将锁定所有写入),此外,包含此对象的 OSD 将使用大量内存……
自从 hammer 版本发布以来,就可以对 bucket 索引进行分片。但是,您无法对现有索引进行分片,但可以为新的 bucket 设置它。这对可扩展性来说是一件非常好的事情。
设置索引最大分片数 ¶
您可以指定新 bucket 的默认分片数
- 按区域,在 regionmap 中
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
- 在 ceph.conf 中的 radosgw 部分(这将覆盖每个区域的值)
1 2 3 4 | |
验证:¶
$ radosgw-admin metadata get bucket:mybucket | grep bucket_id
"bucket_id": "default.1970130.1"
$ radosgw-admin metadata get bucket.instance:mybucket:default.1970130.1 | grep num_shards
"num_shards": 8,
$ rados -p .rgw.buckets.index ls | grep default.1970130.1
.dir.default.1970130.1.0
.dir.default.1970130.1.1
.dir.default.1970130.1.2
.dir.default.1970130.1.3
.dir.default.1970130.1.4
.dir.default.1970130.1.5
.dir.default.1970130.1.6
.dir.default.1970130.1.7
Bucket 列出影响:¶
对一个包含约 200k 个对象的 bucket 进行简单测试
| num_shard | 时间 (s) |
|---|---|
| 0 | 25 |
| 8 | 36 |
| 128 | 109 |
因此,如果您不需要,请不要使用包含数千个分片的 bucket,因为 bucket 列出将会变得非常慢……
链接到蓝图
https://wiki.ceph.com/Planning/Blueprints/Hammer/rgw%3A_bucket_index_scalability