Cache tier使用文档

参考链接:
https://docs.ceph.com/en/latest/rados/operations/cache-tiering/#

Cache Tiering

Cache Tiering 是 Ceph 中一种自动分层存储的技术,其中有两种存储池:高速池(缓存池,由 SSD 等高速设备组成)作为缓存层、低速池(数据池,由 HDD 等低速设备组成)作为数据层。对于客户端来说,Cache Tiera 是无感知的,它们把数据发给 Objector Handles,并不关心数据是写到高速池或是低速池。这些内部数据流动由 tiering agent 来自动处理。数据分层的好处在于提高热点数据存储性能并且降低了存储成本(不需要全部使用SSD就能得到近似 SSD 性能)。缺点在于占用一定计算性能、数据IO。

自动分层存储的核心点在于:

  1. 数据访问行为的追踪、统计与分析
  2. 数据迁移

mode 模式

  • writeback:写数据时直接写入缓存池,缓存池的数据会及时刷新到数据池;读数据也会直接访问缓存时,如果未命中,则会从数据池中把数据迁移到缓存池,在由缓存池返回给客户端。总结:客户端的读写请求都通过缓存池。
  • readproxy: 读数据时,如果数据不在缓存池中,则会把客户端的读请求转发到数据层,由数据层返回数据给客户端。写操作直接使用数据池。
  • readonly:读操作时使用缓存层,如果数据不在缓存池中,则会把响应数据从数据池中复制到缓存池中,再由缓存池返回给客户端。写操作直接使用数据池。
  • none:禁用缓存层。

创建 Cache Tier

需要使用 crush 来指定一组全是 SSD 设备的 rule,创建 cache pool 池时需要指定该 crush rule。

设置缓存层和数据层。一个数据池可以设置多个缓存池,但是一个缓存池只能作为一个数据池的缓存。
那么有必要指定缓存的大小吗?这要视情况而定,如果你希望缓存池用到的 SSD 设备还能用于存储其他池的数据,那么应当为缓存池指定大小。

# 使用一整个存储池
ceph osd tier add {storagepool} {cachepool}

# 使用部分存储池,需要指明大小,单位 byte。(相当于设置 target_max_bytes)
ceph osd tier add-cache {storagepool} {cachepool} {cachesize}

# 从cachepool 中分配 1MB 空间做为 slowpool 的缓存
ceph osd tier add-cache slowpool cachepool 1024000

设置缓存层的模式。

ceph osd tier cache-mode {cachepool} {cache-mode}

# mode:writeback、readproxy、readonly、none

将所有客户端流量从数据池引导到缓存池。

ceph osd tier set-overlay {storagepool} {cachepool}

配置 Cache Tier

命令格式

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

目标大小与类型

设置 hit_set_type 类型为布隆过滤器。

ceph osd pool set {cachepool} hit_set_type bloom

设置 hit_set_count 和 hit_set_period

hit_set_count:一段时间最多保留多少个 hit_set,访问记录
hit_set_period:hitSet覆盖的时间范围

ceph osd pool set {cachepool} hit_set_count 1
ceph osd pool set {cachepool} hit_set_period 3600
ceph osd pool set {cachepool} target_max_bytes 1000000000000

Cache 大小

Cache 代理主要提供两种功能:

  • Flushing: 代理找出修改过(或脏)的对象、并把它们转发给存储池做长期存储。
  • Evicting:代理找出未修改(或干净)的对象、并把最近最少使用过的对象从缓存池删除。

绝对大小

缓存分层代理根据缓存对象的字节总数刷新或者删除操作(用于削减缓存池大小),可指定最大字节数:

ceph osd pool set {cachepool} target_max_bytes {bytes}

# 用下列命令配置在达到 1TB 时缓存池满,不再接收读写请求:
ceph osd pool set hot-storage target_max_bytes 1000000000000

或者指定最大对象数量,超过此数量后,执行刷新或删除操作:

ceph osd pool set {cachepool} target_max_objects {#objects}

# 用下列命令配置对象数量达到 1M 时缓存池满,不再接收读写请求:
ceph osd pool set hot-storage target_max_objects 1000000

注意:Ceph不能自动确定缓存池的大小,所以这里需要配置绝对大小,否则f将无法工作。如果同时配置了 target_max_bytes 和 target_max_objects,那么缓存代理会在缓存池达到任何一个阈值后,立刻执行刷新或删除操作。当达到最大字节数或最大对象数后,客户端的请求将被阻塞。

相对大小

设置脏数据的最大比率,当达到该比率时,就会执行刷新或者删除操作。

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

当缓存池利用率达到总容量的一定比例时,缓存分层代理会赶出部分对象以维持空闲空间。

ceph osd pool set {cachepool} cache_target_full_ratio {0.0..1.0}

# 设置为0.8
ceph osd pool set hot-storage cache_target_full_ratio 0.8

当脏对象达到容量的一定比例时,需要快速刷掉对象,可以设置这样一个高速刷新值,其大小在 cache_target_dirty_ratio 和 cache_targe_full_ratio 之间。

ceph osd pool set {cachepool} cache_target_dirty_high_ratio {0.0..1.0}

# 设置为 0.6 表示:脏对象达到缓存存储池容量的 60% 时,将开始更激进地刷回脏对象。显然,其值最好在 dirty_ratio 和 full_ratio 之间
ceph osd pool set hot-storage cache_target_dirty_high_ratio 0.6

缓存时长

设置每个脏对象的的缓存时间(单位为秒),超过该时间才能执行刷新操作。

ceph osd pool set {cachepool} cache_min_flush_age {#seconds}

# 设置脏对象至少延迟 10 分钟才能被刷新
ceph osd pool set hot-storage cache_min_flush_age 600

设置每个干净对象至少在缓存层中存活多久(单位为秒)。

ceph osd pool {cache-tier} cache_min_evict_age {#seconds}

# 设置干净对象至少存活30分钟
ceph osd pool set hot-storage cache_min_evict_age 1800

删除 Cache Tier

删除 readonly 模式的 Cache Tier

由于只读缓存池不含任何脏数据,因此直接禁用 Cache Tier 不会导致任何数据丢失。

# 1. 直接把模式改为 none
ceph osd tier cache-mode {cachepool} none

# 2. 删除缓存池标志,cachepool 依然存在,但不再作为 storagepool 的缓存池
ceph osd tier remove {storagepool} {cachepool}

删除 writeback 模式的 Cache Tier

因为此模式下,缓存层有大量脏数据,因此必须先把所有脏数据都刷新到数据层中。

  1. 将缓存模式更改为代理模式,以便新的和修改过的对象将刷新到后备存储池。

    ceph osd tier cache-mode {cachepool} proxy
    
  2. 确保缓存池被刷新,需要手动执行

    # 查看缓存池是否有对象
    rados -p {cachepool} ls
    
    # 手动刷新
    rados -p {cachepool} cache-flush-evict-ail
    
  3. 删除 overlay,这样客户端不会再访问缓存层

    ceph osd tier remove-overlay {storagetier}
    
  4. 最后删除 缓存池

    ceph osd tier remove {storagepool} {cachepool}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值