注意
本文档适用于 Ceph 的开发版本。
RBD 持久写入日志缓存
持久写入日志缓存
持久写入日志缓存(PWL)为基于librbd的RBD客户端提供了一个持久的、容错的写回缓存。
此缓存使用日志有序写回设计,内部维护检查点,以便刷回集群的写入始终保持崩溃一致性。即使客户端缓存完全丢失,磁盘镜像仍然一致,但数据将显示为过时。
此缓存可与PMEM或SSD作为缓存设备一起使用。对于PMEM,缓存模式称为replica write log (rwl)。目前只支持本地缓存,副本功能正在开发中。对于SSD,缓存模式称为ssd。
用法
PWL缓存管理持久设备中的缓存数据。它在配置的目录中查找并创建缓存文件,然后将数据缓存到文件中。
PWL缓存依赖于独占锁功能。缓存只有在获得独占锁后才能加载。
缓存提供两种不同的持久性模式。在persistent-on-write模式下,写入仅在持久化到缓存设备时才完成,并且在崩溃后可读。在persistent-on-flush模式下,写入一旦不再需要调用者的数据缓冲区来完成写入就完成,但不保证写入在崩溃后可读。当接收到刷新请求时,数据将持久化到缓存设备。
最初它默认为persistent-on-write模式,并在接收到第一个刷新请求后切换到persistent-on-flush模式。
启用缓存
要启用PWL缓存,请设置以下配置设置
rbd_persistent_cache_mode = {cache-mode}
rbd_plugins = pwl_cache
{cache-mode}的值可以是rwl、ssd或disabled。默认情况下,缓存处于禁用状态。
rwl缓存模式依赖于libpmem库(PMDK的一部分)。它应该在x86_64架构上普遍可用,并且在某些发行版上的ppc64le和aarch64架构上也可能可用。它在s390x架构上不可用。
以下是一些缓存配置设置
rbd_persistent_cache_path用于缓存数据的文件文件夹。使用rwl模式时,此文件夹必须启用DAX(请参阅DAX),以避免性能下降。rbd_persistent_cache_size每个镜像的缓存大小。最小缓存大小为1 GB。
上述配置可以按主机、按存储池、按镜像等进行设置。例如,要按主机设置,请将覆盖添加到主机ceph.conf文件中的相应部分。要按存储池、按镜像等设置,请参阅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}
如果应用程序意外终止,此命令也可用于将缓存刷回OSD。
例如
$ rbd persistent-cache flush rbd/foo
使缓存失效
要使用rbd使缓存文件失效(丢弃),请指定persistent-cache invalidate命令、存储池名称和镜像名称。
rbd persistent-cache invalidate {pool-name}/{image-name}
该命令删除相应镜像的缓存元数据,禁用缓存功能,并删除本地缓存文件(如果存在)。
例如
$ rbd persistent-cache invalidate rbd/foo