ceph 参数说明<转>

//path/to/socket指向某个osd的admin socket文件
#> ceph --admin-daemon {path/to/socket} config show | grep rbd
下面对其中的某些配置参数进行详细说明:

rbd cache: 是否使能缓存,默认情况下开启。
rbd cache size:最大的缓存大小,默认32MB
rbd cache max dirty:缓存中脏数据的最大值,用来控制回写,不能超过rbd cache size,默认24MB
rbd cache target dirty:开始执行回写的脏数据大小,不能超过rbd cache max dirty,默认16MB
rbd cache max dirty age: 缓存中单个脏数据的最大缓存时间,避免因为未达到回写要求脏数据长时间存在缓存中,默认1s
点评:开启Cache能显著提升顺序io的读写性能,缓存越大性能越好;如果容许一定的数据丢失,建议开启。
rbd cache max dirty object:最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分,每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能。
点评:在ceph-0.94.1中该值较小,建议按照ceph-0.94.4版本中的计算公式增大该值,如下:

obj = MIN(2000, MAX(10, cct->_conf->rbd_cache_size / 100 / sizeof(ObjectCacher::Object)));

我配置的时候取 sizeof(ObjectCacher::Object) = 128, 128是我基于代码估算的Object对象大小
rbd cache writethrough until flush:默认为true,该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写;设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。
点评:如果您的Linux客户机使用的是2.6.32之前的内核建议设置为true,否则可以直接关闭。
rbd cache block writes upfront:是否开启同步io,默认false,开启后librbd要收到Ceph OSD的应答才返回。
点评: 开启后,性能最差,但是最安全。
rbd readahead trigger requests: 触发预读的连续请求数,默认为10
rbd readahead max bytes: 一次预读请求的最大io大小,默认512KB,为0则表示关闭预读
rbd readahead disable after bytes: 预读缓存的最大数据量,默认为50MB,超过阀值后,librbd会关闭预读功能,由Guest OS处理预读(防止重复缓存);如果为0,则表示不限制缓存。
点评:如果是顺序读io为主,建议开启
objecter inflight ops: 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限
objecter inflight op bytes:客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限
点评:提供了简单的客户端流控功能,防止网络拥塞;在宿主网络成为瓶颈的情况下,rbd cache中可能充斥着大量处于发送状态的io,这又会反过来影响io性能。没有特殊需要的话,不需要修改该值;当然如果带宽足够的话,可以根据需要调高该值
rbd ssd cache: 是否开启磁盘缓存,默认开启
rbd ssd cache size:缓存的最大大小,默认10G
rbd ssd cache max dirty:缓存中脏数据的最大值,用来控制回写,不能超过rbd ssd cache size,默认7.5G
rbd ssd cache target dirty:开始执行回写的脏数据大小,不能超过rbd cache max dirty,默认5G
rbd ssd chunk order:缓存文件分片大小,默认64KB = 2^16
rbd ssd cache path:缓存文件所在的路径
点评:这是盛大游戏G云自己开发的带掉电保护的rbd cache,前面四个参数与前述rbd cache *含义相似,rdb ssd chunk size定义缓存文件的分片大小,是缓存文件的最小分配/回收单位,分片大小直接影响缓存文件的使用效率;在运行过程中librbd也会基于io大小动态计算分片大小,并在合适的时候应用到缓存文件.
上面就是盛大游戏G云在使用Ceph rbd过程中,在客户端所做优化的一些经验,如有错误还请多多批评指正,也欢迎各位补充。继续来看看OSD的调优

OSD配置优化

Ceph OSD端包含了众多配置参数,所有的配置参数定义在src/common/config_opts.h文件中,当然也可以通过命令查看集群的当前配置参数:

#> ceph --admin-daemon {path/to/socket} config show
由于能力有限,下面仅分析常见的几个配置参数:

