pg与osd的对应关系查找

利用pg在pool以及osd的分布关系可以更好的分析pg的分布是否均匀

首先获取pg的query数据。利用Ansible模块获取数据。数据如下:

利用python分析该数据:

ceph rbd的新特性

ceph支持 layering,striping exclusive lock, object map,fast diff ,deep-flatten 等新的new features
layering
image的克隆操作。可以对image创建快照并保护,然后从快照克隆出新的image出来,父子image之间采用COW技术,共享对象数据。

striping v2
条带化对象数据,类似raid 0,可改善顺序读写场景较多情况下的性能。

exclusive lock
保护image数据一致性,对image做修改时,需要持有此锁。这个可以看做是一个分布式锁,在开启的时候,确保只有一个客户端在访问image,否则锁的竞争会导致io急剧下降。 主要应用场景是qemu live-migration。

object map
此特性依赖于exclusive lock。因为image的对象分配是thin-provisioning,此特性开启的时候,会记录image所有对象的一个位图,用以标记对象是否真的存在,在一些场景下可以加速io。

fast diff
此特性依赖于object map和exlcusive lock。快速比较image的snapshot之间的差异。

deep-flatten
layering特性使得克隆image的时候,父子image之间采用COW,他们之间的对象文件存在依赖关系,flatten操作的目的是解除父子image的依赖关系,但是子image的快照并没有解除依赖,deep-flatten特性使得快照的依赖也解除。

journaling
依赖于exclusive lock。将image的所有修改操作进行日志化,并且复制到另外一个集群(mirror),可以做到块存储的异地灾备。这个特性在部署的时候需要新部署一个daemon进程,目前还在试验阶段,不过这个特性很重要,可以做跨集群/机房容灾。

创建image的时候,jewel默认开启的特性包括: layering/exlcusive lock/object map/fast diff/deep flatten

Exclusive Lock
从上面可以看出,很多特性都依赖于exclusive lock,重点介绍一下。

exclusive lock 是分布式锁,实现的时候默认是客户端在第一次写的时候获取锁,并且在收到其他客户端的锁请求时自动释放锁。这个特性在jewel默认开启后,本身没什么问题, 客户端可以自动获取和释放锁,在客户端crash后也能够正确处理。

ceph性能优化的操作笔记(3)

Ceph层面的优化
参数的查询
下面的tuning参数可以通过以下命令获取

以下命令用来观察osd的性能:

1 filestore/object store 的参数
filestore queue max ops = 50000 数据盘最大接受的操作数
filestore queue max bytes = 524288000 数据盘一次操作最大的字节数(bytes)
跟踪op_queue_reserve_throttle查看是否有waiting大于max_ops或大于max_bytes. 当队列的操作数过多,或者队列中操作数据长度过大,阻塞等待。在某个操作处理结束后,_void_process_finish会唤醒

filestore queue committing max ops = 50000 #数据盘能够commit的操作数
filestore queue committing max bytes = 524288000 #数据盘能够commit的最大字节数(bytes)

filestore fd cache size: 128 #对象文件句柄缓存大小 10000 objects. (10k files x 4M/file = 40G) as cache。如果有100G内存。 100G /10 osd = 10G /4M = 2500(cache size)
filestore fd cache shards: 16 #对象文件句柄缓存分片个数
默认值128个object。如果每个object的大小为4M,每个filestore 只能cache 128*4M = 512M 。缓存文件句柄能加快文件的访问速度,建议缓存所有的文件句柄,要调高系统的句柄限制,以免句柄耗尽。建议10240

filestore_fiemap: #开启稀疏读写特性,有助于加快克隆和恢复速度

filestore_max_sync_interval: 5
filestore_min_sync_interval: 0.01

filestore_merge_threshold: 10 #pg子目录合并的最小文件数
filestore_split_multiple: 2 #pg子目录分裂乘数,默认为2
这两个值决定了一个目录下,存放object文件的个数。 默认为 10 * 2 * 16 = 320个。 如果超过这个数, 目录会自动split。 这会影响到内存中元数据的访问, 进而影响性能。filestore_merge_threshold表示, 当一个目录下的object文件数小于该值时, 目录会自动合并。两个参数控制pg目录的合并与分裂,当目录下的文件数小于filestore_merge_threshold时,该目录的对象文件会被合并到父目录;如果目录的文件数大于filestore_merge_threshold*16*filestore_split_multiple,该目录会分裂成两个子目录。设置合理的值可以加快对象文件的索引速度