为 Ceph RGW 启用 D3N 缓存

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

背景

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

这种设计尤其适用于:

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

前提条件

  • 已安装 Ceph 集群
  • 已部署 Alauda Storage
  • 已创建对象存储(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 缓存提供数据。

Ceph 是 Red Hat, Inc. 或其子公司在美国和其他国家/地区的商标或注册商标。 Rook® 是 Linux Foundation 的注册商标。 Alauda 是一家独立供应商。本产品与 LF Projects, LLC 或 Linux Foundation 无关,亦未获得其认可或赞助。所有商标均为其各自所有者的财产,此处仅用于标识目的。