A.4. 块设备缓存选项

Ceph 块设备的用户空间实施(即 librbd )无法利用 Linux 页面缓存,因此它包含了自己的内存中缓存,称为 RBD caching(RBD 缓存)。Ceph 块设备缓存的行为与行为良好的硬盘缓存一样。当操作系统发送阻碍或清空请求时,所有脏数据都会写入 Ceph OSD。这意味着,使用回写缓存和使用功能良好的物理硬盘和正确发送清除(即 Linux 内核 2.6.32 或更高版本)的虚拟机一样安全。缓存使用最早使用 (LRU) 算法,在回写模式中,它可以联合相邻的请求来获得更好的吞吐量。

Ceph 块设备支持回写缓存。若要启用回写缓存,可将 rbd_cache = true 设置为 Ceph 配置文件的 [client] 部分。默认情况下,librbd 不执行任何缓存。写入和读取直接进入存储集群,只有数据处于所有副本的磁盘中时写入才会返回。启用缓存时,写入会立即返回,除非存在超过 rbd_cache_max_dirty 未清空字节。在这种情况下,写入会触发 write-back 并拦截,直到清空了充足的字节为止。

Ceph 块设备支持直写缓存。您可以设置缓存的大小,您可以设置从回写缓存切换到直写缓存的目标和限制。若要启用 write-through 模式,可将 rbd_cache_max_dirty 设置为 0。这意味着,只有在数据处于所有副本的磁盘上时写入才会返回,但读取可能来自缓存。缓存位于客户端上的内存中,每个 Ceph 块设备镜像都有自己的内存。由于缓存对客户端而言是本地的,如果其他人访问该镜像,则没有一致性。在 Ceph 块设备上运行其他文件系统(如 GFS 或 OCFS)将无法用于启用缓存。

默认情况下,Ceph 块设备的 Ceph 配置设置必须在 Ceph 配置文件的 [client] 部分中设置,默认为 /etc/ceph/ceph.conf

设置包括:

rbd_cache
描述
为 RADOS 块设备 (RBD) 启用缓存。
类型
布尔值
必填
默认
true
rbd_cache_size
描述
以字节为单位的 RBD 缓存大小。
类型
64 位整数
必填
默认
32 MiB
rbd_cache_max_dirty
描述
以字节为单位的 限制,达到时缓存将触发回写。如果为 0,则使用直写缓存。
类型
64 位整数
必填
约束
必须小于 rbd 缓存大小
默认
24 MiB
rbd_cache_target_dirty
描述
缓存开始将数据写入数据存储前的 脏目标。不要阻止写入到缓存。
类型
64 位整数
必填
约束
必须小于 rbd cache max dirty
默认
16 MiB
rbd_cache_max_dirty_age
描述
在开始回写前,脏数据在缓存中的秒数。
类型
浮点值
必填
默认
1.0
rbd_cache_max_dirty_object
描述
对象的脏限制 - 设为 0,用于从 rbd_cache_size 自动计算。
类型
整数
默认
0
rbd_cache_block_writes_upfront
描述
如果为 true,它将在 aio_write 调用完成前阻止写入缓存。如果为 false,它将在调用 aio_completion 之前阻止。
类型
布尔值
默认
false
rbd_cache_writethrough_until_flush
描述
以直写模式开始,并在收到第一个 flush 请求后切换到回写模式。如果 rbd 上运行的虚拟机太旧而无法发送清空,如 Linux 中的 virtio 驱动程序 2.6.32 之前,启用此设置比较保守,但安全设置。
类型
布尔值
必填
默认
true