二、配置缓存池1. 创建一个缓存池及后端存储缓冲池已经在一.3已经创建,pool: cache_pool,可以参考
后端存储:
# ceph osd pool create volumes2 64 64
2. 设置缓存层将上面创建的cache_pool池绑定至存储池的前端,volumes即为我们的后端存储池
# ceph osd tier add volumes2 cachepool 'cache' is now (or already was) a tier of 'volumes2'
设置缓存模式为writeback
# ceph osd tier cache-mode cache writebackset cache-mode for pool 'cache' to writeback
将所有客户端请求从标准池引导至缓存池
# ceph osd tier set-overlay volumes2 cacheoverlay for 'volumes2' is now (or already was) 'cache'
此时,我们分别查看存储池和缓存池的详情,可以看到相关的缓存配置信息:
# ceph osd dump |egrep 'volumes2|cache'pool 5 'cache' replicated size 1 min_size 1 crush_rule 2 object_hash rjenkins pg_num 64 pgp_num 64 last_change 125 lfor 125/125 flags hashpspool,incomplete_clones tier_of 6 cache_mode writeback stripe_width 0pool 6 'volumes2' replicated size 1 min_size 1 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 125 lfor 125/125 flags hashpspool tiers 5 read_tier 5 write_tier 5 stripe_width 0
3. 缓存层相关参数说明对于生产环境的部署,目前只能使用bloom filters数据结构(看官方文档的意思,好像目前只支持这一种filter):
ceph osd pool set cache hit_set_type bloom
设置当缓存池中的数据达到多少个字节或者多少个对象时,缓存分层代理就开始从缓存池刷新对象至后端存储池并驱逐:
# 当缓存池中的数据量达到1TB时开始刷盘并驱逐ceph osd pool set cache target_max_bytes 1099511627776# 当缓存池中的对象个数达到100万时开始刷盘并驱逐ceph osd pool set cache target_max_objects 10000000
定义缓存层将对象刷至存储层或者驱逐的时间:
ceph osd pool set cache cache_min_flush_age 600ceph osd pool set cache cache_min_evict_age 600
定义当缓存池中的脏对象(被修改过的对象)占比达到多少时,缓存分层代理开始将object从缓存层刷至存储层:
# 当脏对象占比达到10%时开始刷盘ceph osd pool set cache cache_target_dirty_ratio 0.4# 当脏对象占比达到60%时开始高速刷盘ceph osd pool set cache cache_target_dirty_high_ratio 0.6
当缓存池的使用量达到其总量的一定百分比时,缓存分层代理将驱逐对象以维护可用容量(达到该限制时,就认为缓存池满了),此时会将未修改的(干净的)对象刷盘:
ceph osd pool set cache cache_target_full_ratio 0.8
4. 测试缓存池配置好缓存池以后,我们可以先将其驱逐对象的最小时间设置为60s:
ceph osd pool set cache cache_min_evict_age 60ceph osd pool set cache cache_min_flush_age 60
定义当缓存池中的脏对象(被修改过的对象)占比达到千分之一,缓存分层代理开始将object从缓存层刷至存储层:
ceph osd pool set cache cache_target_dirty_ratio 0.001
然后,我们往存储池中写一个数据
rados -p volumes put test MySQL-community-client-5.7.31-1.el7.x86_64.rpm
查看存储池,这时应该无法查看到该数据,查看缓存池,则可以看到数据存储在缓存池中:
rados -p volumes2 ls |grep testrados -p cache ls |grep test
等60s之后,数据刷盘,此时即可在存储池中看到该数据,则缓存池中,该数据即被驱逐 。
三、删除缓存池需要说明的是,根据缓存池类型的不同,删除缓存池的方法也不同 。
1. 删除read-only缓存池由于只读缓存不具有修改的数据,因此可以直接禁用并删除它,而不会丢失任何最近对缓存中的对象的更改 。
将缓存模式个性为none以禁用缓存:
ceph osd tier cache-mode cache none
删除缓存池:
# 解除绑定ceph osd tier remove cephfs_data cache
2. 删除writeback缓存池由于回写缓存可能具有修改的数据,所以必须采取措施以确保在禁用和删除缓存前,不丢失缓存中对象的最近的任何更改 。
将缓存模式更改为转发,以便新的和修改的对象刷新至后端存储池:
ceph osd tier cache-mode cache forward
【ceph缓存池】查看缓存池以确保所有的对象都被刷新(这可能需要点时间):
rados -p cache ls
如果缓存池中仍然有对象,也可以手动刷新:
rados -p cache cache-flush-evict-all
删除覆盖层,以使客户端不再将流量引导至缓存:
ceph osd tier remove-overlay cephfs_data
推荐阅读
- mac big sur 电池显示,mac os big sur电量-
- 泳池游泳的注意事项是什么?
- 你的MacBook Pro可能符合免费更换电池的条件:以下是检查方法
- 5号电池充多长时间?5号充电电池一般充几个小时
- Redis:缓存被我写满了,该怎么办?
- iPhone12系列电池容量大小?iphone12系列电池容量表
- iPhone13电池有多大?iphone13系列的电池容量_2
- iPhone12系列电池容量大小?iphone12系列电池容量表_4
- ios15.1更新后电池,苹果11升级ios14.4.1耗电严重-
- 技术积淀----NGINX缓存