ceph osd slow io (一):对象存储index osd 的rocksdb性能下降

概述

在ceph分布式集群中,经常会遇到各种非常影响业务体验的slow io。而slow io产生的可能性有很多,包括慢盘、网络、业务压力、ceph bug、缓存下刷等等。

近期遇到的一种slow io是在ceph对象存储的index pool中,因为rocksdb问题导致的slow io

对象索引与list请求

当对象存储前端进行list(调用listbucket,listobject接口)请求时,会对索引池进行访问,尤其当数据比较多时,索引池的io会激增,索引池需要遍历omapkey,从而给前端返回列表。

而omapkey实际是存在于osd rocksdb结构中(index中存的实际上是0字节的shard文件,通过对其进行listomapkey可以看到每个索引分片存的对象列表),一般来说当前端产生list请求时,只要返回这些对象列表即可。然而,底层index不仅存储需要返回给前端的对象列表,还有一些别的对象,依旧会占用omapkey,且不会返回给前端,当这些对象较多时,访问rocksdb的过程中,就需要逐个跳过这类对象(这个操作是需要时间的),从而导致整个请求时间变长,rocksdb性能下降。

一般来说这种需要跳过的,不会返回给前端list的key有两种情况会大量产生:

  • 分段残留
  • 大量删除

分段残留

分段残留导致的的对象,通过listomapkey可以查询到,这类对象对前端来说没有合并成完整对象,所以listobject是,看不到该对象,然而因为残留底层仍占用着omapkey空间。

因此首先要对分段残留进行定期的检查和清理。

这里展示使用s3cmd的方法。(当对象较多,s3cmd无法及时返回时,也可以通过底层对index shard进行listomapkey过滤_mul开头和解析获得分段id)

bash 复制代码
s3cmd multipart s3://桶名
s3cmd abortmp 分段id

大量删除

当进行了大量删除时,rocksdb由于是追加写方式更新,数据积累一定程度后才会进行compaction,清理时也是先标记,然后扔给后台compaction任务慢慢进行删除。如果前端发生大量删除,rocksdb中也会有大量被标记的对象,这类对象也会对桶遍历、前端list请求产生非常大的影响。

查询rocksdb性能

bash 复制代码
ceph daemon osd.x perf

查看avg_us字段,判断是否是rocksdb性能不足所导致的slow。

如果确实是,首先确认分段残留,并清理,然后确认是否近期发生过大量的删除

compact

如果确实存在上述情况,清理分段后或确认存在大量删除后,对slow 的osd进行手动compact,加快对这些有影响的key的删除回收操作。

bash 复制代码
ceph tell osd.x compact
相关推荐
St_rive31 分钟前
移动端自动化环境搭建与准备
运维·自动化
INNOVIX稳石机器人1 小时前
稳石500强实战验证:从人工仓储迈向AI自主智造,给出仓储自动化升级标准答案
运维·人工智能·自动化
飞飞传输1 小时前
国产化 MOVEit 替代:文件传输架构与安全能力深度解读
大数据·运维·安全
聪明蛋子哟2 小时前
浏览器自动化的“持久身份”:多会话认证与Agent技能的无缝集成实践
运维·自动化
千百元2 小时前
ngrok 内网穿透TCP
运维
会周易的程序员2 小时前
企业私有 AI 算力服务器架构设计:异构四节点 + QUIC 微服务
运维·服务器·c++·人工智能·微服务·架构
硬件工艺分享君2 小时前
PCB厂家如何守住交期、品质与响应
大数据·运维·科技·制造·pcb工艺
库玛西2 小时前
Linux网络编程:HTTP/HTTPS协议核心技术全解析
linux·运维·服务器·网络·c++·http·https
志栋智能2 小时前
大模型驱动运维:重构故障根因分析的“思考”逻辑
运维·服务器·重构·自动化
_F_y3 小时前
Linux网络常用指令
linux·运维·网络