osd op threads:处理peering等请求的线程数
osd disk threads:处理snap trim,replica trim及scrub等的线程数
filestore op threads:io线程数
点评:相对来说线程数越多,并发度越高,性能越好;然如果线程太多,频繁的线程切换也会影响性能;所以在设置线程数时,需要全面考虑节点CPU性能,OSD个数以及存储介质性质等。通常前两个参数设置一个较小的值,而最后一个参数设置一个较大的值,以加快io处理速度。在发生peering等异常时可以动态的调整相关的值。
filestore op thread timeout:io线程超时告警时间
filestore op thread suicide timeout:io线程自杀时间,当一个线程长时间没有响应,Ceph会终止该线程,并导致OSD进程退出
点评: 如果io线程出现超时,应结合相关工具/命令分析(如:ceph osd perf),是否OSD所在的磁盘存在瓶颈,或者介质故障等
ms dispatch throttle bytes:Messenger流控,控制DispatcherQueue队列深度,0表示不受限
点评:Messenger处在OSD的最前端,其性能直接影响io处理速度。在Hammer版本中,io请求添加到OSD::op_shardedwq才会返回,其他一些请求会直接添加到DispatchQueue中;为避免Messenger成为瓶颈,可以将该值设大点
osd_op_num_shards:默认为5,OSD::op_shardedwq中存储io的队列个数
osd_op_num_threads_per_shard: 默认为2,为OSD::op_shardedwq中每个队列分配的io分发线程数
点评:作用于OSD::op_shardedwq的总线程数为:osd_op_num_shards*osd_op_num_threads_per_shard, 默认为10;io请求经由Messenger进入,添加到OSD::op_shardedwq后,由上述分发线程发送给后端的filestore处理。视前端网络(如:10Gbps)和后端介质性能(如:SSD),可考虑调高该值。
filestore_queue_max_ops:控制filestore中队列的深度,最大未完成io数
filestore_queue_max_bytes:控制filestore中队列的深度,最大未完成io数据量
filestore_queue_commiting_max_ops:如果OSD后端的文件系统支持检查点,则filestore_queue_max_ops+filestore_queue_commiting_max_ops作为filestore中队列的最大深度,表示最大未完成io数
filestore_queue_commiting_max_bytes:如果OSD后端的文件系统支持检查点,则filestore_queue_max_bytes+filestore_queue_commiting_max_bytes作为filestore中队列的最大深度,表示最大未完成io数据量
点评: filestore收到前述分发线程递交的io后,其处理过程首先会受到filestore队列深度的影响;如果队列中未完成io超过设置阀值,请求将会堵塞。所以调高该值是不个很明智的选择。
journal_queue_max_ops: 控制FileJournal中队列的深度,最大未完成日志io数
journal_queue_max_bytes: 控制FileJournal中队列的深度,最大未完成日志io数据量
点评: filestore收到前述分发线程递交的io后,还会受到FileJournal队列的影响;如果队列中未完成io超过设置阀值,请求同样会堵塞;通常,调高该值是个不错的选择;另外,采用独立的日志盘, io性能也会有不少的提升
journal_max_write_entries: FileJournal一次异步日志io最大能处理的条目数
journal_max_write_bytes: FileJournal一次异步日志io最大能处理的数据量
点评: 这两个参数控制日志异步io每次能处理的最大io数,通常要根据日志文件所在磁盘的性能来设置一个合理值
filestore_wbthrottle_enable:默认为true,控制OSD后端文件系统刷新
filestore_wbthrottle_*_bytes_start_flusher:xfs/btrfs文件系统开始执行回刷的脏数据
filestore_wbthrottle_*_bytes_hard_limit: xfs/btrfs文件系统允许的最大脏数据,用来控制filestore的io操作
filestore_wbthrottle_*_ios_start_flusher:xfs/btrfs文件系统开始执行回刷的io请求数
filestore_wbthrottle_*_ios_hard_limit:xfs/btrfs文件系统允许的最大未完成io请求数,用来控制filestore的io操作
filestore_wbthrottle_*_inodes_start_flusher:xfs/btrfs文件系统开始执行回刷的对象数
filestore_wbthrottle_*_inodes_hard_limit:xfs/btrfs文件系统允许的最大脏对象,用来控制filestore的io操作
点评:*_start_flusher参数定义了刷新xfs/btrfs文件系统脏数据阀值,以将磁盘缓存更新到磁盘;*_hard_limit参数会影响filestore的io操作,堵塞filestore op thread线程。所以设置一个较大的值性能会有提升
filestore_fd_cache_size: 对象文件句柄缓存大小
filestore_fd_cache_shards: 对象文件句柄缓存分片个数
点评:缓存文件句柄能加快文件的访问速度,个人建议缓存所有的文件句柄,当然请记得调高系统的句柄限制,以免句柄耗尽
filestore_fiemap: 开启稀疏读写特性
点评: 开启该特性,有助于加快克隆和恢复速度
filestore_merge_threshold: pg子目录合并的最小文件数
filestore_split_multiple: pg子目录分裂乘数,默认为2
点评:这两个参数控制pg目录的合并与分裂,当目录下的文件数小于filestore_merge_threshold时,该目录的对象文件会被合并到父目录;如果目录的文件数大于filestore_merge_threshold*16*filestore_split_multiple,该目录会分裂成两个子目录。设置合理的值可以加快对象文件的索引速度
filestore_omap_header_cache_size: 扩展属性头缓存
点评: 缓存对象的扩展属性_Header对象,减少对后端leveldb数据库的访问,提升查找性能

