为 Ceph RGW 启用 D3N 缓存

D3N(Data Delivery Network)缓存通过使用 RGW 节点上的本地 NVMe/SSD 磁盘作为缓存层,加速对热点对象的访问。
它减少了对后端 OSD 的频繁读取操作,显著提升了热点数据的读取性能。

背景

D3N 的核心思想简单而有效:
RGW 不再反复从 Ceph 后端存储获取对象数据,而是直接从位于 RGW 节点上快速磁盘(NVMe/SSD)上的 本地持久缓存 提供热点数据。

该设计特别适用于:

  • 大对象下载
  • 热点对象的重复读取
  • 对带宽敏感的工作负载

前提条件

  • 已安装 Ceph 集群
  • 已部署 Rook-Ceph
  • 已创建对象存储(RGW / CephObjectStore)
  • RGW 节点上有高性能本地磁盘(NVMe / SSD)

操作概览

  1. 部署 Ceph 并创建对象存储
  2. 在 RGW 节点上准备高速本地磁盘并挂载到目录
  3. 配置 CephObjectStore
    • 通过 hostPath 挂载该目录
    • 启用与 D3N 相关的 RGW 参数

准备本地文件系统作为缓存

在每个运行 RGW 服务的节点上挂载一个目录。建议使用高性能的专用磁盘(而非分区),格式化为 XFS 文件系统,并配置 /etc/fstab 以确保重启后挂载持续生效。后续文档中出现的 </path/to/cache/dir> 请替换为你实际配置的目录路径。

在 CephObjectStore 中启用 D3N 缓存

编辑 CephObjectStore 资源:

kubectl edit cephobjectstore object-store -n rook-ceph

gateway 下添加如下配置:

gateway:
  additionalVolumeMounts:
  - subPath: cache
    volumeSource:
      hostPath:
        path: </path/to/cache/dir>
  rgwConfig:
    rgw_d3n_l1_datacache_persistent_path: /var/rgw/cache/
    rgw_d3n_l1_datacache_size: "10737418240"
    rgw_d3n_l1_local_datacache_enabled: "true"

参数说明

参数说明
rgw_d3n_l1_local_datacache_enabled启用 D3N 本地缓存
rgw_d3n_l1_datacache_persistent_pathRGW 容器内的缓存目录
rgw_d3n_l1_datacache_size最大缓存大小(字节)

验证 D3N 配置

通过 Ceph 工具检查 RGW 配置

rook-ceph-tools pod 中运行:

ceph config dump | grep d3n

示例输出:

client.rgw.obj.a  advanced  rgw_cache_enabled                    true
client.rgw.obj.a  advanced  rgw_d3n_l1_datacache_persistent_path /var/rgw/cache/
client.rgw.obj.a  advanced  rgw_d3n_l1_datacache_size            10737418240
client.rgw.obj.a  advanced  rgw_d3n_l1_local_datacache_enabled   true

验证 RGW 日志

RGW pod 重启后,应出现 D3N 初始化日志:

kubectl logs -n rook-ceph rook-ceph-rgw-object-store-a-xxxx | grep -i d3n

示例输出:

rgw_d3n: rgw_d3n_l1_local_datacache_enabled=1
rgw_d3n: rgw_d3n_l1_datacache_persistent_path='/var/rgw/cache/'
rgw_d3n: rgw_d3n_l1_datacache_size=10737418240
rgw_d3n: rgw_d3n_l1_evict_cache_on_start=1
rgw_d3n: rgw_d3n_l1_eviction_policy=lru

验证缓存行为

通过 RGW 下载对象时,缓存文件会出现在宿主机的缓存目录中:

ls </path/to/cache/dir>

示例输出:

40b934ab-6c7e-45e7-9fed-a35bc143ce95...multipart_v2v-demo.mkv.1
40b934ab-6c7e-45e7-9fed-a35bc143ce95...multipart_v2v-demo.mkv.2
40b934ab-6c7e-45e7-9fed-a35bc143ce95...shadow_v2v-demo.mkv.3_1
...

这些文件的存在证明 RGW 正在从本地 D3N 缓存提供数据。