searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

对象存储Large omap objects告警处理实践

2022-12-22 05:46:02
351
0

前言:

        由于对象存储主要运用于影像、多媒体等数据规模较大的场景,单个bucket的对象数量通常在千万甚至上亿规模,在对对象存储日常巡检和运维的时候,经常会遇到对象存储的索引存储池出现large objects告警,影响数据访问速度,甚至出现slow requests告警,进而导致存储集群服务异常。针对这种情况,下面我们介绍出现这种告警后的分析处理方式。

原因分析

       当对象存储单个bucket存储的对象数量过多,超过阈值后,将引发集群large omap objects告警,以对象存储索引池为例:阈值上限为    bucket_index_max_shard*osd_deep_scrub_large_omap_object_key_threshold。

如果不及时处理,将影响这个bucket的读写性能,甚至会给集群故障埋下隐患。

处理步骤:

处理思路:

向上调整osd_deep_scrub_large_omap_object_key_threshold消除告警,但是单个shard的对象数量过大时,会影响bucket的查询性能,不推荐。

增加shard数量,保持单个shard的阈值不变,通过增加shard的操作消除告警,默认shard值为16,osd_deep_scrub_large_omap_object_key_threshold默认值为20万,单个bucket不产生large omap objects告警的对象数量为320万,调整bucket_index_max_shard为128,bucket对象数量阈值变为2560万,已经满足大部分场景的需求,同是,对性能的影响很小。所以此次我们采用此方法来处理告警,方法如下:

  1. 先找到出现问题的pool

ceph health detail

 

  1. 找到对应的PG

ceph pg ls-by-pool |awk '{print "ceph pg "$1 " query|grep num_large_omap_objects"}'|sh -x

 

  1. 找到对应的OSD

 

  1. 查看OSD日志找到bucket

zcat ceph-osd.40.log-20190614.gz |grep omap

  1. 根据对象ID确定bucket名称

radosgw-admin bucket stats --bucket-id=8b824a20-985f-11e8-a8d1-0cc47a57b678.225330637.1 > buckets.json

有报错可以忽略,查看buckets.json,根据关键字8b824a20-985f-11e8-a8d1-0cc47a57b678.225330637.1找到bucket名

 

  1. 备份原bucket的index为本地文件

100W个对象的index大约占用1GB备份文件空间

radosgw-admin bi list --bucket=dutestreshard1 > dutestreshard1.list.backup

若后续操作出现问题,恢复index的操作为

radosgw-admin bi put --bucket= < .list.backup

 

  1. 修改zonegroup的bucket_index_max_shards

此值不宜过大不宜太小,依据集群规模和单桶对象数设计,每个shard超过20W条index就会产生告警

radosgw-admin zonegroup get > zonegroup.json

radosgw-admin zonegroup set < zonegroup.json

radosgw-admin period update --commit

 

  1. 关闭所有rgw,避免reshard操作时新数据变更

systemctl stop ceph-radosgw.target

 

  1. 执行bucket reshard操作

注意记录新老bucket id, 100W对象reshard时间约30秒

  1. reshard后检查,bucket id和marker信息应改变

 

  1. 启动rgw,验证数据正确性和bucket可操作性

systemctl start ceph-radosgw.target

 

  1. 删除reshard前的旧的bucket index instance,

注意此处的bucket-id为第九步的old bucket instance id,删除耗时较久,耐心等待其执行完成

radosgw-admin bi purge --bucket="dutestreshard1" --bucket-id=8b824a20-985f-11e8-a8d1-0cc47a57b678.225330637.1

 

总结

        从以上处理步骤可以看到我们主要通过提高bucket的shard数量和单个shard的object数量,来处理large omap objects告警,单个bucket的对象数量还是存在理论上阈值,为了保持存储环境的可靠性和数据安全,在规划数据存储环境时,应该根据业务数量规模,合理规划bucket相关参数,同时,对使用业务方进行相关知识普及,引导使用者根据业务类型、数据类型、组织架构等规划不同的bucket,避免出现超大数量规模的bucket,为数据存储服务可靠、安全、高效保驾护航。

0条评论
0 / 1000
jackLin
2文章数
0粉丝数
jackLin
2 文章 | 0 粉丝
jackLin
2文章数
0粉丝数
jackLin
2 文章 | 0 粉丝
原创

