Ceph S3分片计算方法
1. S3分片说明
index pool一定要上SSD,这个是优化的前提。
合理设置bucket 的shard 数量
shard的数量并不是越多越好,过多的shard会导致部分类似list bucket的操作消耗大量底层存储IO,导致部分请求耗时过长。
shard的数量还要考虑到你OSD的故障隔离域和副本数设置。比如你设置index pool的size为2,并且有2个机柜,共24个OSD节点,理想情况下每个shard的2个副本都应该分布在2个机柜里面,比如当你shard设置为8的时候,总共有8*2=16个shard文件需要存储,那么这16个shard要做到均分到2个机柜。同时如果你shard超过24个,这很明显也是不合适的。
控制好单个bucket index shard的平均体积,目前推荐单个shard存储的Object信息条目在10-15W左右,过多则需要对相应的bucket做单独reshard操作(注意这个是高危操作,谨慎使用)。比如你预计单个bucket最多存储100W个Object,那么100W/8=12.5W,设置shard数为8是比较合理的。shard文件中每条omapkey记录大概占用200 byte的容量,那么150000*200/1024/1024 ≈ 28.61 MB,也就是说要控制单个shard文件的体积在28MB以内。
业务层面控制好每个bucket的Object上限,按每个shard文件平均10-15W Object为宜。
2. 分片配置项
the rgw_override_bucket_index_max_shards setting for simple configurations,
the bucket_index_max_shards setting for federated configurations
1) 修改配置文件设置相应的参数。 Note that maximum number of shards is 7877.
[global]
rgw_override_bucket_index_max_shards = 10
2) 重启rgw服务,让其生效
systemctl restart ceph-radosgw.target
3) 查看bucket shard数
radosgw-admin bucket limit check --bucket=[bucket名]
[
{
"user_id": "admin",
"buckets": []
},
{
"user_id": "xufeng",
"buckets": [
{
"bucket": "bucket1",
"tenant": "",
"num_objects": 201000,
"num_shards": 16, # 当前生效的sharding数量
"objects_per_shard": 12562,
"fill_status": "OK"
},
{
"bucket": "testbucket",
"tenant": "",
"num_objects": 2,
"num_shards": 0,
"objects_per_shard": 2,
"fill_status": "OK"
}
]
}
]
3. CTSI Storage分布式存储分片计算方法
计算分片需要以下几个参数
1) 单个shard预设数量
单个shard对象数量设定在12万
2) 根据业务评估平均文件大小
例如某些视频业务场景,业务侧评估文件大小大约在11M左右,类似这种能够确定的业务,可以按照评估的最小文件大小来计算。
如果那种无法评估的业务,例如云网盘这种业务类型,暂时按照2M文件大小来计算(暂定)。
3) 根据业务评估单个bucket可能的容量大小
注意: 评估容量大小时,评估的容量为实际可用容量,不是裸容量,同时需要考虑85%冗余上限的事情
例如:
1. 假如集群总可用容量为300TiB,则实际可用容量为300*0.85=255TiB
2. 评估集群中可能存在的最大bucket容量
> 现在我们计划使用这个集群作为测试集群,那么我希望将这个集群所有容量都放置到一个bucket中,也就意味着我这个bucket最大的容量就是225TiB.
4) 测算集群需要配置的shard数量
-
根据平均文件大小和bucket最大容量计算对象数量
bucket最大容量 / 平均文件大小 »>>>>> 255TiB * 1024 * 1024 / 11M = 24307898
-
根据对象数量和预设大小计算应该配置的shard数量
对象数量 / 单个shard预设数量 »>>>>> 24307898 / 120000 = 202.56 ≈ 203 个shard
#### 计算公式: 存储实际可用容量(非裸容量) * 0.85 * 1024 * 1024 / 11 / 120000