Ceph Newstore存储引擎介绍
在Ceph被越来越多地应用于各项存储业务过程中,其性能及调优策略也成为用户密切关注讨论的话题,影响性能表现关键因素之一即OSD存储引擎实现;Ceph基础组件RADOS是强一致、对象存储系统,其OSD底层支持的存储引擎如下图所示:

其中,ObjectStore层封装了下层存储引擎的所有IO操作,向上层提供对象(object)、事务(Transaction)语义的接口,MemStore为基于内存的实现;KeyValueStore主要基于KV数据库(如leveldb, rocksdb等)实现接口功能,事务实现也基于KV数据库自身;FileStore是Ceph目前默认的存储引擎(也是目前使用最多的存储引擎),其事务实现基于Journal机制(Journal文件或块设备);除了支持事务特性(consistency、atomic等)外,Journal还可将多个小IO写合并为顺序写Journal,以提升性能。
在社区使用过程中,FileStore也暴露了若干问题:(1)Journal机制使一次写请求在OSD端变为两次写操作(同步写Journal,异步写入object);(2)对前一个问题,社区通常做法是使用专门设备(如SSD)用作Journal以解耦Journal和object写操作的相互影响,但持续循环写入Journal会降低SSD设备的使用寿命;(3)写入的每个object都一一对应OSD本地文件系统的一个物理文件,对于大量小object存储场景,OSD端无法缓存本地所有文件的inode等元数据,使读写操作可能需要多次本地IO,系统性能差;(4)object对应的本地物理文件的文件名,包含了object name、rados namespaces、object name hash、snapshot等信息,可能会超过本地文件系统对文件名长度的限制。
面对上述问题,新的存储引擎NewStore(又被称为KeyFileStore)出现,其关键数据结构如下图所示:

其主要特点有:(1)解耦object与本地物理文件间的一一对应关系,通过索引结构(上图中ONode)在object和本地物理文件建立映射关系,并使用KV数据库存储索引数据;(2)在保证事务特性的同时,对于object的create/append/overwrite(fragement aligned)操作,无需Journal支持;(3)对于unaligned update操作,先同步写入write-ahead-log(简称为WAL,使用KV存储),再异步写入相应的fragement文件;(4)在KV数据库上层建立Onode数据cache以加速读取操作;(5)单个object可以有多个fragement文件,多个object也可共存于一个fragement文件;
FileStore的上述问题,在NewStore结构中已基本解决;NewStore还采用以下策略来减小WAL的性能开销:(1)在update写入fragement文件后,立即将相应WAL从KVdb中删除(WAL已完成使命,无需保存);(2)增大KVdb的write buffer,尽量将WAL保留在buffer中,避免不必要的dump;(3)在write buffer数据dump到磁盘前,强制合并多个buffer数据,以避免不必要的dump。在初步的随机读写测试中,NewStore相对于FileStore有60%的性能提升;
本博客的上篇博文《海量小文件存储与Ceph实践》从元数据管理、本地存储引擎两个方面对海量小文件存储问题进行了分析描述,并通过object class接口层对FileStore存储结构做了改进优化,虽不如NewStore彻底,但也在很大程度上优化了小文件存储性能;NewStore则直接在存储引擎层进行重新设计实现,解耦object与本地物理文件间的对应关系,并允许多个object共存于一个fragement文件;但二者对小文件本地存储引擎优化的本质思想是相通的,即合并存储+索引;不过目前NewStore还在密集开发阶段,到线上部署还需要一段时间;相信以后随着NewStore引擎的逐步部署与成熟,海量小文件存储难题也不再是难题。
另外,基于object class接口层的改进优化方案相关代码实现已放到github,欢迎测试使用及批评指正。
参考:
图片和相关内容摘自2015年6月份Beijing Ceph Day《Newstore》讲稿
http://thread.gmane.org/gmane.comp.file-systems.ceph.devel/23414/focus=23417
http://docs.ceph.com/docs/master/rados/configuration/journal-ref/
http://www.sebastien-han.fr/blog/2014/02/17/ceph-io-patterns-the-bad/
http://tracker.ceph.com/projects/ceph/wiki/Optimize_Newstore_for_massive_small_object_storage
http://www.cnblogs.com/wuhuiyuan/p/ceph-small-file-compound-storage.html
http://www.wzxue.com/ceph-filestore/
http://www.wzxue.com/ceph-keyvaluestore/
https://github.com/yxgup/ceph/tree/omap_indexed_compound
------------------------------------
http://www.cnblogs.com/wuhuiyuan/p/4907984.html
个人原创,转载请注明出处。
Ceph Newstore存储引擎介绍的更多相关文章
- [ ceph ] BlueStore 存储引擎介绍
为什么需要 BlueStore 首先,Ceph原本的FileStore需要兼容Linux下的各种文件系统,如EXT4.BtrFS.XFS.理论上每种文件系统都实现了POSIX协议,但事实上,每个文件系 ...
- 数据库 --> MySQL存储引擎介绍
MySQL存储引擎介绍 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然 ...
- {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用
MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...
- Mysql部分存储引擎介绍
Mysql存储引擎 什么是存储引擎 mysql中建立的库 --> 文件夹 库中建立的表 --> 文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制: ...
- MySql存储引擎介绍
MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表.若要修改默认引擎,可以修改配置文件中的default-storage-engin ...
- MySQL的常见存储引擎介绍与参数设置调优
MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...
- MySQL的常见存储引擎介绍与参数设置调优(转载)
原文地址:http://www.cnblogs.com/demon89/p/8490229.html MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check ta ...
- MySql的存储引擎介绍
下面主要介绍InnoDB.MyISAM和MEMEORY三种存储引擎. InnoDB存储引擎 InnoDB遵循CNU通用公开许可(GPL)发行.InnoDB已经被一些重量级互联网公司所采用,如雅虎.Sl ...
- MYSQL存储引擎介绍--应用场景
MySQL存储引擎通常有哪3种?各自分别有什么特点?应用场景是哪些? MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表.若要修改默 ...
随机推荐
- MapReduce之Partition的使用与分析
Partition主要作用就是将map的结果发送到相应的reduce.这就对partition有两个要求: 1)均衡负载,尽量的将工作均匀的分配给不同的reduce. 2)效率,分配速度一定要快. M ...
- 【Hadoop代码笔记】Hadoop作业提交之TaskTracker获取Task
一.概要描述 在上上一篇博文和上一篇博文中分别描述了jobTracker和其服务(功能)模块初始化完成后,接收JobClient提交的作业,并进行初始化.本文着重描述,JobTracker如何选择作业 ...
- 【bzoj2440】完全平方数
题意: 求第n个不为完全平方数倍数的数 题解: 网上有人说答案不会超过2n (求证0 0?) 竟然不超过2n 那么很明显就是用二分做了 二分判定就是要求小于等于n的合法的数的个数 不难发现一个数若为完 ...
- git http方式时保存密码
一直使用ssh方式,但是git@osc的ssh只能pull,不能push - -||| htts方式保存密码老是忘记,每次提交代码都要输入密码烦死了.找到文章备忘: 转自:http://git ...
- 远程控制篇:用Delphi模拟键盘输入/鼠标点击
模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数. Keybd_event函数能触发一个按键事件,也就是会产生一个WM_KEYDOWN或WM_KEYUP消息 ...
- 配置MySQL主从双向同步
原文地址:http://www.cnblogs.com/zhongshengzhen/ 原主数据库:192.168.137.33 原从数据库:192.168.137.197 需要先阅读并操作:ht ...
- <meta 标签的详细使用
meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:na ...
- 08重编终极版《东邪西毒:终极版》DVD粤语中字
1.东邪西毒].Ashes.of.Time.1994.384p.DVDRip.x264.ac3-DTMM.mkv 这个版本最清晰 ,可惜删减了,只有87分钟,粤语,1.4G. 2.东邪西毒(初始版). ...
- iOS之FMDB 转载
写的较好的博客:http://blog.csdn.net/xyz_lmn/article/details/9312837 http://www.cnblogs.com/wuhenke/archiv ...
- linux的root登录password问题
以Ubuntu为样例, 第一次登录root用户的时候,让输入password总是显示认证失败 由于安装Ubuntu的时候没有设置root的password.所以每次开机都会分配不同的rootpassw ...