注意
本文档适用于 Ceph 的开发版本。
D3N RGW 数据缓存
数据中心数据交付网络 (D3N) 使用高速存储(例如 NVMe 闪存或 DRAM)在访问侧缓存数据集。这种缓存允许大数据作业利用边缘每个 RADOS Gateway (RGW) 节点上可用的计算和快速存储资源。
许多数据中心都包含低成本的集中式存储库,称为数据湖,用于存储和共享 TB 级和 PB 级数据集。大数据分析集群(如 Hadoop 和 Spark)必须依赖于访问相对较远的中心位置的数据湖。即使拥有精心设计的数据中心网络,集群到数据湖的带宽通常也远低于位于边缘节点的固态存储的带宽。
架构
D3N 通过加快对数据湖中重复访问的数据集的读取,提高了大数据作业的性能。缓存服务器位于数据中心,位于潜在网络和存储瓶颈的访问侧。D3N 的两层逻辑缓存形成了传统的缓存层次结构 *,其中离客户端最近的缓存具有最低的访问延迟和开销,而层次结构中更高级别的缓存则较慢(需要多次跳转才能访问)。最靠近客户端的第 1 层缓存服务器通过将对象请求分解为块来处理对象请求,返回本地缓存的任何块,并将未命中的请求转发到下一层中块的“主”位置(由一致哈希确定)。缓存未命中被转发到连续的逻辑缓存层,直到通过向数据湖 (RADOS) 发出请求来解决顶层的未命中。
* 目前只有第 1 层缓存已合并到上游。
实现
D3N 缓存支持 S3 和 Swift 对象存储接口。
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- 有效选项:
lrurandom