开发者社区> 青山如是> 正文

Ceph Cache tier配置

简介: 简单了解Cache tier Cache tier 是Ceph服务端缓存的一种方案可以提升存储在后端存储层的I/O性能Cache tier 的创建需要一个由高速而昂贵的存储设备如SSD组成的存储池作为缓存层以及一个相对廉价设备组成的后端存储池作为经济存储层。
+关注继续查看

简单了解Cache tier

Cache tier Ceph服务端缓存的一种方案,可以提升存储在后端存储层的I/O性能,Cache tier 的创建需要一个由高速而昂贵的存储设备(如SSD)组成的存储池作为缓存层,以及一个相对廉价设备组成的后端存储池作为经济存储层。Ceph的对象处理器决定往哪里存储对象,Cache tier决定何时把缓存内的对象刷回后端存储层,所以缓存层和后端存储层对于Ceph客户端来说是完全透明的。

893eb66102d74867f4dd8681def1c109922209f9

cache tier两种主要的工作模式

  •   writeback 管理员把缓存层配置为 writeback 模式时, Ceph 客户端们会把数据写入缓存层、并收到缓存层发来的 ACK ;写入缓存层的数据会被迁移到存储层、然后从缓存层刷掉。直观地看,缓存层位于后端存储层的前面,当 Ceph 客户端要读取的数据位于存储层时,缓存层代理会把这些数据迁移到缓存层,然后再发往 Ceph 客户端。从此, Ceph 客户端将与缓存层进行 I/O 操作,直到数据不再被读写。此模式对于易变数据来说较理想(如照片/视频编辑、事务数据等)。
  •      readonly 管理员把缓存层配置为 readonly 模式时, Ceph 直接把数据写入后端。读取时, Ceph 把相应对象从后端复制到缓存层,根据已定义策略、脏对象会被缓存层踢出。此模式适合不变数据(如社交网络上展示的图片/视频、 DNA 数据、 X-Ray 照片等),因为从缓存层读出的数据可能包含过期数据,即一致性较差。对易变数据不要用 readonly 模式。

正因为所有 Ceph 客户端都能用缓存层,所以才有提升块设备、 Ceph 对象存储、 Ceph 文件系统和原生绑定的 I/O 性能的潜力。

注:以上信息来源于Ceph的官网说明http://docs.ceph.com/docs/master/rados/operations/cache-tiering/#

结合上面的说明,要设置Cache tier,必须要有两个存储池,一个作为后端存储,另一个作为缓存

创建缓存层

1、创建存储池

把创建的storage作为后端存储层, cache作为缓存层


[root@node1 ~]# ceph osd pool create storage 64
pool 'storage' created
[root@node1 ~]# ceph osd pool create cache 64
pool 'cache' created

2、把缓存层挂接到后端存储池上

[root@node1 ~]# ceph osd tier add storage cache
pool 'cache' is now (or already was) a tier of 'storage'

3、设置缓存模式

[root@node1 ~]# ceph osd tier cache-mode cache writeback
set cache-mode for pool 'cache' to writeback

4、将客户端流量指向到缓存存储池

[root@node1 ~]# ceph osd tier set-overlay storage cache
overlay for 'storage' is now (or already was) 'cache'

调整Cache tier配置

1、设置缓存层hit_set_type使用bloom过滤器

[root@node1 ~]# ceph osd pool set cache hit_set_type bloom
set pool 27 hit_set_type to bloom

2、设置hit_set_counthit_set_period

[root@node1 ~]# ceph osd pool set cache hit_set_count 1
set pool 27 hit_set_count to 1
[root@node1 ~]# ceph osd pool set cache hit_set_period 3600
set pool 27 hit_set_period to 3600
[root@node1 ~]# ceph osd pool set cache target_max_bytes 1000000000000
set pool 27 target_max_bytes to 1000000000000

hit_set_count hit_set_period 选项分别定义了 HitSet 覆盖的时间区间、以及保留多少个这样的 HitSet,保留一段时间以来的访问记录,这样 Ceph 就能判断一客户端在一段时间内访问了某对象一次、还是多次(存活期与热度)。

3、设置min_read_recency_for_prometemin_write_recency_for_promote

[root@node1 ~]# ceph osd pool set cache min_read_recency_for_promote 1
set pool 27 min_read_recency_for_promote to 1
[root@node1 ~]# ceph osd pool set cache min_write_recency_for_promote 1
set pool 27 min_write_recency_for_promote to 1

