ceph缓存分层

前提条件:已部署好 Ceph 集群,且 OSD 已按 SSD/HDD 正确分类(ceph osd tree能看到 class ssdclass hdd)。

一、创建 SSD/HDD 设备类与 CRUSH 规则

  1. 查看现有设备类(确认 SSD/HDD 已分类)
    ceph osd crush class ls
    ceph osd tree
  2. 若未分类,手动设置设备类(示例 OSD.0 为 SSD,OSD.1 为 HDD)
    ceph osd crush set-device-class ssd osd.0
    ceph osd crush set-device-class hdd osd.1
  3. 创建 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 缓存池

  1. 创建 HDD 后端存储池
    ceph osd pool create hdd-storage 256 256 replicated hdd-rule
  2. 创建 SSD 缓存池
    ceph osd pool create ssd-cache 128 128 replicated ssd-rule

三、配置 SSD 缓存分层(Cache Tiering)

  1. 将 SSD 池挂载为 HDD 池的缓存层
    ceph osd tier add hdd-storage ssd-cache
  2. 设置缓存模式为 writeback
    ceph osd tier cache-mode ssd-cache writeback
  3. 将客户端流量重定向到缓存层
    ceph osd tier set-overlay hdd-storage ssd-cache

四、配置缓存策略与参数

  1. 设置 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
  2. 设置缓存容量上限(按实际 SSD 容量调整)
    ceph osd pool set ssd-cache target_max_bytes 1T
  3. 设置脏数据比例与容量阈值
    ceph osd pool set ssd-cache cache_target_dirty_ratio 0.4
    ceph osd pool set ssd-cache cache_target_full_ratio 0.8
  4. 设置对象在缓存中的最短停留时间
    ceph osd pool set ssd-cache cache_min_flush_age 60
    ceph osd pool set ssd-cache cache_min_evict_age 60

五、验证与监控

  1. 查看存储池与缓存层状态
    ceph osd pool ls detail
    ceph osd pool stats ssd-cache
    ceph osd pool stats hdd-storage
  2. 查看 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_ratiocache_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内部程序实现的部分了。

局部截取_20260206_093935

 

局部截取_20260206_094529

 

posted @ 2026-02-06 09:36  mofy  阅读(34)  评论(0)    收藏  举报