rbd 常用的配置参数
本文分享自天翼云开发者社区《rbd常用的配置参数》,作者:l****n
rbd 的基本介绍
rbd 的架构如下图所示:
![](https://static001.geekbang.org/infoq/ef/ef28ce95d5682f618b38f85d8129f97e.png)
rbd 采用 CRUSH 算法实现数据的随机分布。CRUSH 算法,即 Controlled Replication Under Scalable Hashing,是一种基于哈希的数据分布算法。CRUSH 算法以数据唯一标识符、当前存储集群的拓扑结构以及数据备份策略作为 CRUSH 的输入,可以随时随地通过计算获取数据所在的底层存储设备并直接通信获取或者写入数据,从而避免查表操作,实现去中心化和高度并发,将数据均衡的存储到各个存储节点,实现数据存储的负载均衡;另外去中心化以及哈希的数据随机分布,使得 rbd 存储在理论上具备无限的可扩展性。CRUSH 算法支持数据的多种备份策略,支持可配置副本数,支持存储节点故障域定义与划分,从而使整个系统具备了高可靠性和高可用性。
rbd 的主要参数
在实际使用中需要配置 rbd 的一些参数,下面对 rbd 的一些常用参数进行一下说明:
1.rbd_cache: 是否使能缓存,默认情况下开启。
2.rbd_cache_size:最大的缓存大小,默认 32MB。
3.rbd_cache_max_dirty:缓存中脏数据的最大值,用来控制回写,不能超过 rbd cache size,默认 24MB。
4.rbd_cache_target_dirty:开始执行回写的脏数据大小,不能超过 rbd cache max dirty,默认 16MB。
5.rbd_cache_max_dirty_age: 缓存中单个脏数据的最大缓存时间,避免因为未达到回写要求脏数据长时间存在缓存中,默认 1s。
6.rbd cache max dirty object:最大的 Object 对象数,默认为 0,表示通过 rbd cache size 计算得到,librbd 默认以 4MB 为单位对磁盘 Image 进行逻辑切分,每个 chunk 对象抽象为一个 Object;librbd 中以 Object 为单位来管理缓存,增大该值可以提升性能。
7.rbd cache writethrough until flush:默认为 true,该选项是为了兼容 linux-2.6.32 之前的 virtio 驱动,避免因为不发送 flush 请求,数据不回写;设置该参数后,librbd 会以 writethrough 的方式执行 io,直到收到第一个 flush 请求,才切换为 writeback 方式。
8.rbd cache block writes upfront:是否开启同步 io,默认 false,开启后 librbd 要收到 Ceph OSD 的应答才返回。
9.rbd readahead trigger requests: 触发预读的连续请求数,默认为 10。
10.rbd readahead max bytes: 一次预读请求的最大 io 大小,默认 512KB,为 0 则表示关闭预读。
11.rbd readahead disable after bytes: 预读缓存的最大数据量,默认为 50MB,超过阀值后,librbd 会关闭预读功能,由 Guest OS 处理预读(防止重复缓存);如果为 0,则表示不限制缓存。
12.objecter inflight ops: 客户端流控,允许的最大未发送 io 请求数,超过阀值会堵塞应用 io,为 0 表示不受限。
13.objecter inflight op bytes:客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用 io,为 0 表示不受限。
14.rbd_enable_alloc_hint:是否开发底层对象的分配。
评论