RBD快速删除的方法分析与改进
前言
这个问题在很久以前就有一篇文章进行过讨论 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快速删除的方法分析与改进的更多相关文章
- oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)
oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...
- ps快速删除圆角图片旁白的白色区域方法
简单实用5招的ps快速删除圆角图片旁白的白色区域方法 1.图像-模式-rgb颜色 2.双击背景取消图层锁定 3.用魔棒工具点击要删除的区域 4.delete删除 5.另存为png图片
- Linux 快速删除大量小文件方法
进行以下两步操作即可: 1.第一步:创建空的文件夹: mkdir /tmp/blank 2.第二步:执行以下命令:rsync --delete-before -d /tmp/blank/ /home ...
- (总结)Linux下使用rsync最快速删除海量文件的方法
昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所 ...
- Linux下使用rsync最快速删除海量文件的方法
常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所以必须要采取一些非常手段.我们可以使用rsync来实现快速删除大量文件. 1.先安装rsync: yum install rsyn ...
- (转)Linux下使用rsync最快速删除海量文件的方法
转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...
- Keil C动态内存管理机制分析及改进
Keil C是常用的嵌入式系统编程工具,它通过init_mempool.mallloe.free等函数,提供了动态存储管理等功能.本文通过对init_mempool.mallloe和free这3个Ke ...
- Keil C动态内存管理机制分析及改进(转)
源:Keil C动态内存管理机制分析及改进 Keil C是常用的嵌入式系统编程工具,它通过init_mempool.mallloe.free等函数,提供了动态存储管理等功能.本文通过对init_mem ...
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...
随机推荐
- 习题3-3 数数字(Digit Counting , ACM/ICPC Danang 2007, UVa1225)
#include<stdio.h> #include<string.h> int main() { char s[100]; scanf("%s",s); ...
- linux(centos8):zabbix配置邮件报警(监控错误日志)(zabbix5.0)
一,zabbix5.0发邮件报警的准备工作: zabbix5.0在linux平台上的安装:参见这一篇: https://www.cnblogs.com/architectforest/p/129125 ...
- fastdfs之同一台storage server下包含多个store path
一,查看本地centos的版本 [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) 说 ...
- linux(centos8):用grep命令查找文件内容
一,grep的用途: linux平台有最常用的三大文本处理工具:awk/sed/grep grep的功能:搜索指定文件的内容,按照指定的模式匹配,并输出匹配内容所在的行. 需要注意的地方:grep只支 ...
- Apollo基于K8S的部署以及接入
Apollo镜像服务 基于开源Apollo服务进行相关服务镜像打包,实际将分发apollo-adminservice.apollo-configservice和apollo-portal 这三个镜像安 ...
- django—模板相关
关于在html文件中使用模板语言时,一些符号的含义 {{}}:显示变量相关,在模板渲染的时候替换成值 {%%}:处理逻辑相关 django模板语言中,对于列表字典等容器类型,不能够通过[ 索引/键值 ...
- Linux命令的写法
命令名 [选项]... [参数]... 命令名:一般由多个小写字母组成,是大小写敏感 选项:[]里面表示可有可无 ... 表示可以有多个选项 选项的格式: 以-开头的,后面一般跟一个字母或数字,多数情 ...
- 转 js调用提交表单。
今天做网银支付的时候,需要做到点击支付的时候提交订单,然后新窗口打开支付界面. 思路1:window.open(''),这个直接被pass了,因为银行的服务一般都是需要post数据的.就算是可以用ge ...
- BIO编程
在实际的工作开发中,传统的模型有client/service模型.client端和service端要进行通信的话,有一种套接字的方式.传统的socket编程,包含一个socket服务端和一到多个soc ...
- CSS动画之动画模块
过渡模块和动画模块的区别:过渡动画需要人为的去触发这个反应,而动画模块不需要人为相同点:都是动画:都是系统新增的属性:都是要满足三要素才有动画效果三要素:1.告诉系统执行哪个动画,要写出动画名称:an ...