前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RBD快速删除的方法分析与改进

RBD快速删除的方法分析与改进

作者头像
用户2772802
发布2018-08-06 09:43:37
1.1K0
发布2018-08-06 09:43:37
举报
文章被收录于专栏:磨磨谈

前言

这个问题在很久以前就有一篇文章进行过讨论 remove-big-rbd,这个文章写的比较清楚了,并且对不同的方法做了分析,这里先把结论说下

rbd类型

rbd rm 方法

rados -p rm方法

未填充很多

已填充很多

在rbd进行删除的时候,即使内部没有对象数据,也一样需要一个个对象去发请求,即使对象不存在,这个可以开日志看到

实验过程

开启日志的方法

在/etc/ceph/ceph.conf中添加

代码语言:javascript
复制
[client]
debug_ms=1log_file=/var/log/ceph/rados.log

然后执行操作后,去分析每秒钟的操作数目即可,类似下面的这个,也可以用日志系统进行分析,这里不赘述

代码语言:javascript
复制
cat  /var/log/ceph/rados.log|grep delete|grep -v ">"|grep 13:29:46|wc -l

原始的快速删除方法

代码语言:javascript
复制
rados -p rbd ls | grep '^rbd_data.25ae86b8b4567' | xargs -n 200  rados -p rbd rm

开启多进程删除的方法

这个比上面那种方法好的是:

  • 可以显示当前删除的进度
  • 可以指定删除的进程并发数
  • 可以显示当时正在删除的对象
  • 可以增加一个中断时间降低负载

首先获取一个需要快速删除的rbd的列表 获取prifix

代码语言:javascript
复制
[root@lab8106 put]# rbd info testrbd|grep prefix
    block_name_prefix: rbd_data.32c0f6b8b4567

获取列表

代码语言:javascript
复制
[root@lab8106 put]# rados -p rbd ls |grep rbd_data.32c0f6b8b4567 > delobject

这里可以看下内容有没有问题,检查确认下

删除的fastremove.sh脚本如下:

代码语言:javascript
复制
#!/bin/bash#####configprocess=5objectlistfile="./delobject"deletepool=rbd#####

  delete_fun()
  {
      date "+%Y-%m-%d %H:%M:%S"
      rados -p $deletepool rm $1
      #sleep 1
  } concurrent()
 {
     start=$1 && end=$2 && cur_num=$3
     mkfifo   ./fifo.$$ &&  exec 4<> ./fifo.$$ && rm -f ./fifo.$$     for ((i=$start; i<$cur_num+$start; i++)); do
         echo "init  start delete process $i" >&4
     done

     for((i=$start; i<=$end; i++)); do
         read -u 4
         {             echo -e "-- current delete: [:delete $i/$objectnum  $REPLY]"
             delob=`sed -n "${i}p" $objectlistfile`
             delete_fun $delob
             echo "delete $delob done"  1>&4 # write to $ff_file
         } &     done
     wait
 }

objectnum=`cat $objectlistfile|wc -l`
concurrent 1 $objectnum $process

上面直接把配置写到脚本里面了,根据需要进行修改

脚本见原文链接

指定并发数目,指定准备删除的对象的list文件,指定对象所在的存储池

然后执行即可

本次测试删除的性能差别

准备对象数据

代码语言:javascript
复制
rbd map testrbd
dd if=/dev/zero of=/dev/rbd2 bs=4M count=1200

获取列表

代码语言:javascript
复制
[root@lab8106 put]# rados -p rbd ls |grep rbd_data.32c0f6b8b4567 > delobject

执行删除脚本

代码语言:javascript
复制
[root@lab8106 put]# sh fastremove.sh

测试结果如下:

并发数

删除时间

1

71s

2

35s

5

5s

25

6s

50

5s

100

5s

从测试结果来看在并发数为5的时候就能达到每秒删除200个对象了,根据自己的需要进行增减,也可以增减删除的间隔加上sleep

总结

在ceph里面一些系统的操作默认是单进程去处理的,一般情况下都没什么问题,在数据量超大,追求效率的时候,我们可以通过加上一些并发加速这个过程,本篇脚本当中的并发同样适用于其他需要并发的场景

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磨磨谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实验过程
    • 开启日志的方法
    • 开启多进程删除的方法
    • 本次测试删除的性能差别
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档