注意

本文档适用于 Ceph 的开发版本。

RBD持久性只读缓存

共享只读父映像缓存

克隆的RBD映像通常只修改父映像的一小部分。例如,在VDI用例中,VM是从相同的基本映像克隆的,最初只在主机名和IP地址上有所不同。在启动期间,所有这些VM都会读取同一父映像数据的一部分。如果我们有父映像的本地缓存,这会加快缓存主机上的读取速度。我们还实现了客户端到集群网络流量的减少。必须在ceph.conf中显式启用RBD缓存。ceph-immutable-object-cache守护程序负责将父内容缓存到本地磁盘上,将来对该数据的读取将由本地缓存提供服务。

注意

RBD共享只读父映像缓存需要Ceph Nautilus版本或更高版本。

启用RBD共享只读父映像缓存

要启用RBD共享只读父映像缓存,需要在ceph.conf文件的section [client]中添加以下Ceph设置

rbd parent cache enabled = true
rbd plugins = parent_cache

不可变对象缓存守护程序

介绍和通用设置

ceph-immutable-object-cache守护程序负责在其本地缓存目录中缓存父映像内容。建议使用SSD作为底层存储,因为这样做可以提供更好的性能。

守护程序的主要组件是

  1. 基于域套接字的IPC: 守护程序在启动时侦听本地域套接字,并等待来自librbd客户端的连接。

  2. 基于LRU的提升/降级策略: 守护程序维护每个缓存文件的缓存命中内存统计信息。如果容量达到配置的阈值,它将降级冷缓存。

  3. 基于文件的缓存存储: 守护程序维护一个简单的基于文件的缓存存储。在提升时,RADOS对象从RADOS集群中获取并存储在本地缓存目录中。

当每个克隆的RBD映像被打开时,librbd会尝试通过其Unix域套接字连接到缓存守护程序。在librbd成功连接后,它会在随后的每次读取时与守护程序协调。在未缓存读取的情况下,守护程序将RADOS对象提升到本地缓存目录,并且下一次对该对象的读取将由缓存提供服务。守护程序维护简单的LRU统计信息,用于在需要时(例如,当缓存容量已满且有压力时)逐出冷缓存文件。

以下是一些重要的缓存配置设置

immutable_object_cache_sock

描述:

用于librbd客户端和ceph-immutable-object-cache守护程序之间通信的域套接字路径。

类型:

String

必需:

默认值:

/var/run/ceph/immutable_object_cache_sock

immutable_object_cache_path

描述:

不可变对象缓存数据目录。

类型:

String

必需:

默认值:

/tmp/ceph_immutable_object_cache

immutable_object_cache_max_size

描述:

不可变缓存的最大大小。

类型:

大小

必需:

默认值:

1G

immutable_object_cache_watermark

描述:

缓存的高水位线。值在 (0, 1) 之间。如果缓存大小达到此阈值,守护程序将开始根据LRU统计信息删除冷缓存。

类型:

浮点数

必需:

默认值:

0.9

ceph-immutable-object-cache守护程序在可选的ceph-immutable-object-cache分发包中提供。

重要

ceph-immutable-object-cache守护程序需要连接RADOS集群的能力。

运行不可变对象缓存守护程序

ceph-immutable-object-cache守护程序应使用唯一的Ceph用户ID。要创建Ceph用户,请使用ceph指定auth get-or-create命令、用户名、monitor caps和OSD caps

ceph auth get-or-create client.ceph-immutable-object-cache.{unique id} mon 'allow r' osd 'profile rbd-read-only'

ceph-immutable-object-cache守护程序可以通过systemd管理,将用户ID指定为守护程序实例

systemctl enable ceph-immutable-object-cache@ceph-immutable-object-cache.{unique id}

ceph-immutable-object-cache也可以通过ceph-immutable-object-cache命令在前台运行

ceph-immutable-object-cache -f --log-file={log_path}

QOS 设置

不可变对象缓存支持限制,由以下设置控制

immutable_object_cache_qos_schedule_tick_min

描述:

不可变对象缓存的最小调度周期。

类型:

毫秒

必需:

默认值:

50

immutable_object_cache_qos_iops_limit

描述:

不可变对象缓存每秒期望的IO操作限制。

类型:

无符号整数

必需:

默认值:

0

immutable_object_cache_qos_iops_burst

描述:

不可变对象缓存IO操作的期望突发限制。

类型:

无符号整数

必需:

默认值:

0

immutable_object_cache_qos_iops_burst_seconds

描述:

不可变对象缓存IO操作的期望突发持续时间(以秒为单位)。

类型:

必需:

默认值:

1

immutable_object_cache_qos_bps_limit

描述:

不可变对象缓存每秒期望的IO字节限制。

类型:

无符号整数

必需:

默认值:

0

immutable_object_cache_qos_bps_burst

描述:

不可变对象缓存IO字节的期望突发限制。

类型:

无符号整数

必需:

默认值:

0

immutable_object_cache_qos_bps_burst_seconds

描述:

不可变对象缓存IO字节的期望突发持续时间(以秒为单位)。

类型:

必需:

默认值:

1

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入