设为首页 收藏本站
查看: 1411|回复: 0

[经验分享] Ceph块存储介绍

[复制链接]
发表于 2019-2-2 08:55:36 | 显示全部楼层 |阅读模式
  (转自一只小江)
  一、 前置知识
  
  块设备:
  块设备将信息存储在固定大小的块中,每个块都能进行编址。块设备的基本特征是每个块都能区别于其它块而读写。块设备也是底层设备的抽象,块设备上未建立文件系统时,也称之为裸设备。
  块设备与ceph的联系:
  client想要把数据存储到ceph的集群中时,他必须要有一个读写的目标,能够在本地知道这个目标。这里讲的是块存储,当然这个读写的目标要是一个块设备才行,需要将这个块设备与ceph关联起来,这个块设备通常成为rbd设备。
  rbd的全称应该是Rados Block Device。rbd是由ceph进行整理物理资源并且向外提供的RAODS形式的块设备,这样的块设备在客户端同其他类型的块设备使用方法相同
  
  OSD是如何存储数据
  OSD其实是建立在文件系统之上的,当你使用一个块设备进行部署OSD节点时,部署工具会默认格式化osd为xfs,当然你也可以预先格式为想要的文件系统(ext4等)。数据到了OSD层次时,这时可以把这个请求变成一个文件的操作,最后交给了xfs文件系统,最终组织到了磁盘上。
  二、rbd到osd的映射:
  1、客户端的使用rbd设备,
  在客户端使用rbd设备时,一般有两种方法。
DSC0000.png

  第一种 是kernel rbd。就是创建了rbd设备后,把rbd设备map到内核中,形成一个虚拟的块设备,这时这个块设备同其他通用块设备一样,一般的设备文件为/dev/rbd0,后续直接使用这个块设备文件就可以了,可以把/dev/rbd0格式化后mount到某个目录,也可以直接作为裸设备使用。这时对rbd设备的操作都通过kernel rbd操作方法进行的。
  第二种是librbd方式。就是创建了rbd设备后,这时可以使用librbd、librados库进行访问管理块设备。这种方式不会map到内核,直接调用librbd提供的接口,可以实现对rbd设备的访问和管理,但是不会在客户端产生块设备文件。
  2、Ceph数据映射:
DSC0001.png

  客户想要创建一个rbd设备前,必须创建 一个pool,需要为这个pool指定pg的数量,在一个pool中的pg数量是不一定的,同时这个pool中要指明保存数据的副本数量3个副本。再在这个pool中创建一个rbd设备rbd0,那么这个rbd0都会保存三份,在创建rbd0时必须指定rbd的size,对于这个rbd0的任何操作不能超过这个size。之后会将这个块设备进行切块,每个块的大小默认为4M,并且每个块都有一个名字,名字就是object+序号。将每个object通过pg进行副本位置的分配(pg map 到osd的过程会在下一节讲述),pg会寻找3个osd,把这个object分别保存在这三个osd上。osd上实际是把底层的disk进行了格式化操作,一般部署工具会将它格式化为xfs文件系统。最后对于object的存储就变成了存储一个文件rbd0.object1.file。
  3、客户端写数据到OSD:
  假设这次采用的是librbd的形式,使用librbd创建一个块设备,这时向这个块设备中写入数据,在客户端本地同过调用librados接口,然后经过pool,rbd,object、pg进行层层映射,在PG这一层中,可以知道数据保存在哪3个OSD上,这3个OSD分为主从的关系,也就是一个primary OSD,两个replica OSD。客户端与primay OSD建立SOCKET 通信,将要写入的数据传给primary OSD,由primary OSD再将数据发送给其他replica OSD数据节点。
  总结剖析这个写数据过程,第一部分客户端处理对rbd读写的请求,经过librbd与librados库可知道数据保存在哪些OSD上,客户端与primary OSD建立通信,传输请求,再由primary OSD 发送给其他replica OSD。
DSC0002.png

  三、PG选择OSD的过程
  pg选择osd过程也就是要选择保存副本的空间,每个osd只能保存一个副本。也就是一个object保存到一个pg中,由pg找到3个osd,每个osd保存一份object。
  查看crush.map:
  ceph osd getcrushmap -o crush.map
  crushtool -d crush.map >> crush.txt
  pg 到OSD的映射的过程算法叫做crush 算法,这个算法是一个伪随机的过程,他可以从所有的OSD中,随机性选择一个OSD集合,但是同一个PG每次随机选择的结果是不变的,也就是映射的OSD集合是固定的。
  1 Crush因子
  OSDMap管理当前ceph中所有的OSD,OSDMap规定了crush算法的一个范围,在这个范围中选择OSD结合。那么影响crush算法结果的有两种因素,一个就是OSDMap的结构,另外一个就是crush rule
  OSDMap其实就是一个树形的结构,叶子节点是device(也就是osd),其他的节点称为bucket节点,这些bucket都是虚构的节点,可以根据物理结构进行抽象,当然树形结构只有一个最终的根节点称之为root节点,中间虚拟的bucket节点可以是数据中心抽象、机房抽象、机架抽象、主机抽象等如图。
DSC0003.png



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670694-1-1.html 上篇帖子: ceph mon 添加 下篇帖子: Ceph架构剖析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表