注意

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

RBD 持久化只读缓存

共享,只读父镜像缓存

克隆的 RBD 镜像通常只修改父镜像的一小部分。例如,在一个 VDI 用例中,虚拟机是从同一个基础镜像克隆的,最初只通过主机名和 IP 地址不同。在启动期间,所有这些虚拟机都读取相同父镜像数据的一部分。如果我们有一个父镜像的本地缓存,这将加快缓存主机的读取速度。我们还实现了减少客户端到集群的网络流量。ceph.conf一起使用。该ceph-immutable-object-cache守护进程负责

Note

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

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

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

rbd parent cache enabled = true
rbd plugins = parent_cache

不可变对象缓存守护进程

简介和通用设置

The 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 守护进程之间通信的域套接字的路径。

类型:

字符串

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

/var/run/ceph/immutable_object_cache_sock

immutable_object_cache_path

描述:

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

类型:

字符串

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

/tmp/ceph_immutable_object_cache

immutable_object_cache_max_size

描述:

不可变缓存的最大大小。

类型:

容量

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

1G

immutable_object_cache_watermark

描述:

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

类型:

浮点数

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

0.9

The 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命令,用户名、监控器权限和 OSD 权限:

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

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

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

The ceph-immutable-object-cache也可以在前景中运行ceph-immutable-object-cache command:

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

QOS 设置

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

immutable_object_cache_qos_schedule_tick_min

描述:

不可变对象缓存的最低计划间隔。

类型:

毫秒

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

50

immutable_object_cache_qos_iops_limit

描述:

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

类型:

无符号整数

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

0

immutable_object_cache_qos_iops_burst

描述:

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

类型:

无符号整数

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

0

immutable_object_cache_qos_iops_burst_seconds

描述:

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

类型:

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

1

immutable_object_cache_qos_bps_limit

描述:

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

类型:

无符号整数

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

0

immutable_object_cache_qos_bps_burst

描述:

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

类型:

无符号整数

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

0

immutable_object_cache_qos_bps_burst_seconds

描述:

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

类型:

必需:

设备空间利用率达到此阈值百分比之前,将 OSD 视为:

1

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.