Ceph 性能优化 之 带掉电保护的Rbd Cache

该文首次发表于’盛大游戏G云’微信公众号上,现贴到本人博客,方便大家交流学习

带掉电保护的Rbd Cache方案

Ceph是一款开源的统一存储,在单一的系统上提供块、对象及文件存储接口。近年随着公有云/私有云的快速普及,凭借其自身良好的稳定性、扩展性及与Openstack的深度整合,Ceph Rbd块存储被大量的使用,作为VM的数据存储。有Ceph Rbd部署实践经验的IT工程师们对Rbd Cache一定不会陌生,它是Ceph Rbd客户端缓存,开启后能显著提高快设备i/o性能,但是它存在两个问题:

  1. 由于以内存作为缓存,缓存空间不能太大
  2. 还是因为以内存做缓存,所以存在掉电数据丢失的风险

为了克服原生Rbd Cache存在的上述不足,盛大游戏G云对Rbd Cache进行了改良,我们的方案是:用高速非易失存储介质(如:SSD、SAS)替换内存作为Rbd Cache,通过用空间换时间的方式,保证i/o性能并规避上述的缺陷。下文将对原生Rbd Cache及改良后的方案分别加以说明。

下文称未经修改的Ceph Rbd Cache为原生Rbd Cache,改良后的方案称为G云版Rbd Cache,引用的对象术语及代码片段来自Hammer Ceph-0.94.1

原生Rbd Cache

根据上述逻辑图,Rbd Cache是Ceph块存储客户端库librbd内实现的一个缓存层,主要提供读缓存和写合并功能,用来提高读写性能,默认情况下Rbd Cache处于开启状态。需要注意的是:Ceph既支持以内核模块方式动态地为Linux主机提供块设备,也支持以Qemu Block Driver的形式为VM提供虚拟块设备,本文描述的是第二种形式。下面我们来看看Rbd Cache的内部实现

上述逻辑图并未完整画出i/o流经的所有组件,还请读者注意。

Rbd Cache的实现机制

librbd模块内默认以4MB为单位对虚拟磁盘进行切分,每个4MB的chunk称为一个Object,以ObjectExtent为单位进行数据缓存;应用i/o通常会有不同的大小,每个i/o请求的数据以Object为单位缓存到一个或多个ObjectExtent中。Rbd Cache常用配置参数如下:

  • rbd cache size : librbd能使用的最大缓存大小
  • rbd cache max dirty : 缓存中允许的脏数据最大值,用来控制回写大小,不能超过rbd cache size
  • rbd cache target dirty :开始执行回写的脏数据阀值,不能超过rbd cache max dirty
  • rbd cache max dirty max :缓存中脏数据的最大缓存时间,用来避免因脏数据未达到
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值