前言

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

rbd类型 rbd rm 方法 rados -p rm方法
未填充很多
已填充很多

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

实验过程

开启日志的方法

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

[client]
debug_ms=1
log_file=/var/log/ceph/rados.log

这个默认也会在执行命令的时候打印到前台,所以处理下比较好,最简单的办法就是做alias

添加下面内容到 /etc/bashrc

alias ceph='ceph  --debug-ms=0'
alias rados='rados --debug-ms=0'

然后命令行执行

source /etc/bashrc

在做操作的时候就只会记录日志,前台不会打印调试信息了,但是这个会影响到ceph daemon的命令,这个可以用这种方式在线屏蔽即可

ceph --debug_ms=0  -s

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

cat  /var/log/ceph/rados.log|grep delete|grep -v ">"|grep 13:29:46|wc -l

原始的快速删除方法

rados -p rbd ls | grep '^rbd_data.25ae86b8b4567' | xargs -n 200  rados -p rbd rm

开启多进程删除的方法

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

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

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

获取prifix

[root@lab8106 put]# rbd info testrbd|grep prefix
block_name_prefix: rbd_data.32c0f6b8b4567

获取列表

[root@lab8106 put]# rados -p rbd ls |grep rbd_data.32c0f6b8b4567 > delobject

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

删除的fastremove.sh脚本如下:

#!/bin/bash

#####config
process=5
objectlistfile="./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

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

#####config
process=10
objectlistfile="./delobject"
deletepool=rbd
#####

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

然后执行即可

本次测试删除的性能差别

准备对象数据

rbd map testrbd
dd if=/dev/zero of=/dev/rbd2 bs=4M count=1200

获取列表

[root@lab8106 put]# rados -p rbd ls |grep rbd_data.32c0f6b8b4567 > delobject

执行删除脚本

[root@lab8106 put]# sh fastremove.sh

测试结果如下:

并发数 删除时间
1 71s
2 35s
5 5s
25 6s
50 5s
100 5s

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

删除rbd的元数据信息

因为只删除了对象没删除元数据信息

[root@lab101 ceph]# rados -p rbd listomapvals rbd_directory
id_519216b8b4567
value (6 bytes) :
00000000 02 00 00 00 7a 70 |....zp|
00000006 name_zp
value (17 bytes) :
00000000 0d 00 00 00 35 31 39 32 31 36 62 38 62 34 35 36 |....519216b8b456|
00000010 37 |7|
00000011 [root@lab101 ceph]# rados -p rbd rmomapkey rbd_directory id_519216b8b4567
[root@lab101 ceph]# rados -p rbd listomapvals rbd_directory
name_zp
value (17 bytes) :
00000000 0d 00 00 00 35 31 39 32 31 36 62 38 62 34 35 36 |....519216b8b456|
00000010 37 |7|
00000011 [root@lab101 ceph]# rados -p rbd rmomapkey rbd_directory name_zp

这样就把名称为zp的rbd删除了

总结

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

变更记录

Why Who When
创建 武汉-运维-磨渣 2017-07-27
增加前台调试信息的屏蔽 武汉-运维-磨渣 2017-07-28
更新元数据的清理 武汉-运维-磨渣 2018-04-12

RBD快速删除的方法分析与改进的更多相关文章

  1. oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)

    oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...

  2. ps快速删除圆角图片旁白的白色区域方法

    简单实用5招的ps快速删除圆角图片旁白的白色区域方法 1.图像-模式-rgb颜色 2.双击背景取消图层锁定 3.用魔棒工具点击要删除的区域 4.delete删除 5.另存为png图片

  3. Linux 快速删除大量小文件方法

    进行以下两步操作即可: 1.第一步:创建空的文件夹: mkdir  /tmp/blank 2.第二步:执行以下命令:rsync --delete-before -d /tmp/blank/ /home ...

  4. (总结)Linux下使用rsync最快速删除海量文件的方法

    昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所 ...

  5. Linux下使用rsync最快速删除海量文件的方法

    常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所以必须要采取一些非常手段.我们可以使用rsync来实现快速删除大量文件. 1.先安装rsync:  yum install rsyn ...

  6. (转)Linux下使用rsync最快速删除海量文件的方法

    转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...

  7. Keil C动态内存管理机制分析及改进

    Keil C是常用的嵌入式系统编程工具,它通过init_mempool.mallloe.free等函数,提供了动态存储管理等功能.本文通过对init_mempool.mallloe和free这3个Ke ...

  8. Keil C动态内存管理机制分析及改进(转)

    源:Keil C动态内存管理机制分析及改进 Keil C是常用的嵌入式系统编程工具,它通过init_mempool.mallloe.free等函数,提供了动态存储管理等功能.本文通过对init_mem ...

  9. 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...

随机推荐

  1. super函数

    Python面向对象中super用法与MRO机制:https://www.cnblogs.com/chenhuabin/p/10058594.html python 中 super函数的使用:http ...

  2. 【C语言程序设计】小游戏之俄罗斯方块(一)!适合初学者上手、练手!

    俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法. 今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动.旋转. ...

  3. 用CentOS 7自制Vagrant Box文件

      写在前面 利用vagrant保持开发生产环境一致是一个很好的方法,不过vagrant官网上的box文件下载是真的很慢,因此,这里教大家如何自制box文件. 这篇文章你会接触到: vagrant使用 ...

  4. selenium基础--登录简单的网站

    import time from selenium import webdriver from lxml import etree from selenium.webdriver import Act ...

  5. 对于app监测root权限或者强制升级

    只做分享学习 以下方法对于大多数Root检测的App (不限于仅银行类App),均适用. 另,"主用户 + Island用户" 情况下: 如果App仅安装在 Island下,当绕不 ...

  6. java-try catch中return在finally之前 还是之后执行

    finally语句在return语句执行之后return返回之前执行的. finally块中的return语句会覆盖try块中的return返回. 如果finally语句中没有return语句覆盖返回 ...

  7. 10 张图打开 CPU 缓存一致性的大门

    前言 直接上,不多 BB 了. 正文 CPU Cache 的数据写入 随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cac ...

  8. java查询elasticsearch聚合

    java查es多分组聚合: SearchRequestBuilder requestBuilderOfLastMonth = transportClient.prepareSearch(TYPE_NA ...

  9. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  10. SAM学习笔记&AC自动机复习

    形势所迫,一个对字符串深恶痛绝的鸽子又来更新了. SAM 后缀自动机就是一个对于字符串所有后缀所建立起的自动机.一些优良的性质可以使其完成很多字符串的问题. 其核心主要在于每个节点的状态和$endpo ...