本文分享自天翼云开发者社区《rbd常用的配置参数》,作者:l****n
rbd的基本介绍
rbd的架构如下图所示:
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:是否开发底层对象的分配。