前言

从15年3月接触Ceph分布式存储系统,至今已经5年了;因为工作的需要,对Ceph的主要模块进行了较深入的学习,也在Ceph代码层面做了些许改进,以满足业务需要(我们主要使用M版本)。最近得闲,将过往的一些改进以及优化思路记录下了,希望能对后来者有所帮助。

之前有分享过RBD持久化缓存以及卷QoS,感兴趣的读者可以翻阅前文

这是第一篇:Ceph Peering以及数据均衡的改进

背景知识

在Ceph集群的Crushmap发生变化后(比如:扩容,缩容等操作),Ceph为保证各OSD数据的均衡以及
满足数据副本要求会在各OSD间执行数据均衡:

  1. Peering阶段:在数据均衡前,主OSD发起Peering(可以理解为主备副本OSD握手协商),选出权威OSD(拥有最新PG Log的OSD)以及计算出各OSD之间的差异数据,准备好Missing列表,为后续的数据复制做准备。为了保证,获取的差异数据的一致性,该阶段不允许写, Ceph以PG为粒度执行Peering
  2. Recovery/Backfill阶段:根据第一阶段中的Missing列表,各OSD通过Push(主OSD发送数据给备OSD)/Pull(主OSD从备OSD拉取数据)数据完成本地数据的修复。 该阶段允许读写,进行以对象为单位的跨网络数据复制,虽然提供了一些控制参数,但还是会消耗大量的磁盘和网络资源

优化思路

  1. 针对Peering阶段:
    1.1 分批同步,延迟非主OSD的同步.
    默认情况下,PG的主OSD只要确认副本OSD无法连通,就会发起Peering,而各个OSD独立发起Peeering请求,并不会有任何的协商。所以,在出现故障后,会发现大量的PG进入Peering状态。比如:三副本的集群,一个OSD中有300个PG,如果OSD发生离线或者上线,那么这300PG会同时发起Peering,根据CrushMap的(基本)均衡分配策略,实际上需要立即进行Peering的PG只有1/3,剩余的2/3可以延迟进行,那么我们可以通过分批同步,减少同时进行Peering的PG数量来缓解IO被Block的问题。

我们知道与数据恢复相关的PG主要状态为:Init->Reset->Started(包含Start子状态),在Start状态下,如果是主OSD,则进入Primary状态并发起Peering;如果是副本OSD,则进入Stray状态。下面是默认情况下,PG状态转换的一个简图:

我们在原状态图中添加子状态DeferPeering和RepDeferPeering,将部分Peering请求添加到延迟队列中,分批或者有IO落到相应的PG上,再发起Peering。下面是修改后的PG状态图:

2. 针对Recovery/Backfill阶段:
2.1 利用PG Log中的dirty extent进行增量恢复
默认情况下,Recovery/Backfill以对象为单位进行读取->传输->写入的恢复过程。在RBD场景下,通常一个对象为4MB,也就是说:不管对象中的脏数据是多大,都需要复制整个对象,在随机io场景下,数据的放大是很严重的,比如:一个对象只有4k的数据发生了更改,却要复制4MB的对象,放大了1024倍。

我们知道Recovery是借助PG Log来识别各副本之间数据的差异的,如果我们能够在PG Log中记录写IO的操作区间<offset, len>,那么就可以实现增量复制,PG Log Entry修改前后示例:
Old:

op obj everison
M “abc” 5.13

New:

op obj eversion dirty_extents
M “abc” 5.13 <off, len>

有了dirty_extents, 我们就可以通过打包dirty_extents指向的内容进行数据恢复,而不需要复制整个对象。

Tips:对于Truncate(可能扩大也可能缩小卷),快照的COW操作(由于故障情况下,数据恢复次序的原因)操作应该采用默认的方式恢复。

2.2 通过限流来控制数据复制流量
默认情况下,Ceph定义了一些参数来控制Recovery/Backfill的并发度,但实际测试下来,效果并不理想。为此,我们可以通过限流来控制数据复制的速度,比如:基于Leeky Bucket的QoS,更精细些,还可以根据OSD当前繁忙度来动态调节QoS的值,实现动态适配。

Tips: M版本中,Ceph将所有类型的IO请求都放入到了相同的shardedwq队列中,添加流量控制机制,最好将Recovery/Backfill相关的请求,如:PUSH/PULL请求抽取出来放到独立的队列,由独立的线程(池)来处理,会有更好的性能表现。

通过上述改进,数据平衡对业务的影响可以控制在30%以内。

本文只提供可行的实现思路,不提供实现细节,如有不清楚的地方,可以给我留言。

