带你读《存储漫谈:Ceph原理与实践》——3.1.4 RBD Cache

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 带你读《存储漫谈:Ceph原理与实践》——3.1.4 RBD Cache

3.1.4  RBD Cache


1. RBD Cache 介绍

RBD Cache 在 Ceph 的块存储接口中,用来缓存客户端的数据,它主要提供读缓存和写合并功能,最终提高 I/O 读写的性能。需要注意的是,Ceph 既支持以内核模块方式动态地为 Linux 主机提供块设备(KRBD),也支持以 QEMU Block Driver 的形式为 VM 提供虚拟块设备(QEMU+librbd),本章节描述的是第二种形式。

RBD Cache 目前在 librbd 中主要以 Object Buffer Extent 为基本单位进行缓存,一个RBD 块设备在 librbd 层以固定大小分为若干个对象,而读写请求通常会有不同的 I/O 尺寸,每个请求的 Buffer 大小都会以 Object 为单位放到一个或多个 Object Buffer Extent 中。

目前 RBD Cache 只支持以内存形式存在,因此需要提供一些策略来不断回写到 Ceph集群来实现数据持久化,以防止客户端掉电引起的 RBD Cache 缓存数据丢失。

在 librbd 中有若干选项来控制 RBD Cache 的大小和回写策略。

rbd_cache_size :控制 librbd 能使用的最大缓存大小。

rbd_cache_max_dirty :控制缓存中允许脏数据的最大值。

rbd_cache_target_dirty :控制 RBD Cache 开始执行回写过程的脏数据水位线,其数值不能超过 rbd_cache_max_dirty 大小。

rbd_cache_max_dirty_age :控制缓存中单个脏数据最大的存在时间,避免脏数据长时间存在。

除了在空间维度和时间维度控制缓存回写逻辑之外,librbd 也提供了 flush 接口,该接口同样能够触发缓存中的脏数据回写操作。

因为 RBD Cache 是以内存的形式存在,因此会出现下面的问题:

(1)内存作为缓存,缓存空间不能太大;

(2)Kernel crash 或者主机掉电,很容易造成数据丢失的风险。

为了解决上面的问题,Ceph 引入一种非易失存储介质代替内存,持久化 RBD Cache 数据。为了适配这种新的存储介质,RWL(Replicated Write Log)技术被开发出来,下面对 RWL进行介绍。

2. RWL 使用的 PMDK 技术


PMDK, 全 称 Persistent Memory Development Kit, 它 是 一 套 具 有 DAX(Direct Access)访问特性的开发工具库。

NVM(Non-Volatile Memory)存储能够使具备 DAX 功能的文件系统直接暴露在用户空间,用户态程序可以使用标准的文件系统 API 来操作 NVM,同样也可以使用 mmap将其直接映射到用户空间。无论使用哪种方式,对 NVM 的操作都会直接转换为对 NVM的登录(load)和存储(store),中间没有页面缓存(page cache)(这也是支持 DAX 模式的文件系统和普通文件系统之间的主要区别)。

在使用文件系统时,数据的完整性一般都由文件系统来保证,而 NVM 作为一种非易失性存储,在使用 mmap 方式来读写时,如何保证数据的完整性和一致性就显得尤为重要。通常有很多种方式可以做到这一点(后文将展开讨论),比如靠上层应用程序自己的策略来保证,也可以使用第三方库来保证,PMDK(更具体点来说是 PMDK 中的 libpmemobj)就是用来完成这项工作的。在图 3-9 中箭头的位置都是 libpmemobj 库的位置。

image.png

图 3-9 PMDK 架构和应用

3. RWL 架构


图 3-10 所示的是 RWL 的架构,从图中可以看出,计算节点提供 persist memory,来存储缓存数据,在存储节点也提供 persist memory,作为计算节点缓存数据的冗余备份。

RWL 保存缓存数据的过程如下。

(1)客户端对 Image 发送写请求;

(2)每个 Image 在本地的 persist memory 中,都会有一块独立的空间来存储缓存数据;

