缓存分层(Ceph Mimic版本)

1. 注意事项

缓存分层会降低大多数工作负载的性能。用户使用此功能之前要格外小心。 

1.1 已知良好的工作负载

RGW time-skewed :如果 RGW 工作负载几乎所有读取操作针对最近写入的对象,一个简单的缓存分层配置,将最近写入的对象从在可配置的时间段后缓存到基础层可以工作良好。

2. 创建缓存层

注:在后续示例中,将缓存池称为 hot-storage ,后备池称为 cold-storage。

ceph osd tier add cold-storage hot-storage  # 设置缓存层
ceph osd tier cache-mode hot-storage writeback  # 设置缓存模式
ceph osd tier set-overlay cold-storage hot-storage  # 将客户端流量直接引导到缓存池

3. 配置缓存层

ceph osd pool set {cachepool} {key} {value}

3.1 目标大小和类型

ceph osd pool set {cachepool} hit_set_type bloom  # 生产缓存层使用 Bloom Filter 的 hit_set_type
ceph osd pool set {cachepool} hit_set_count 12  # 注意,一个更大的 hit_set_count导致更多的 RAM 被 ceph-osd 进程消耗,默认值:12
ceph osd pool set {cachepool} hit_set_period 14400  # 默认值:14400
ceph osd pool set {cachepool} target_max_bytes 1000000000000  # 默认值:1000000000000(大约1TB)

ceph osd pool set {cachepool} min_read_recency_for_promote 2  # 默认值:2
ceph osd pool set {cachepool} min_write_recency_for_promote 2  # 默认值:2

3.2 缓存大小

3.2.1 绝对大小

ceph osd pool set {cachepool} target_max_bytes {#bytes}
例如:达到 1 TB 开始刷新或驱逐。
ceph osd pool set hot-storage target_max_bytes 1099511627776  # 默认值:1000000000000(大约1TB)

ceph osd pool set {cachepool} target_max_objects {#objects}
例如:达到 1M 个对象开始刷新或驱逐。
ceph osd pool set hot-storage target_max_objects 1000000  # 默认值:0,不限制

注:Ceph 无法自动确定缓存池的大小,因此这里需要配置绝对大小,否则刷新/驱逐将不起作用。如果同时指定这两个限制,当任一阈值被触发时,缓存分层代理将开始刷新或驱逐。 

3.2.2 相对大小

ceph osd pool set {cachepool} cache_target_dirty_ratio {0.0..1.0}
例如:达到缓存池容量的 40% 时开始刷新修改 (脏)对象。
ceph osd pool set hot-storage cache_target_dirty_ratio 0.4  # cache_target_dirty_ratio_micro,默认值:400000

ceph osd pool set {cachepool} cache_target_dirty_high_ratio {0.0..1.0}
例如:达到缓存池容量的 60% 时开始积极刷新脏对象。
ceph osd pool set hot-storage cache_target_dirty_high_ratio 0.6  # cache_target_dirty_high_ratio_micro,默认值:600000

ceph osd pool set {cachepool} cache_target_full_ratio {0.0..1.0}
例如:达到缓存池容量的 80% 时开始冲洗未修改 (清理)对象。
ceph osd pool set hot-storage cache_target_full_ratio 0.8  # cache_target_full_ratio_micro,默认值:800000

3.3 缓存年龄

ceph osd pool set {cachepool} cache_min_flush_age {#seconds}
例如:在 10 分钟后刷新已修改(或脏)的对象。
ceph osd pool set hot-storage cache_min_flush_age 600  # 默认值:0,不刷新

ceph osd pool {cache-tier} cache_min_evict_age {#seconds}
例如:在 30 分钟后驱逐对象。
ceph osd pool set hot-storage cache_min_evict_age 1800  # 默认值:0,不驱逐

4. 删除缓存层

4.1 删除只读缓存

ceph osd tier cache-mode hot-storage none  # 将缓存模式更改为 none 禁用缓存
ceph osd tier remove cold-storage hot-storage  # 从后备池中删除缓存池

4.2 删除回写缓存

注:由于回写缓存可能已修改数据,因此您必须采取措施确保在您禁用并删除它之前不会丢失对缓存中对象的任何最新更改。

ceph osd tier cache-mode hot-storage proxy  # 将缓存模式更改为 proxy,这样新的和修改过的对象就会刷新到后备存储池
rados -p {cachepool} ls  # 确保缓存池已刷新
rados -p {cachepool} cache-flush-evict-all  # 如果缓存池仍有对象,您可以手动刷新它们
ceph osd tier remove-overlay cold-storage  # 删除覆盖,以便客户端不会将流量定向到缓存
ceph osd tier remove cold-storage hot-storage  # 从后备存储池中删除缓存层池

 

posted @ 2022-05-26 09:51  Varden  阅读(308)  评论(0编辑  收藏  举报