Ceph Peering以及数据均衡的改进思路相关推荐

  1. leach算法改进思路

    Leach算法是一种用于无线传感器网络中的分簇协议,它使用轮流担任簇首的方法来平衡网络中每个节点所承担的负载.尽管Leach算法在传感器网络中表现出良好的性能,但它仍然可以通过以下几种方式进行改进: ...

  2. 「AI科技」机器学习算法之K-means算法原理及缺点改进思路

    https://www.toutiao.com/a6641916717624721933/ 2019-01-03 08:00:00 K-means算法是使用得最为广泛的一个算法,本文将介绍K-mean ...

  3. 深入理解GlusterFS之数据均衡

    GlusterFS是一个免费的开源分布式文件系统,具有无中心节点.堆栈式设计.全局统一命名空间.高可用.高性能和横向扩展等特点,在业界被广泛使用.本文主要介绍GlusterFS的数据均衡功能(即reb ...

  4. 【路径规划】A*算法方法改进思路简析

    A*算法方法改进思路简析 0. 前言 1. A*算法的总体流程 2. A*算法的改进 2.1 启发函数的选择与优化 2.1.1 预估函数的选择 2.1.2 为启发函数增加权重系数 2.1.3 节点比较 ...

  5. NMS技术总结(NMS原理、多类别NMS、NMS的缺陷、NMS的改进思路、各种NMS方法)

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨仿佛若有光157 来源丨CV技术指南 前言  本文介绍了NMS的应用场合.基本原理.多类别NM ...

  6. MapReduce 数据倾斜以及解决思路

    MapReduce 数据倾斜以及解决思路 1.小背景 在mapreduce的分布式解决框架中,数据处理主要分为2个步骤,map阶段和reduce阶段 map阶段主要是数据转换,也就是按照预期把输入的数 ...

  7. ML之LGBMRegressor(Competition):2018年全国大学生计算机技能应用大赛《住房月租金预测大数据赛》——设计思路以及核心代码—191017再次更新

    ML之LGBMRegressor(Competition):2018年全国大学生计算机技能应用大赛<住房月租金预测大数据赛>--设计思路以及核心代码-191017再次更新 目录 竞赛相关信 ...

  8. vector自动扩容如何实现_腾讯云ClickHouse如何实现自动化的数据均衡?

    ​一.引言 ClickHouse 是一个用于联机分析( OLAP )的列式数据库管理系统( DBMS ).它于 2016 年以 Apache 2.0 协议开源,以优秀的查询性能,深受广大大数据工程师欢 ...

  9. 大数据平台的搭建思路是怎样的

    大数据平台的搭建就是企业面临的问题,搭建大数据平台有哪些思路?怎么样的搭建路径可以让企业少走弯路?什么样的架构是业内标准?通过什么手段来分析和展示已有的数据? 或许这些问题会萦绕在您的心头,那么今天就 ...

最新文章

  1. css炫酷标题,纯css3鼠标滑过图片炫酷标题显示特效
  2. Spring管理事务的若干配置形式
  3. Delphi XE5实现减少编译出来的程序体积
  4. sql distinct 去重复 (mysql)
  5. hdu3555 Bomb 数位dp
  6. RabbitMQ入门HelloWorld(C#)(翻译)
  7. 【经典算法】第三回:插入排序
  8. php远程调试 没有光标,老法师谈技术 - PHP远程单步调试
  9. Hibernate逍遥游记-第5章映射一对多-02双向(set、key、one-to-many、inverse、cascade=all-delete-orphan)...
  10. 64位window 7安装2TB以上大容量硬盘
  11. 如何查看手机里的.db数据库文件
  12. Allegro中的NET到NET之间的间距设置-网络之间的间距
  13. Xilinx XC7Z020双核ARM+FPGA开发板试用合集——硬件赏析
  14. 深入理解计算机系统 csapp 家庭作业(第三章完整版)
  15. 我们都被GitHub出卖了!逃跑吧兄弟!
  16. android m4a播放器,如何在android上解码m4a音频
  17. 最全的计算机会议排名
  18. 实验室管理相关系统概念
  19. oracle 并行查询
  20. Python学习笔记——数据分析之数据可视化工具实战案例:世界高峰数据可视化

热门文章

  1. 2020年宁夏回族自治区水稻种植分布数据
  2. 电网设备股集体上涨,国家电网称将推进电网数字化转型
  3. C++-win32-GetLastError的返回值的含义
  4. 【WIN32之旅】WINDOWS错误处理与参考(四)
  5. Win7远程连接问题:凭据不工作 没有授权此用户账户
  6. 入手评测:i9 11900K和r9 5900x 区别 i911900K和r95900x选哪个
  7. 锐龙r7 5800h和酷睿i7 11800h性能差多少 锐龙r75800h和i711800h跑分
  8. Linux 文件内容查看
  9. 第九章 SQL Server的简单应用
  10. 远程连接内网路由器下的电脑