ceph使用缓存分层cache tier
为了优化I/O性能,结合1个SSD和10个HDD的Ceph集群,使用缓存分层技术是理想方案。以下是详细配置步骤和关键注意事项:
1. 缓存分层架构设计
- 缓存层(Cache Tier):使用SSD OSD创建高性能池,存储热点数据。
- 存储层(Backing Tier):使用10个HDD OSD创建容量池,存储全量数据。
- 模式选择:推荐 Writeback模式(兼顾读写加速),流程如下:
- 读操作:优先从SSD缓存读取,未命中则从HDD读取并缓存。
- 写操作:数据先写入SSD缓存,异步刷回HDD存储层。
2. 配置步骤
步骤1:创建CRUSH规则
# 为SSD创建规则(假设OSD ID 0是SSD)
ceph osd crush rule create-replicated cache-rule default osd ssd
# 为HDD创建规则(假设OSD ID 1-10是HDD)
ceph osd crush rule create-replicated backing-rule default osd hdd
步骤2:创建存储池
# 创建SSD缓存池(副本数1,因单SSD)
ceph osd pool create cache-pool 128 128 replicated cache-rule
# 创建HDD存储池(副本数通常为3)
ceph osd pool create backing-pool 128 128 replicated backing-rule
步骤3:配置缓存分层
# 关联缓存层与存储层
ceph osd tier add backing-pool cache-pool
# 设置缓存模式为writeback
ceph osd tier cache-mode cache-pool writeback
# 设置overlay池(客户端访问backing-pool时自动重定向)
ceph osd tier set-overlay backing-pool cache-pool
步骤4:优化缓存策略
# 设置缓存命中集(跟踪热点数据)
ceph osd pool set cache-pool hit_set_type bloom # 使用Bloom Filter
ceph osd pool set cache-pool hit_set_count 4 # 保留4个HitSet
ceph osd pool set cache-pool hit_set_period 1200 # 每1200秒刷新HitSet
# 控制缓存数据刷回策略
ceph osd pool set cache-pool target_max_bytes 100000000000 # 最大缓存100GB
ceph osd pool set cache-pool cache_min_flush_age 600 # 10分钟后刷回HDD
ceph osd pool set cache-pool cache_min_evict_age 1800 # 30分钟后驱逐
步骤5:验证配置
# 检查缓存池状态
ceph osd pool ls detail | grep -E "cache-pool|backing-pool"
# 测试I/O路径(写入数据到backing-pool,观察是否缓存到cache-pool)
rados -p backing-pool put test-object /path/to/file
3. 关键优化参数
参数 | 推荐值 | 作用 |
---|---|---|
hit_set_type |
bloom |
高效追踪热点数据 |
target_max_bytes |
SSD容量的80% | 避免缓存溢出 |
cache_min_flush_age |
600秒 | 降低写延迟影响 |
cache_target_dirty_ratio |
0.6 | 当脏数据超60%时触发刷写 |
cache_target_full_ratio |
0.8 | 当缓存超80%时加速驱逐 |
4. 注意事项
- 单点风险:单SSD无冗余,若故障会导致未刷新的数据丢失。
- 缓解方案:定期检查
cache-pool
的刷回状态,或增加SSD(至少2个实现副本)。
- 性能监控:
ceph osd perf # 查看OSD延迟
ceph pg dump | grep cache-pool # 检查缓存池PG状态
- 缓存预热:业务初期手动缓存热点数据:
ceph osd pool set cache-pool cache-min-last-touch 86400 # 保留1天内的活跃数据
- 模式切换:需停服时切回直读HDD:
ceph osd tier cache-mode cache-pool forward # 透传模式
ceph osd tier remove-overlay backing-pool
ceph osd tier remove backing-pool cache-pool
5. 预期效果
- 读加速:热点数据读取延迟下降50%~90%。
- 写加速:小写操作先响应SSD,写入延迟显著降低。
- 寿命优化:SSD吸收随机I/O,延长HDD寿命。
通过以上配置,SSD将有效承担热点I/O负载,充分发挥高性能优势,同时HDD提供大容量存储,实现成本与性能的平衡。
hdd规则使用默认的replicated_rule
是的,HDD 规则完全可以使用默认的 replicated_rule
,前提是您的默认规则已经正确指向 HDD OSD。以下是具体分析和操作建议:
为什么可以直接使用默认规则?
- 默认规则的本质
Ceph 初始部署时创建的默认规则(通常名为replicated_rule
)通常:
- 使用
host
或osd
作为故障域 - 不区分设备类型(如 ssd/hdd),而是包含所有 OSD
- HDD 的适用性
如果您的 10 个 HDD OSD 已经在默认规则管理的 CRUSH 树中(即ceph osd tree
显示它们在default
root 下),则无需额外创建规则。
配置调整(简化版)
步骤1:仅创建 SSD 规则
# 仅针对SSD创建专属规则(假设SSD OSD ID为0)
ceph osd crush rule create-replicated ssd-rule default osd ssd
步骤2:创建存储池时直接使用默认规则
# 缓存池:使用SSD专属规则
ceph osd pool create cache-pool 128 128 replicated ssd-rule
# 存储池:直接使用默认规则(无需额外创建)
ceph osd pool create backing-pool 128 128 replicated replicated_rule
💡 关键验证:执行
ceph osd crush rule dump replicated_rule
确认规则包含所有 HDD OSD。
使用默认规则的条件
必须满足以下两点:
-
默认规则未修改
未手动删除或重命名默认规则(初始安装后通常保留replicated_rule
)。 -
HDD OSD 在默认 root 下
通过ceph osd tree
验证所有 HDD OSD 的归属:
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.00000 root default # 默认root
-2 1.00000 host node1
0 ssd 0.10000 osd.0 up 1.00000 1.00000 # SSD
1 hdd 1.00000 osd.1 up 1.00000 1.00000 # HDD
...
10 hdd 1.00000 osd.10 up 1.00000 1.00000 # HDD
不适用默认规则的情况
如果出现以下任一场景,需强制为 HDD 创建规则:
场景 | 解决方案 |
---|---|
默认规则被误删 | 重建规则:ceph osd crush rule create-replicated replicated_rule default host |
HDD OSD 不在默认 root 下 | 1. 将 OSD 移回默认 root:ceph osd crush move osd.{id} root=default 2. 或创建新规则指向 HDD 的位置 |
需要隔离 SSD/HDD | 显式创建规则:ceph osd crush rule create-replicated hdd-rule default osd hdd |
最终配置命令(使用默认规则版)
# 1. 创建SSD专属规则
ceph osd crush rule create-replicated ssd-rule default osd ssd
# 2. 创建缓存池(SSD)
ceph osd pool create cache-pool 128 128 replicated ssd-rule
# 3. 创建存储池(HDD, 使用默认规则)
ceph osd pool create backing-pool 128 128 replicated replicated_rule
# 4. 配置缓存分层
ceph osd tier add backing-pool cache-pool
ceph osd tier cache-mode cache-pool writeback
ceph osd tier set-overlay backing-pool cache-pool
优点 vs 风险
方案 | 优点 | 风险 |
---|---|---|
使用默认规则 | 配置简单,无需额外管理规则 | 若默认规则包含SSD会导致数据误存HDD |
显式创建HDD规则 | 完全隔离设备类型,安全性高 | 增加配置复杂度 |
推荐做法:如果集群纯净(只有 SSD + HDD 且 SSD 已单独设规则),直接使用默认规则更高效;若存在混合设备类型,则显式创建规则更安全。