ceph缓存分层
前提条件:已部署好 Ceph 集群,且 OSD 已按 SSD/HDD 正确分类(
ceph osd tree能看到 class ssd和 class hdd)。一、创建 SSD/HDD 设备类与 CRUSH 规则
-
查看现有设备类(确认 SSD/HDD 已分类)
ceph osd crush class ls ceph osd tree -
若未分类,手动设置设备类(示例 OSD.0 为 SSD,OSD.1 为 HDD)
ceph osd crush set-device-class ssd osd.0 ceph osd crush set-device-class hdd osd.1 -
创建 CRUSH 规则
ceph osd crush rule create-replicated ssd-rule default host ssd ceph osd crush rule create-replicated hdd-rule default host hdd
二、创建 HDD 存储池与 SSD 缓存池
-
创建 HDD 后端存储池
ceph osd pool create hdd-storage 256 256 replicated hdd-rule -
创建 SSD 缓存池
ceph osd pool create ssd-cache 128 128 replicated ssd-rule
三、配置 SSD 缓存分层(Cache Tiering)
-
将 SSD 池挂载为 HDD 池的缓存层
ceph osd tier add hdd-storage ssd-cache -
设置缓存模式为 writeback
ceph osd tier cache-mode ssd-cache writeback -
将客户端流量重定向到缓存层
ceph osd tier set-overlay hdd-storage ssd-cache
四、配置缓存策略与参数
-
设置 HitSet 类型与统计周期
ceph osd pool set ssd-cache hit_set_type bloom ceph osd pool set ssd-cache hit_set_count 24 ceph osd pool set ssd-cache hit_set_period 600 -
设置缓存容量上限(按实际 SSD 容量调整)
ceph osd pool set ssd-cache target_max_bytes 1T -
设置脏数据比例与容量阈值
ceph osd pool set ssd-cache cache_target_dirty_ratio 0.4 ceph osd pool set ssd-cache cache_target_full_ratio 0.8 -
设置对象在缓存中的最短停留时间
ceph osd pool set ssd-cache cache_min_flush_age 60 ceph osd pool set ssd-cache cache_min_evict_age 60
五、验证与监控
-
查看存储池与缓存层状态
ceph osd pool ls detail ceph osd pool stats ssd-cache ceph osd pool stats hdd-storage -
查看 CRUSH 规则与设备类
ceph osd crush rule ls ceph osd crush rule dump ssd-rule ceph osd crush rule dump hdd-rule
六、使用建议与注意事项
-
版本兼容性:Cache Tiering 在较新版本中已被标记为 deprecated,建议在新部署中优先考虑 BlueStore 的混合存储或使用其他分层方案。
-
容量规划:SSD 缓存池大小建议为常用热数据量的 1.5–2 倍,避免频繁刷写影响性能。
-
监控指标:重点关注
cache_target_dirty_ratio和cache_target_full_ratio,避免缓存层长时间处于高水位,影响 I/O 延迟。
如果你有具体的集群规模(节点数、SSD/HDD 数量)和业务场景,我可以帮你进一步细化 PG 数量和缓存参数。
#####
注意事项:
使用缓存分层的话,存储池的crush规则是只包含hdd,缓存池是只包含ssd
如果存储池使用默认的规则的话,会既包含hdd,也包含ssd.存储的数据就会既在hdd盘上,也在ssd盘上
查看pg的时候,会看到有的pg同时分布在两种类型的盘上。违背了缓存分层的初衷。
下图是命令ceph pg dump pgs_brief |grep -E '30 | 31 | 32'结果,这个集群的存储池使用了默认的规则,默认的规则是包含所有磁盘的。所以既有hdd也有ssd,可以看到大部分pg都在30,31,31这3个缓存盘上,只有个别数据同时在ssd和hdd上,上面还有一些,不过没有截图。
正常的缓存分层,数据不会出现这个情况。缓存分层的数据只在ssd上,数据层只在hdd上。数据在数据池和缓存池之间的传输时cache tier缓存分层的内部来实现的。从现象上来看,会跟crush规则有冲突,因为crush规则来说,数据时不会同时在两个池之间传输的。这个就是cache tier内部程序实现的部分了。



浙公网安备 33010602011771号