对象存储Large omap objects告警处理实践

2022-12-22 05:46:02
351
0

前言:

        由于对象存储主要运用于影像、多媒体等数据规模较大的场景,单个bucket的对象数量通常在千万甚至上亿规模,在对对象存储日常巡检和运维的时候,经常会遇到对象存储的索引存储池出现large objects告警,影响数据访问速度,甚至出现slow requests告警,进而导致存储集群服务异常。针对这种情况,下面我们介绍出现这种告警后的分析处理方式。

原因分析

       当对象存储单个bucket存储的对象数量过多,超过阈值后,将引发集群large omap objects告警,以对象存储索引池为例:阈值上限为    bucket_index_max_shard*osd_deep_scrub_large_omap_object_key_threshold。

如果不及时处理,将影响这个bucket的读写性能,甚至会给集群故障埋下隐患。

处理步骤:

处理思路:

向上调整osd_deep_scrub_large_omap_object_key_threshold消除告警,但是单个shard的对象数量过大时,会影响bucket的查询性能,不推荐。

增加shard数量,保持单个shard的阈值不变,通过增加shard的操作消除告警,默认shard值为16,osd_deep_scrub_large_omap_object_key_threshold默认值为20万,单个bucket不产生large omap objects告警的对象数量为320万,调整bucket_index_max_shard为128,bucket对象数量阈值变为2560万,已经满足大部分场景的需求,同是,对性能的影响很小。所以此次我们采用此方法来处理告警,方法如下:

  1. 先找到出现问题的pool

ceph health detail

 

  1. 找到对应的PG

ceph pg ls-by-pool |awk '{print "ceph pg "$1 " query|grep num_large_omap_objects"}'|sh -x

 

  1. 找到对应的OSD

 

  1. 查看OSD日志找到bucket

zcat ceph-osd.40.log-20190614.gz |grep omap

  1. 根据对象ID确定bucket名称

radosgw-admin bucket stats --bucket-id=8b824a20-985f-11e8-a8d1-0cc47a57b678.225330637.1 > buckets.json

有报错可以忽略,查看buckets.json,根据关键字8b824a20-985f-11e8-a8d1-0cc47a57b678.225330637.1找到bucket名

 

  1. 备份原bucket的index为本地文件

100W个对象的index大约占用1GB备份文件空间

radosgw-admin bi list --bucket=dutestreshard1 > dutestreshard1.list.backup

若后续操作出现问题,恢复index的操作为

radosgw-admin bi put --bucket= < .list.backup

 

  1. 修改zonegroup的bucket_index_max_shards

此值不宜过大不宜太小,依据集群规模和单桶对象数设计,每个shard超过20W条index就会产生告警

radosgw-admin zonegroup get > zonegroup.json

radosgw-admin zonegroup set < zonegroup.json

radosgw-admin period update --commit

 

  1. 关闭所有rgw,避免reshard操作时新数据变更

systemctl stop ceph-radosgw.target

 

  1. 执行bucket reshard操作

注意记录新老bucket id, 100W对象reshard时间约30秒

  1. reshard后检查,bucket id和marker信息应改变

 

  1. 启动rgw,验证数据正确性和bucket可操作性

systemctl start ceph-radosgw.target

 

  1. 删除reshard前的旧的bucket index instance,

注意此处的bucket-id为第九步的old bucket instance id,删除耗时较久,耐心等待其执行完成

radosgw-admin bi purge --bucket="dutestreshard1" --bucket-id=8b824a20-985f-11e8-a8d1-0cc47a57b678.225330637.1

 

总结

        从以上处理步骤可以看到我们主要通过提高bucket的shard数量和单个shard的object数量,来处理large omap objects告警,单个bucket的对象数量还是存在理论上阈值,为了保持存储环境的可靠性和数据安全,在规划数据存储环境时,应该根据业务数量规模,合理规划bucket相关参数,同时,对使用业务方进行相关知识普及,引导使用者根据业务类型、数据类型、组织架构等规划不同的bucket,避免出现超大数量规模的bucket,为数据存储服务可靠、安全、高效保驾护航。

文章来自个人专栏
对象存储
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0