MemStore
MemStore配置简单,应用中会占用host内存来存储objects数据,OSD在mkfs的时候会在对应目录下创建一个collections的文件,用于存放OSD对应内存中的objects数据。
参考文章:How to configure ceph use memstore?
配置
在ceph.conf里添加相应配置:
如果要所有OSD都启动MemStore,在[global]或[osd]里添加即可:
1 | osd objectstore = MemStore |
如果要制定某些OSD启动MemStore,在对应OSD的选项里制定即可:
1 | [osd.0] |
性能测试
测试环境:5个Hosts,每个host上3个OSD。
启动MemStore后,运行rest-bench测试工具,write IO性能约有所提升,但提升幅度在两次测试中不一致。
配置所有OSD启动MemStore
1
2MemStore: Bandwidth (MB/sec) - 211.208
FileStore: Bandwidth (MB/sec) - 177.186配置部分OSD启动MemStore,余下的OSD启动FileStore
每个Host上配置1个OSD启动MemStore,剩余2个启动FileStore
1
2MemStore: Bandwidth (MB/sec) - 123.848
FileStore: Bandwidth (MB/sec) - 222.263MemStore OSDs较少,rest-bench压力测试的话,MemStore性能受限。
详细参考文章:RGW performance with FileStore and MemStore
问题分析
MemStore何时刷数据到disk不确定?
看代码是在OSD::umount里调用_save()函数,但是在实际测试中,stop一个OSD并没在log文件中找到对应log。
MemStore会一直占用host的内存,测试中发现host的物理内存会一直减少到200多M后,swap分区开始减少,当swap分区也没的时候,客户端写会报错。
但比较奇怪的是过阵子Host端内存被回收,这时OSD一切正常。。。不确定系统会不会直接把OSD占用的内存直接回收,导致OSD丢失数据。
所以MemStore不适合做大数据的直接存储,可以结合Cache Tiering做缓存。如果某个PG所在的OSD同时重启,会导致该PG数据丢失。测试中我还同时把5个Hosts上的ceph osd都重启,结果整个ceph系统数据混乱且无法恢复。
Cache Tiering
Cache Tiering是结合CRUSH map, pool, CRUSH ruleset来实现某个pool作为其他pool的cache。
详细链接: http://docs.ceph.com/docs/master/rados/operations/cache-tiering/
配置
5个Hosts,每个host上3个OSD, 每个Host上配置1个OSD启动MemStore,剩余2个启动FileStore。
测试中把5个MemStore的OSD配置为一个rule,剩余的FileStore的OSD配置位另一个rule。
修改并设置CRUSH map
这里配置了两个rule,rule 0 和rule 1,其中rule 0只使用FileStore的OSD,rule 1只是用MemStore的OSD。
1
2
3
4ceph osd getcrushmap -o crushmap
crushtool -d crushmap -o crush.map
crushtool -c crush.map -o crushmap
ceph osd setcrushmap -i crushmap创建cachepool,并制定其crush_ruleset
1
2
3ceph osd pool create cachepool 512 512 replicated
ceph osd pool set cachepool crush_ruleset 1
ceph osd pool set .rgw.buckets crush_ruleset 0指定某个pool为其他pool的cache tier,设置cache mode
1
2
3ceph osd tier add .rgw.buckets cachepool
ceph osd tier cache-mode cachepool writeback
ceph osd tier set-overlay .rgw.buckets cachepool
性能测试
如上配置的Cache Tiering
Bandwidth (MB/sec): 169.912
MemStore – 取消pool的cache设置,并指定.rgw.buckets的crush_ruleset为1
Bandwidth (MB/sec): 222.263
FileStore – 取消pool的cache设置,并指定.rgw.buckets的crush_ruleset为0
Bandwidth (MB/sec): 123.848
问题分析
Cache Tiering能提升慢设备的吞吐量,但是其配置参数很多,需要根据具体应用场景测试配置参数。
拿MemStore作为cache能一定程度提升client的IO write性能(前提是设置cache-mode为writeback)。
可配置参数
Cache Tiering可以设置cache的刷新参数,包括以下几个:
1 | ceph osd pool set {cachepool} hit_set_type bloom – 使用bloom算法来管理hit_set集合 |