(3)把客户端的数据和一些控制信息封装成一个结构体,这里称作数据日志,存储在persist memory 中,每写一些数据日志(比如 30 条数据日志),会增加一条同步日志;

image.png

图 3-10 RWL 架构

(4)与此同时,通过 RDMA 技术,把封装的结构体在远端的 persist memory 中再备份,达到容灾的目的。

因为客户端每次的写入数据都优先存储在 persist memory 中,而没有通过 librbd 写入 Ceph 存储集群中,所以这些数据会标记为脏数据;RWL 会根据一些条件,把这些脏数据写入 Ceph 集群,这样 persist memory 就会有空间存储新的客户端数据。

表 3-1 所示是开启 RWL 和没有开启 RWL 的测试数据。通过数据可以看出,开启RWL 后,IOPS 得到了大幅提升。

image.png


4. RWL 的优点和局限性

RWL 可以提高数据的读写性能,满足用户对高性能的要求,即使服务器掉电,数据也不会丢失,为用户提供了较高的数据高可用性。

RWL 必须使用 persist memory 存储设备,普通的存储设备无法满足其使用要求,目前这种 persist memory 设备仍然相当昂贵,用户需要综合考虑该方案的性价比。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 容灾 安全
带你读《存储漫谈:Ceph原理与实践》——3.1.3 远程复制
带你读《存储漫谈:Ceph原理与实践》——3.1.3 远程复制
带你读《存储漫谈:Ceph原理与实践》——3.1.3 远程复制
|
存储 Linux 虚拟化
带你读《存储漫谈:Ceph原理与实践》——3.1.1 块设备映射
带你读《存储漫谈:Ceph原理与实践》——3.1.1 块设备映射
|
存储 缓存 算法
带你读《存储漫谈:Ceph原理与实践》——3.1.2 快照与克隆
带你读《存储漫谈:Ceph原理与实践》——3.1.2 快照与克隆
|
存储 算法 网络性能优化
带你读《存储漫谈:Ceph原理与实践》——3.1.5 QoS
带你读《存储漫谈:Ceph原理与实践》——3.1.5 QoS
|
存储 算法
带你读《存储漫谈:Ceph原理与实践》——3.1.6 Burst I/O
带你读《存储漫谈:Ceph原理与实践》——3.1.6 Burst I/O
|
3月前
|
存储 测试技术
阿里云块存储问题之测试不聚焦可能导致测试不稳定如何解决
阿里云块存储问题之测试不聚焦可能导致测试不稳定如何解决
39 3
|
4月前
|
存储 固态存储 大数据
阿里云服务器实例、块存储、带宽收费标准与云服务器最新活动价格参考
阿里云服务器价格通常包括云服务器实例价格、块存储价格和带宽价格组成,云服务器不同实例规格收费标准不一样,选择不同类型的块存储收费标准也不一样,选择不同的带宽收费标准也不一样。现在阿里云轻量应用服务器2核4G4M峰值带宽298元1年,云服务器2核4G5M固定带宽199元1年、2核8G1M固定带宽652.32元1年、4核8G1M固定带宽955.58元1年、4核16G10M带宽100G ESSD Entry云盘70元1个月。本文为大家整理了目前阿里云服务器实例、块存储、带宽收费标准与云服务器最新的活动价格情况,以供参考。
阿里云服务器实例、块存储、带宽收费标准与云服务器最新活动价格参考
|
3月前
|
存储
阿里云块存储问题之高效的Code Review可以发现70-90%的bug如何解决
阿里云块存储问题之高效的Code Review可以发现70-90%的bug如何解决
37 1
|
3月前
|
存储 Linux 测试技术
阿里云块存储问题之在编码和提交代码时确保代码提交的原子性如何解决
阿里云块存储问题之在编码和提交代码时确保代码提交的原子性如何解决
41 0
|
3月前
|
存储 Cloud Native Linux
阿里云块存储问题之poison发布阻塞机制实现如何解决
阿里云块存储问题之poison发布阻塞机制实现如何解决
41 0

热门文章

最新文章

相关实验场景

更多