A.3. 块设备缓存选项
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