前面我们提到了Ceph是一个支持统一存储架构的分布式存储服务。简单介绍了Ceph的基本概念和基础架构包含的组件,其中最重要的就是底层的RADOS和它的两类守护进程OSD and Monitor。上篇文章我们还挖了一个坑,我们提到了CRUSH。

是的,我们这篇教程就是一篇不完整的Ceph教材,因为我们讲CRUSH并不涉及其算法和实现原理,我们讲的是Ceph整体的寻址流程,并借此深入理解一下Ceph中数据的操作流程。

这张就是Ceph的寻址流程示意图了,大家可以看到里面主要分四层,File->Objects->PGs->OSDs。很多同学就要问了,这什么Objects,PGs是什么新名词啊,我们先来看一下哈。

File:就是我们想要存储和访问的文件了,这个是面向我们用户的,是我们直观操作的对象。

Object:这个object就是Ceph底层RADOS所看到的对象,也就是在Ceph中存储的基本单位了。object的大小由RADOS限定(通常为2m或者4m)。就跟HDFS抽象一个数据块一样,这里也是为了方便底层存储的组织管理。当File过大时,需要将File切分成大小统一的objects进行存储。

PG (Placement Group):PG是一个逻辑的概念,它的用途是对object的存储进行组织和位置的映射,通过它可以更好的分配数据和定位数据。

OSD (Object Storage Device):这个前面我们也介绍过了,它就是真正负责数据存取的服务。

PG和object是一对多的关系,一个PG里面组织若干个object,但是一个object只能被映射到一个PG中。

PG和OSD是多对多的关系,一个PG会映射到多个OSD上(大于等于2,此处即为副本机制),每个OSD也会承载大量的PG。

了解了上面一些基本的概念之后,就要到我们的寻址流程讲解了,通过寻址流程图我们可以看到,Ceph中的寻址需要经历三次映射,分别是File->Object,Object->PG,PG->OSD。我们重点提到的CRUSH就是在第三步映射PG->OSD出现的。我们依次看一下。

File->Object

这一步非常简单,就是将file切分成多个object。每个object都有唯一的id即oid。这个oid是怎样产生的呢,就是根据文件名称得到的。

图中的ino为文件唯一id(比如filename+timestamp),ono则为切分后某个object的序号(比如0,1,2,3,4,5等),根据该文件的大小我们就会得到一系列的oid。

注:将文件切分为大小一致的object可以被RADOS高效管理,而且可以将对单一file的处理变成并行化处理提高处理效率。

Object -> PG

这里需要做的工作就是将每个object映射到一个PG中去,实现方式也很简单就是对oid进行hash然后进行按位与计算得到某一个PG的id。图中的mask为PG的数量减1。这里我们认为得到的pgid是随机的,这与PG的数量和文件的数量有关系。在足够量级的程度上数据是均匀分布的。

PG -> OSD

最后一次映射就是将object所在的PG映射到实际的存储位置OSD上。这里应用的就是CRUSH算法了,通过CRUSH算法可以通过pgid得到多个osd(跟配置有关)。

因为我们不会过多的讨论CRUSH是如何实现的,我们可以换个思考的角度认识一下CRUSH都做了哪些工作。假如我们不用CRUSH用HASH是否可以?我们也套用上面的公式hash(pgid) & mask = osdid是否可以实现呢?

假如我们这里也用hash算法生成osdid,如果我们的osd的数量发生了改变,那么mask的值就会改变,我们最终得到的osdid的值就会改变。这就意味着我当前这个PG保存的位置发生了改变,该PG下的数据都需要迁移到另外一个OSD上去了,这肯定是行不通的。而Ceph是支持多副本备份机制的,PG是应该映射到多个OSD上去,而通过HASH的方式只能得到一个。所以这里就需要CRUSH了,CRUSH可以根据集群的OSD状态和存储策略配置动态得到osdid,从而自动化的实现高可靠性和数据均匀分布。

关于CRUSH的详细实现还需参考Sage Weil的论文。

现在我们已经对三次映射有了一个简单的了解,大家可以看到我们整个过程中我们只知道文件的名称和文件大小等信息,并没有去查询文件所在位置信息等等,都是通过计算算出来的。上篇文章中我们提到的Monitors(提供元数据服务存储)实际上只是维护着整个集群中一些服务的状态信息也叫做ClusterMap。至于数据到底是在哪个osd是通过CRUSH算法计算出来的。所以这里的元数据服务跟HDFS的NameNode就又不一样了。NameNode里面保持的就是每个block所在的具体位置。那么Ceph是怎样做到的呢,其实就是因为逻辑层PG和CRUSH算法。读懂了Ceph的寻址流程那么对于Ceph的数据读写流程自然就不陌生了。

是时候看看Sage Weil的论文了

参考:
Ceph官方文档
ceph存储数据的详细流程(CRUSH)

