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
相关推荐
phoenix098121 分钟前
Linux入门DAY27
linux·运维·服务器
egoist20233 小时前
【Linux仓库】进程创建与进程终止【进程·柒】
linux·运维·服务器·进程创建·写时拷贝·进程终止
华纳云IDC服务商6 小时前
服务器Linux防火墙怎样实现访问控制
linux·运维·服务器
胡桃不是夹子6 小时前
linux系统装google chrome,amd64
linux·运维·chrome
睡觉z11 小时前
Jenkins持续集成系统
运维·ci/cd·jenkins
Wy_编程14 小时前
Linux文件相关命令
linux·运维
Viking_bird15 小时前
centos 7.5 + Hadoop 3.2.4 集群搭建
linux·运维·服务器·hadoop·centos
黑客影儿16 小时前
Kali Linux 环境中的系统配置文件与用户配置文件大全
linux·运维·程序人生·安全·网络安全·系统安全·学习方法
岚天start16 小时前
Linux系统网络排查工具总结
linux·运维·网络·监控·扫描·连通性·流量
Lovyk18 小时前
基于 Ansible 与 Jinja2 模板的 LNMP 环境及 WordPress 自动化部署实践
linux·运维·服务器·自动化·ansible