注意

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

RBD持久写日志缓存

持久写入日志缓存

持久写日志缓存(PWL)为基于librbd的RBD客户端提供持久、容错的写回缓存。

此缓存使用日志顺序写回设计,内部维护检查点,以便写回集群的写入始终是一致性崩溃的。即使客户端缓存完全丢失,磁盘镜像仍然是一致的,但数据将显示为过时的。

此缓存可与PMEM或SSD作为缓存设备一起使用。对于PMEM,缓存模式称为replica write log (rwl)。目前仅支持本地缓存,副本功能正在开发中。对于SSD,缓存模式称为ssd.

查看当前由 cephadm 使用的文件模板。

PWL缓存管理持久设备中的缓存数据。它在配置的目录中查找并创建缓存文件,然后在文件中缓存数据。

PWL缓存依赖于独占锁功能。只有在获取独占锁后才能加载缓存。

缓存提供两种不同的持久模式。在写时持久模式下,写入只有在持久化到缓存设备后才完成,并且在崩溃后可以读取。在刷新时持久模式下,写入在不再需要调用者的数据缓冲区来完成写入时即完成,但不保证写入在崩溃后可以读取。当收到刷新请求时,数据会持久化到缓存设备。

初始默认为写时持久模式,在收到第一个刷新请求后切换到刷新时持久模式。

启用缓存

要启用PWL缓存,请设置以下配置设置:

rbd_persistent_cache_mode = {cache-mode}
rbd_plugins = pwl_cache

{cache-mode}的值可以是rwl, ssddisabled。默认情况下,缓存是禁用的。

The rwl缓存模式依赖于libpmem库(PMDK的一部分)。它在x86_64架构上普遍可用,在某些发行版上也可能在ppc64le和aarch64架构上可用。它在s390x架构上不可用。

以下是一些缓存配置设置:

  • rbd_persistent_cache_path用于缓存数据的文件文件夹。此文件夹在使用DAX)时必须启用DAX(参见rwl模式以避免性能下降。

  • rbd_persistent_cache_size每个镜像的缓存大小。最小缓存大小为1 GB。

上述配置可以按主机、按池、按镜像等设置。例如,要按主机设置,请将覆盖添加到主机文件中的相应section。要按池、按镜像等设置,请参阅ceph.conf file. To set per-pool, per-image, etc, please refer to the rbd config 命令.

缓存状态

当获取独占锁时,PWL缓存被启用,当释放独占锁时关闭。要检查缓存状态,用户可以使用命令rbd status.

rbd status {pool-name}/{image-name}

显示缓存状态,包括当前状态、干净状态、缓存大小和位置以及一些基本指标。

例如:

$ rbd status rbd/foo
Watchers:
        watcher=10.10.0.102:0/1061883624 client.25496 cookie=140338056493088
Persistent cache state:
        host: sceph9
        path: /mnt/nvme0/rbd-pwl.rbd.101e5824ad9a.pool
        size: 1 GiB
        mode: ssd
        stats_timestamp: Sun Apr 10 13:26:32 2022
        present: true   empty: false    clean: false
        allocated: 509 MiB
        cached: 501 MiB
        dirty: 338 MiB
        free: 515 MiB
        hits_full: 1450 / 61%
        hits_partial: 0 / 0%
        misses: 924
        hit_bytes: 192 MiB / 66%
        miss_bytes: 97 MiB

刷新缓存

要使用rbd使缓存文件失效(丢弃),请指定persistent-cache flush命令、池名和镜像名。

rbd persistent-cache flush {pool-name}/{image-name}

如果应用程序意外死亡,也可以使用此命令将缓存刷新回OSDs。

例如:

$ rbd persistent-cache flush rbd/foo

使缓存失效

要使用rbd使缓存文件失效(丢弃),请指定persistent-cache invalidate命令、池名和镜像名。

rbd persistent-cache invalidate {pool-name}/{image-name}

该命令删除相应镜像的缓存元数据,禁用缓存功能,如果存在,则删除本地缓存文件。

例如:

$ rbd persistent-cache invalidate rbd/foo

由 Ceph 基金会带给您

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