该文同时发表在盛大游戏G云微信公众号,粘贴于此,方便各位查阅
Ceph,相信很多IT朋友都听过。因为搭上了Openstack的顺风车,Ceph火了,而且越来越火。然而要用好Ceph却也不是件易事,在QQ群里就经常听到有初学者抱怨Ceph性能太烂,不好用。事实果真如此吗!如果你采用Ceph的默认配置来运行你的Ceph集群,性能自然不能如人意。俗话说,玉不琢,不成器;Ceph也有它的脾性,经过良好配置优化的Ceph性能还是不错的。下文简单分享下,盛大游戏G云在Ceph优化上的一些实际经验,如有错误之处,欢迎指正。
下文的Ceph配置参数摘自Ceph Hammer 0.94.1 版本
Ceph配置参数优化
首先来看看Ceph客户端与服务端的交互组件图:
Ceph是一个统一的可扩展的分布式存储,提供Object
,Block
及file system
三种访问接口;它们都通过底层的librados
与后端的OSD
交互;OSD
是Ceph的对象存储单元,实现数据的存储功能。其内部包含众多模块,模块之间通过队列交换消息,相互协作共同完成io的处理;典型模块有:网络模块Messenger
,数据处理模块Filestore
,日志处理模块FileJournal
等。
面对众多的模块,Ceph也提供了丰富的配置选项,初步统计Ceph有上千个配置参数,要配置好这么多参数,难度有多大可想而知。G云内部主要使用Ceph Block Storage
,即:Ceph rbd
;下文的配置参数优化也就限于rbd
客户端(librbd
)和OSD
端。
下面先来看看客户端的优化
rbd
客户端配置优化
当Ceph作为虚拟机块存储使用时,Qemu
是通过librbd
,这个客户端库与Ceph集群交互的;与其相关的配置参数基本都以rbd_
为前缀。可以通过如下命令获取librbd
的当前配置:
//path/to/socket指向某个osd的admin socket文件
#> ceph --admin-daemon {path/to/socket} config show | grep rbd
下面对其中的某些配置参数进行详细说明:
rbd cache
: 是否使能缓存,默认情况下开启。rbd cache size
:最大的缓存大小,默认32MBrbd cache max dirty
:缓存中脏数据的最大值,用来控制回写,不能超过rbd cache size
,默认24MBrbd cache target dirty
:开始执行回写的脏数据大小,不能超过rbd cache max dirty
,默认16MBrbd cache max dirty age
: 缓存中单个脏数据的最大缓存时间,避免因为未达到回写要求脏数据长时间存在缓存中,默认1s
点评:开启Cache能显著提升顺序io的读写性能,缓存越大性能越好;如果容许一定的数据丢失,建议开启。