第5章 配置缓存层 存储分层(Cache tiers)有几个配置选项。配置这些参数,你可以用如下方法: ceph osd pool set {cachepool} {key} {value} 5.1 目标的大小和类型 Ceph产品的存储分层用Bloom Filter作为hit_set_type类型;Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。 ceph osd pool set {cachepool} hit_set_type bloom 例子: ceph osd pool set hot-storage hit_set_type bloom The hit_set_count and hit_set_period define how much time each HitSet should cover, and how many such HitSets to store. Currently there is minimal benefit for hit_set_count > 1 since the agent does not yet act intelligently on that information. 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 Binning accesses over time allows Ceph to determine whether a Ceph client accessed an object at least once, or more than once over a time period (“age” vs “temperature”). 注:周期越长,计数越高,ceph-osd 用的内存越多。特别是,当代理主动刷新或清除缓存对象,所有hitsets被加载到RAM。 5.2 缓存大小 分层存储代理(The cache tiering agent)执行2个主要的函数: 刷新(Flushing): 代理识别变动的对象,并把这些变动的对象转存到存储池(the storage pool)中长期保存; 清除(Evicting): 代理识别未变动的对象,并从缓存中删除最近没有使用的对象。 5.2.1 相对大小 缓存代理(The cache tiering agent)刷新/清除对象和缓冲池大小有关。当缓冲池(the cache pool)达到一定比例的变动对象时,缓存代理(the cache tiering agent)会刷新数据,把它们存储到存储池(the storage pool)中。设置cache_target_dirty_ratio执行如下命令: ceph osd pool set {cachepool} cache_target_dirty_ratio {0.0..1.0} 例如,设置值为0.4,当变动的对象达到缓冲池(the cache pool)容量的40%时,就刷新缓存: ceph osd pool set hot-storage cache_target_dirty_ratio 0.4 当缓冲池(the cache pool)达到一定百分百的容量时,缓存代理(the cache tiering agent)会清除一些对象来维持一定空闲的存储空间。设置cache_target_full_ratio执行如下命令: ceph osd pool set {cachepool} cache_target_full_ratio {0.0..1.0} 例如,设置值为0.8,当达到缓冲池(the cache pool)容量的80%时,就会清除缓存中一些未变动的数据: ceph osd pool set hot-storage cache_target_full_ratio 0.8 5.2.2 绝对大小 缓存代理(The cache tiering agent)能根据总字节数和总对象数刷新/清除对象。设置字节数的最大值,可以执行如下命令: 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 注:如果限制条件你都配置了,当任何一个阈值被触发时,缓存代理(the cache tiering agent)就刷新/清除数据。 5.3 缓存周期 你可以配置对象的最小周期,达到这个周期后,缓存代理(the cache tiering agent)刷新最近变动的对象到存储池(the backing storage pool)中: ceph osd pool set {cachepool} cache_min_flush_age {#seconds} 例如,刷新变动10分钟的数据,执行如下语句: ceph osd pool set hot-storage cache_min_flush_age 600 你可以配置对象的最小周期,达到这个周期后,缓存代理(the cache tiering agent)从缓存中清除未变动的对象: ceph osd pool {cache-tier} cache_min_evict_age {#seconds} 例如,清除30分钟未使用的对象,执行如下语句: ceph osd pool set hot-storage cache_min_evict_age 1800