注意

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

D3N RGW 数据缓存

数据中心数据交付网络 (D3N) 使用高速存储(例如 NVMe 闪存或 DRAM)在访问侧缓存数据集。这种缓存允许大数据作业利用边缘每个 RADOS Gateway (RGW) 节点上可用的计算和快速存储资源。

许多数据中心都包含低成本的集中式存储库,称为数据湖,用于存储和共享 TB 级和 PB 级数据集。大数据分析集群(如 Hadoop 和 Spark)必须依赖于访问相对较远的中心位置的数据湖。即使拥有精心设计的数据中心网络,集群到数据湖的带宽通常也远低于位于边缘节点的固态存储的带宽。

D3N 通过加快对数据湖的重复读取,提高了在分析集群中运行的大数据作业的性能。
RADOS 网关充当后端对象存储 (OSD) 的缓存服务器,在本地存储数据以供重用。

架构

D3N 通过加快对数据湖中重复访问的数据集的读取,提高了大数据作业的性能。缓存服务器位于数据中心,位于潜在网络和存储瓶颈的访问侧。D3N 的两层逻辑缓存形成了传统的缓存层次结构 *,其中离客户端最近的缓存具有最低的访问延迟和开销,而层次结构中更高级别的缓存则较慢(需要多次跳转才能访问)。最靠近客户端的第 1 层缓存服务器通过将对象请求分解为块来处理对象请求,返回本地缓存的任何块,并将未命中的请求转发到下一层中块的“主”位置(由一致哈希确定)。缓存未命中被转发到连续的逻辑缓存层,直到通过向数据湖 (RADOS) 发出请求来解决顶层的未命中。

* 目前只有第 1 层缓存已合并到上游。

请参阅 MOC D3N(数据中心规模数据交付网络)红帽研究 D3N 数据中心缓存

实现

  • D3N 缓存支持 S3Swift 对象存储接口。

  • D3N 目前仅缓存尾部对象,因为它们是不可变的(默认情况下,它是大于 4MB 的对象的部分)。(NGINX RGW 数据缓存和 CDN 支持缓存所有大小的对象)

要求

  • 一块 SSD (/dev/nvme, /dev/pmem, /dev/shm) 或类似的块存储设备,已格式化(未测试 XFS 以外的文件系统)并已挂载。它将用作缓存后端存储。(根据设备性能,多个 RGW 可能会共享单个设备,但每个 RGW 在设备文件系统上都需要一个单独的目录)

限制

  • D3N 不会缓存由 RADOS Gateway Compression 压缩的对象 (支持 OSD 级别压缩)。

  • D3N 不会缓存由 RADOS Gateway Encryption 加密的对象。

  • 如果 rgw_max_chunk_size 配置变量值与 rgw_obj_stripe_size 配置变量值不同,D3N 将被禁用。

D3N 环境设置

运行

要在现有 RGW 上启用 D3N,需要在 Monitor 配置数据库 中添加以下配置条目,例如对于 client.rgw.8000

ceph config set client.rgw.8000 rgw_d3n_l1_local_datacache_enabled true
ceph config set client.rgw.8000 rgw_d3n_l1_datacache_persistent_path /mnt/nvme0/rgw_datacache/client.rgw.8000/
ceph config set client.rgw.8000 rgw_d3n_l1_datacache_size 10737418240

上面的示例假设缓存后端存储固态设备挂载在 /mnt/nvme0 并且有 10 GB 的可用空间用于缓存。

在启动 RGW 守护程序之前,目录必须存在且可写。

mkdir -p /mnt/nvme0/rgw_datacache/client.rgw.8000/

在容器化部署中,缓存目录应作为卷挂载。

extra_container_args:
  - "-v"
  - "/mnt/nvme0/rgw_datacache/client.rgw.8000/:/mnt/nvme0/rgw_datacache/client.rgw.8000/"

(参考:服务管理 - 使用额外容器参数挂载文件

如果另一个 RADOS 网关位于同一主机上,请将其持久路径配置为单独的目录,例如在 client.rgw.8001 的情况下

ceph config set client.rgw.8001 rgw_d3n_l1_datacache_persistent_path /mnt/nvme0/rgw_datacache/client.rgw.8001/

在多个共存的 RADOS 网关配置中,考虑在没有负载均衡器的情况下为每个 RADOS 网关分配具有不同工作负载的客户端,以避免缓存数据重复。

注意

每次重新启动 RGW 守护程序时,缓存目录的内容都会被清除。

日志

  • radosgw.*.log 中与 D3N 相关的日志行包含字符串 d3n(不区分大小写)。

  • 低级别 D3N 日志可以通过 debug_rgw_datacache 子系统启用(最高可达 debug_rgw_datacache=30)。

配置参考

以下与 D3N 相关的设置可以添加到 Ceph 配置文件中(即通常是 ceph.conf)的 [client.rgw.{instance-name}] 部分下。

rgw_d3n_l1_local_datacache_enabled

启用数据中心规模数据集交付本地缓存

类型:

bool

默认值:

false

rgw_d3n_l1_datacache_persistent_path

用于存储本地缓存对象数据的目录路径

类型:

str

默认值:

/tmp/rgw_datacache/

rgw_d3n_l1_datacache_size

数据缓存的最大磁盘大小(以字节为单位)

类型:

大小

默认值:

1Gi

rgw_d3n_l1_eviction_policy

选择 d3n 缓存逐出策略

类型:

str

默认值:

lru

有效选项:
  • lru

  • random

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入