Ceph recover的速度控制
前言
磁盘损坏对于一个大集群来说,可以说是必然发生的事情,即使再小的概率,磁盘量上去,总会坏那么几块盘,这个时候就会触发内部的修复过程,修复就是让不满足副本要求的PG,恢复到满足的情况
一般是踢掉坏盘和增加新盘会触发这个修复过程,或者对磁盘的权重做了修改,也会触发这个迁移的过程,本篇是用剔除OSD的方式来对这个修复的控制做一个探索
大部分场景下要求的是不能影响前端的业务,而加速迁移,忽略迁移影响不在本篇的讨论范围内,本篇将用数据来说明迁移的控制
本次测试在无读写情况下进程的
几个需要用到脚本和命令
磁盘本身的大概速度
[root@lab8106 ~]# ceph tell osd.0 bench |
得到的结果为102MB/s
获取osd上pg迁移的对象的脚本
OSD的日志需要开启到10,这里采取动态开启的方式
ceph daemon osd.0 config set debug_osd 10 |
日志解析的脚本
cat /var/log/ceph/ceph-osd.0.log | awk '$7=="finish_recovery_op"&&$8=="pg[0.15(" {sub(/.*/,substr($2,1,8),$2); print $0}'|awk '{a[$1," ",$2]++}END{for (j in a) print j,a[j]|"sort -k 1"}' |
获取osd.0上的pg0.15的迁移速度
运行后的效果如下:
2017-08-08 17:14:33 1 |
设置不迁移和恢复迁移
ceph osd set nobackfill;ceph osd set norecover |
获取当前的正在迁移的PG
[root@lab8106 ~]# ceph pg dump|grep recovering |
过滤下输出结果
[root@lab8106 ~]# ceph pg dump|grep recovering|awk '{print $1,$2,$4,$10,$15,$16,$17,$18}' |
动态监控PG的迁移
watch -n 1 -d "ceph pg dump|grep recovering|awk '{print ,,,,,,,}'" |
我们要看PG 0.15的
防止缓存影响
同步数据然后清空缓存
sync |
重启OSD进程
systemctl restart ceph-osd.target |
磁盘的读写速度
dstat -td -D /dev/sdb -o disk.csv |
sdb为需要监控的盘
测试的步骤与流程
整个测试需要保证每一次获取数据的过程都近似,这样才能最大程度减少环境对数据的影响
开始需要写入一些测试数据,这个可以用
rados -p rbd bench 3600 --no-cleanup |
这个让每个PG上面大概有600-700个object,写入这个数据后就不再写入数据了
每一轮测试步骤如下:
- 恢复集群状态为active+clean
- 设置nobackfill,norecover
- 清空缓存
- 设置需要调整的参数
- 重启osd进程
- 停止osd,out osd
- 观察需要迁移的数据(尽量每次监测同一个PG)
- 清空日志,设置OSD debug 10
- 开启监控磁盘脚本
- 解除设置nobackfill,norecover
- 动态监控迁移状态,等待指定PG迁移完毕
- 停止磁盘监控脚本
- 获取PG迁移的情况,获取磁盘的读写情况
- 数据处理
每一轮测试需要按上面的步骤进行处理
测试分析
我的测试选择的是osd.4,按上面的步骤进行处理后,到了观察PG的步骤,此时因为做了不迁移的标记,只会状态改变,不会真正的迁移 我们来观察下需要迁移的pg
默认情况下的
[root@lab8106 ~]# ceph pg dump|grep recovering|awk '{print $1,$2,$10,$15,$16,$17,$18}' |
可以看到这个环境下,每个OSD上面基本上是一个PG的写入,和一个PG的读取,实际上是读写同时在进行的
默认的
osd_max_backfills = 1
osd_recovery_max_active = 3
两个参数是一个是每个OSD上面启动的恢复的PG数目,下面一个是控制同时恢复的请求数目
默认的参数的情况
上图为迁移的对象数目
上图为OSD的磁盘读取写入的情况
可以看到迁移的对象每秒在6-15之间
磁盘上的读取为20-60MB/s,写入为80MB左右
这个只是默认的情况下的,占用了磁盘带宽的80%左右,在真正有写入的时候,因为有优先级的控制,占的带宽可能没那么多,本篇目的是在静态的时候就把磁盘占用给控制下来,那么即使有读写,恢复的磁盘占用只会更低
调整一个参数
osd_recovery_max_active = 3
调整如下
osd_recovery_max_active = 1
从磁盘占用上和迁移上面可以看到,磁盘的负载确实降低了一些,峰值从16降低到了11左右
sleep 参数的控制
下面是一个关键的参数了
osd_recovery_sleep = 0
这个在jewel最新版本下还是0,在luminous版本已经设置成ssd是0,sata变成0.1,相当于增加了一个延时的过程,本篇主要就是对这个参数进行研究,看下能控制最低到一个什么程度
下面的测试的数据就统计到一个图当中去了,这样也便于对比的
上面测试了几组参数:
sleep=0;sleep=0.1;sleep=0.2;sleep=0.5 |
从上面的图中可以看到:
迁移速度从12降低到1-2个
磁盘读取占用从40Mb/s降到 8Mb/s左右
磁盘写入的占用从60MB/s-80MB/s降低到8MB/s-40MB/s
结论
通过sleep的控制可以大大的降低迁移磁盘的占用,对于本身磁盘性能不太好的硬件环境下,可以用这个参数进行一下控制,能够缓解磁盘压力过大引起的osd崩溃的情况
Ceph recover的速度控制的更多相关文章
- ceph install
Ceph : performance, reliability and scalability storage solution Contents 1 Introduction 1.1 Testing ...
- CEPH集群操作入门--配置
参考文档:CEPH官网集群操作文档 概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...
- ceph常用运维技巧总结1
格式 json 数据增强可读性 --format json-pretty -f json-pretty ceph quorum_status -f json-pretty ceph mon_statu ...
- “网红架构师”解决你的Ceph 运维难题
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由Tstack发表于云+社区专栏 本文为长篇连续剧,将分多个篇幅发表,主要介绍了从动手部署环境到后期运营故障处理过程中常见的问题,内容由 ...
- 解析CEPH: 存储引擎实现之一 filestore
Ceph作为一个高可用和强一致性的软件定义存储实现,去使用它非常重要的就是了解其内部的IO路径和存储实现.这篇文章主要介绍在IO路径中最底层的ObjectStore的实现之一FileStore. Ob ...
- Ceph osd故障恢复
1 调高osd的日志等级 加上红框那一行就可以了 osd的日志路径:/var/log/ceph/ceph-osd.3.log 注意:加上了这一行后日志会刷很多,所以要特别注意日志容量的变化,以防把v ...
- 分布式存储Ceph之PG状态详解
https://www.jianshu.com/p/36c2d5682d87 1. PG介绍 继上次分享的<Ceph介绍及原理架构分享>,这次主要来分享Ceph中的PG各种状态详解,PG是 ...
- Ceph 存储集群2-配置:心跳选项、OSD选项、存储池、归置组和 CRUSH 选项
一.心跳选项 完成基本配置后就可以部署.运行 Ceph 了.执行 ceph health 或 ceph -s 命令时,监视器会报告 Ceph 存储集群的当前状态.监视器通过让各 OSD 自己报告.并接 ...
- ceph各个版本之间参数变化分析
前言 本篇主要是分析ceph的版本之间参数的变化,参数变化意味着功能的变化,通过参数来分析增加,删除,修改了哪些功能,以及版本之间的变化,本篇主要通过导出参数,然后通过脚本去比对不同的版本的参数变化 ...
随机推荐
- mongodb之一些简单的增删改查语句
数据库操作:show dbs;#查看数据库use test;#如果没有就创建一个db;#查看当前数据库db.dropDatabase();#删除数据库 数据操作:show collections:#查 ...
- 【sparkSQL】创建DataFrame及保存
首先我们要创建SparkSession val spark = SparkSession.builder() .appName("test") .master("loca ...
- c#的DateTime.Now详解
(转自:http://www.cnblogs.com/lida/archive/2011/01/02/1924197.html) //2008年4月24日 System.DateTime.Now.To ...
- Node负载能力测试
需求很简单,就是提供一个服务接口收集端上传来的日志文件并保存,要求能承受的QPS为5000. 以前从来都没考虑过Node服务的负载能力,用 koa + co-busboy 接受上传文件请求并用 fs ...
- Android系统自带分享功能的实现(可同时分享文字和图片)
/** * 分享功能 * * @param context * 上下文 * @param activityTitle * Activity的名字 * @param msgTitle * 消息标题 ...
- 7.usr下重要目录和文件详解
1./usr下重要目录和文件详解: /usr(存放用户安装的应用软件目录,如MySQL,Apache,这是一个非常重要的目录,类似于Windows下的Program Files目录,用户的很多应用程序 ...
- 人生苦短之我用Python篇(基础)
Python简介 Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, ...
- (效果五)js获取客户端ip地址及浏览器信息
在前端开发的时候,有时候为了测试需要得到访问客户的ip地址.虽说是后端来做的,但是我们前端也可以完成. 先说下获取用户ip地址,包括像ipv4,ipv6,掩码等内容,但是大部分都要根据浏览器的支持情况 ...
- java如何获取当前时间,精确到毫秒
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Calendar; //func1 Calenda ...
- 重温CLR(八 ) 泛型
熟悉面向对象编程的开发人员都深谙面向对象的好处,其中一个好处是代码重用,它极大提高了开发效率.也就是说,可以派生出一个类,让他继承基类的所有能力.派生类只需要重写虚方法,或添加一些新方法,就可定制派生 ...