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
相关推荐
Tisfy1 小时前
服务器 - 从一台服务器切换至另一台服务器(损失数十条访客记录)
运维·服务器
qq_264220891 小时前
Nginx优化与 SSL/TLS配置
运维·nginx
Aspiresky3 小时前
浅析Linux进程信号处理机制:基本原理及应用
linux·运维·信号处理
全栈工程师修炼指南3 小时前
告别手动构建!Jenkins 与 Gitlab 完美协作,根据参数自动化触发CI/CD流水线实践
运维·ci/cd·自动化·gitlab·jenkins
ajassi20003 小时前
linux C 语言开发 (八) 进程基础
linux·运维·服务器
matlab的学徒4 小时前
Web与Nginx网站服务(改)
linux·运维·前端·nginx·tomcat
Insist7534 小时前
prometheus安装部署与alertmanager邮箱告警
linux·运维·grafana·prometheus
xqlily5 小时前
Linux操作系统之Ubuntu
linux·运维·ubuntu
倔强的石头1066 小时前
【Linux指南】Makefile入门:从概念到基础语法
linux·运维·服务器
ajassi20006 小时前
linux C 语言开发 (七) 文件 IO 和标准 IO
linux·运维·服务器