min_read_recency_for_promote 定义了在处理一个对象的读操作时检查多少个 HitSet ,检查结果将用于决定是否异步地提升对象。它的取值应该在 0 hit_set_count 之间,如果设置为 0 ,对象会一直被提升;如果设置为 1 ,就只检查当前 HitSet ,如果此对象在当前 HitSet 里就提升它,否则就不提升;设置为其它值时,就要挨个检查此数量的历史 HitSet ,如果此对象出现在 min_read_recency_for_promote HitSet 里的任意一个,那就提升它。min_write_recency_for_promotemin_read_recency_for_promote 类似

统计时间越长、 min_read_recency_for_promote min_write_recency_for_promote 取值越高, ceph-osd 进程消耗的内存就越多,特别是代理正忙着刷回或赶出对象时,此时所有 hit_set_count HitSet 都要载入内存

缓存空间消长配置

Cache tier有两个主要功能

刷回: 代理找出修改过(或脏)的对象、并把它们转发给存储池做长期存储。

赶出: 代理找出未修改(或干净)的对象、并把最近未用过的赶出缓存。

  • 相对空间消长

缓存分层代理可根据缓存存储池相对大小刷回或赶出对象。当缓存池包含的已修改(或脏)对象达到一定比例时,缓存分层代理就把它们刷回到存储池。配置命令如下:

[root@node1 ~]# ceph osd pool set cache cache_target_dirty_ratio 0.4
set pool 27 cache_target_dirty_ratio to 0.4
[root@node1 ~]# ceph osd pool set cache cache_target_dirty_high_ratio 0.6
set pool 27 cache_target_dirty_high_ratio to 0.6
[root@node1 ~]# ceph osd pool set cache cache_target_full_ratio 0.8
set pool 27 cache_target_full_ratio to 0.8

参数说明

cache_target_dirty_ratio       当缓存达到对应值时开始刷回(0.440%

cache_target_dirty_high_ratio      当缓存达到对应值时开始高速刷回(0.660%

cache_target_full_ratio          当缓存达到对应值时开始赶出对应以维持空间空闲(0.880%

  • 绝对空间消长

缓存分层代理可根据总字节数或对象数量来刷回或赶出对象,配置命令如下:

设置容量达到1T时开始刷回和赶出

[root@node1 ~]# ceph osd pool set cache target_max_bytes 1099511627776
set pool 27 target_max_bytes to 1099511627776

设置对象数量达到1M是开始刷回和赶出

[root@node1 ~]# ceph osd pool set cache target_max_objects 1048576
set pool 27 target_max_objects to 1048576

  • 缓存时长配置

让已修改(或脏)对象需至少延迟 10 分钟才能刷回

[root@node1 ~]# ceph osd pool set cache cache_min_flush_age 600
set pool 27 cache_min_flush_age to 600

设置对象放置30分钟后才可以赶出

[root@node1 ~]# ceph osd pool set cache cache_min_evict_age 1800
set pool 27 cache_min_evict_age to 1800

拆除缓存层

  • 拆除readonly缓存

只读缓存不含变更数据,所以禁用它不会导致任何近期更改的数据丢失。

1、把缓存模式改为 none 即可禁用。

ceph osd tier cache-mode {cachepool} none

2、去除后端存储池的缓存池。

ceph osd tier remove {storagepool} {cachepool}

  • 拆除writeback缓存

1、把缓存模式改为 forward ,这样新的和更改过的对象将直接刷回到后端存储池

[root@node1 ~]# ceph osd tier cache-mode cache forward --yes-i-really-mean-it
set cache-mode for pool 'cache' to forward

2、确保缓存池已刷回,可能要等数分钟

[root@node1 ~]# rados ls -p cache

可以通过以下命令进行手动刷回

[root@node1 ~]# rados -p cache cache-flush-evict-all

3、取消流量指向缓存池

[root@node1 ~]# ceph osd tier remove-overlay storage
there is now (or already was) no overlay for 'storage'

4、剥离缓存池

[root@node1 ~]# ceph osd tier remove storage cache
pool 'cache' is now (or already was) not a tier of 'storage'

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14282 0
Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用
 1 修改pom.xml,添加依赖文件: <dependency>     <groupId>com.whalin</groupId>     <artifactId>Memcached-Java-Client</artifactId>     <version>3.0.2</versi
1530 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29215 0
Ceph Cache tier配置
简单了解Cache tier Cache tier 是Ceph服务端缓存的一种方案可以提升存储在后端存储层的I/O性能Cache tier 的创建需要一个由高速而昂贵的存储设备如SSD组成的存储池作为缓存层以及一个相对廉价设备组成的后端存储池作为经济存储层。
5976 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13589 0
varnish cache 配置使用
http://www.chinaunix.net/jh/38/987084.html 
490 0
+关注
青山如是
路人,就该好好打酱油
14
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载