欢迎关注我:叁金大数据(不稳定持续更新~~~)

转载于:https://www.cnblogs.com/jixin/p/9544977.html

不讲CRUSH的Ceph教程是不完整的相关推荐

  1. python代码手机壁纸_Python制作微信好友背景墙教程(附完整代码)

    引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这里作了模糊处理. 是不是很炫,而且这还是独一无二的,毕竟 ...

  2. centos7无界面系统物理机安装教程超详细完整教程图解

    centos7无界面系统物理机安装教程超详细完整教程图解 安装系统所需要用到的相关工具: 一个U盘(此U盘之后会被格式化,请先备份好里面重要内容) 系统镜像(自定义镜像文件,博主的镜像可在下面链接提取 ...

  3. ISE14.7使用教程(一个完整工程的建立)

    ISE14.7使用教程(一个完整工程的建立) 博主提到 黑金xlinix FPGA 黑金动力社区(http://www.heijin.org)如需转载,请注明出处http://www.cnblogs. ...

  4. Ceph使用块设备完整操作流程

    Ceph使用块存储,系统内核需要3.0及以上的内核,以支持一些ceph模块. 创建块的时候可以指定类型(type1和type2),只有type2的可以对快照进行保护,保护以后才能做克隆.   使用块设 ...

  5. python+freetype+opencv 图片中文(汉字)显示 详细图文教程和项目完整源代码

    opencv图片写入中文(汉字)有两方法: 方法一: python+opencv+freetype https://blog.csdn.net/wyx100/article/details/75579 ...

  6. python自学完整教程_python自学完整教程

    [教程介绍] 想学习一门编程语言,是不是必须考上大学的计臬机专业,才能真正学会呢? 其实不是,在我们身边,很多初中生,甚至国外不少小学生都能把编程学好,通过自学,很多人都能成为编程高手. python ...

  7. php - 超详细将 pdf 文档格式转换为图片格式,将 offce pdf 演示文稿转成图像 png / jpg(小白一看就懂的详细教程,附带完整示例源代码)

    效果图 其他教程都有点乱而且有bug,本文站在新手小白的角度比较靠谱,超详细的完整流程及详细注释代码. 本文实现了 php 将 pdf 文档转为图片(png / jpg),完整流程及示例源代码, 你可 ...

  8. 【CASS精品教程】Win7+CAD2008+CASS9.1(含CASS3D)完美安装教程(附完整软件安装包下载)

    本文讲解win764位系统上安装CAD2008+CASS9.1(含CASS3D)免费版安装,文末附完整软件下载地址,亲测可用!!! 文章目录 1. CAD2008安装 2. CASS9.1安装 3. ...

  9. python采集小说网站完整教程(附完整代码)

    python 采集网站数据,本教程用的是scrapy蜘蛛 1.安装Scrapy框架 命令行执行: pip install scrapy 安装的scrapy依赖包和原先你安装的其他python包有冲突话 ...

最新文章

  1. java 继承先后顺序_Java中的继承关系的加载顺序
  2. 《我也能做CTO之程序员职业规划》写作过程重播之二
  3. Redis 一主三从 哨兵
  4. NavigationDrawer和NavigationView-Android M新控件
  5. 哈希表(散列表)知识点概述
  6. MySQL之父与企鹅的故事
  7. redis存储的数据类型
  8. java+fseek+函数_函数fseek() 用法(转)
  9. jquery 加载显示loading图标_王者荣耀100强什么意思?loading界面左上角100强有什么含义...
  10. 在Unity3D中实现安卓平台的本地通知推送
  11. 【maven】maven pom文件详解
  12. java8 stream中 forEach和 forEachOrdered 当parallel时候执行过程安全问题深入理解
  13. LINUX环境下安装MySQL数据库
  14. 招商银行笔试题之漂流船问题
  15. 如果这篇文章说不清epoll的本质,那就过来掐死我吧! (3)
  16. 如何获取天猫/淘宝商品历史价格信息
  17. iOS-App移交(更换app开发者账号)
  18. OpenEuler安装 20212802范辰宇
  19. 什么叫单模光纤_单模光纤和多模光纤有什么区别
  20. Mac最新版书籍分享

热门文章

  1. 聊聊微服务的服务注册与发现
  2. 斯坦福大学Andrew Ng - 机器学习笔记(3) -- 神经网络模型
  3. The MIT License (MIT)
  4. [转]Entity Framework走马观花之把握全局
  5. 休息五分钟,学几个bash快捷键
  6. leetcode算法题--链表组件
  7. leetcode算法题--最长字符串链
  8. leetcode算法题--K站中转内最便宜的航班★
  9. 普通平键的主要尺寸有_?办公桌分类及尺寸介绍
  10. ubuntu 安装deb_Ubuntu不完全小坑指南