时间: 2024-11-06 20:58:02

ceph 参数说明<转>的相关文章

Ceph分布式集群文件系统测试

1.使用Ceph rados bech工具进行测试 rados bech工具是Ceph内置的基准性能测试工具,用于测试Ceph集群存储池层面的性能.rados bech支持写.连续读.和随机读等 基准测试. rados bech工具命令语法: #rados bench -p <pool name> <seconds> <write|seq|rand> -b <blcoksize> -t <> --no-cleanup -p:pool存储池名称 &

006 管理Ceph的RBD块设备

一, Ceph RBD的特性 支持完整和增量的快照 自动精简配置 写时复制克隆 动态调整大小 二.RBD基本应用 2.1 创建RBD池 [root@ceph2 ceph]# ceph osd pool create rbd 64 pool 'rbd' created [root@ceph2 ceph]# ceph osd pool application enable rbd rbd enabled application 'rbd' on pool 'rbd' 2.2 客户端验证 [root@

管理ceph缓存池

目录 缓存池简介 缓存池原理 缓存池的工作模式 配置缓存池 1. 创建一个缓存池 2. 设置缓存层 3. 缓存层相关参数说明 4. 测试缓存池 删除缓存池 1. 删除read-only缓存池 2. 删除writeback缓存池 缓存池简介 缓存池原理 ceph的缓存分层特性是在ceph的F版当中正式发布的.所谓的缓存分层其实就是在更快的磁盘(通常是ssd)上创建一个存储池.然后将这个存储池放置在常规的复制池或者纠删码池的前端充当缓存.这样所有的客户端I/O操作都首先由缓存池处理,之后再将数据写回

在kubernetes1.17.2上结合ceph部署efk

简绍 应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我们调试问题和监视集群情况也是非常有用的.而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中.对于容器化应用程序来说则更简单,只需要将日志信息写入到 stdout 和 stderr 即可,容器默认情况下就会把这些日志输出到宿主机上的一个 JSON 文件之中,同样也可以通过 docker logs 或者 kubectl logs 来查看到对应的日志信息. Kubernetes 中比较流行的日志收集解决

ceph集群常用命令

结合网络.官网.手动查询等多方渠道,整理ceph维护管理常用命令,并且梳理常规命令在使用过程中的逻辑顺序.另外整理期间发现ceph 集群的命令体系有点乱,详细情况各自体验. 一:ceph集群启动.重启.停止 1:ceph 命令的选项如下: 选项简写描述 --verbose-v详细的日志. --valgrindN/A(只适合开发者和质检人员)用 Valgrind 调试. --allhosts-a在 ceph.conf 里配置的所有主机上执行,否 则它只在本机执行. --restartN/A核心转储

记录一次ceph recovery经历

一次ceph recovery经历 背景 这是一个测试环境. 该环境中是cephfs 一共12个节点, 2个client.2个mds.8个osd mds: 2颗CPU,每个4核,一共是8核. 128G内存, 单独的两个节点,只作为mds cpu型号: Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz osd节点, 每个24核, 8 × 4T SATA盘, 1 SSD:INTEL SSD SC2BB48 (480G) 64G内存 cpu型号: Intel(R) X

交换机死机,导致ceph ( requests are blocked ) 异常解决方法

问题描述: 万兆交换机死机后,导致在交换机上的ceph 的cluster网络会中断,用户正在对数据块的访问没有完成导致请求被blocked,同时部分pg会处于不同步状态,因此交换机重启后,通过ceph health会发现ceph集群不在OK 状态 health HEALTH_ERR 1 pgs inconsistent; 1 pgs repair; 2 requests are blocked > 32 sec; 1 scrub errorspg 6.89 is active+clean+inc

ceph ( pgs inconsistent) pgs不一致 异常状态处理方式

问题描述: 在某些情况下,osd出现异常,导致pgs出现不一致状态# ceph health detailHEALTH_ERR 1 pgs inconsistent; 1 scrub errorspg 6.89 is active+clean+inconsistent, acting [12,1,10]1 scrub errors 可以看到,pg 6.89处于不一致状态 解决方式:#ceph pg repair 6.89instructing pg 6.89 on osd.12 to repai

ceph radosgw与keystone整合

1.参考http://penguintux.blog.51cto.com/3021117/1872939部署好ceph radosgw ceph版本:jewel docker镜像:ceph/daemon:tag-build-master-jewel-centos-7 2.安装keystone,这里使用kolla newton安装好了keystone 参考http://penguintux.blog.51cto.com/3021117/1865832,仅需要安装keyston,kolla的glob