ceph存储中osd的作用(ceph osd)

ceph存储中osd的作用(ceph osd)Ceph 是一个统一的分布式存储系统 设计初衷是提供较好的性能 可靠性和可扩展性 Ceph 项目最早起源于 Sage 就读博士期间的工作 最早的成果于 2004 年发表 并随后贡献给开源社区 在经过了数年的发展之后 目前已得到众多云计算厂商的支持并被广泛应用 RedHat 及 OpenStack 都可与 Ceph 整合以支持虚拟机镜像的后端存储 支持三种接口 rbd 典型设备 磁盘阵列 硬盘

大家好,我是讯享网,很高兴认识大家。





Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。


Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。




支持三种接口:



640?wx_fmt=png
讯享网

rbd


典型设备: 磁盘阵列,硬盘


主要是将裸磁盘空间映射给主机使用的。


优点



缺点



使用场景



640?wx_fmt=png

fs


典型设备: FTP、NFS服务器


为了克服块存储文件无法共享的问题,所以有了文件存储。


在服务器上架设FTP与NFS服务,就是文件存储。


优点



缺点



使用场景



640?wx_fmt=png

rgw


典型设备: 内置大容量硬盘的分布式服务器(swift, s3)


多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能。


优点



使用场景: (适合更新变动较少的数据)



640?wx_fmt=png

rados_io_1


640?wx_fmt=png

ceph_io_2


步骤


1. client 创建cluster handler。

2. client 读取配置文件。

3. client 连接上monitor,获取集群map信息。

4. client 读写io 根据crshmap 算法请求对应的主osd数据节点。

5. 主osd数据节点同时写入另外两个副本节点数据。

6. 等待主节点以及另外两个副本节点写完数据状态。

7. 主节点及副本节点写入状态都成功后,返回给client,io写入完成。


说明


如果新加入的OSD1取代了原有的 OSD4成为 Primary OSD, 由于 OSD1 上未创建 PG , 不存在数据,那么 PG 上的 I/O 无法进行,怎样工作的呢?


640?wx_fmt=png

ceph_io_3


步骤


1. client连接monitor获取集群map信息。

2. 同时新主osd1由于没有pg数据会主动上报monitor告知让osd2临时接替为主。

3. 临时主osd2会把数据全量同步给新主osd1。

4. client IO读写直接连接临时主osd2进行读写。

5. osd2收到读写io,同时写入另外两副本节点。

6. 等待osd2以及另外两副本写入成功。

7. osd2三份数据都写入成功返回给client, 此时client io读写完毕。

8. 如果osd1数据同步完毕,临时主osd2会交出主角色。

9. osd1成为主节点,osd2变成副本。


640?wx_fmt=png

ceph_io_4


1. File用户需要读写的文件。File->Object映射:


a. ino (File的元数据,File的唯一id)。
b. ono(File切分产生的某个object的序号,默认以4M切分一个块大小)。
c. oid(object id: ino + ono)。


2. Object是RADOS需要的对象。Ceph指定一个静态hash函数计算oid的值,将oid映射成一个近似均匀分布的伪随机值,然后和mask按位相与,得到pgid。Object->PG映射:


a. hash(oid) & mask-> pgid 。
b. mask = PG总数m(m为2的整数幂)-1 。


3. PG(Placement Group),用途是对object的存储进行组织和位置映射, (类似于redis cluster里面的slot的概念) 一个PG里面会有很多object。采用CRUSH算法,将pgid代入其中,然后得到一组OSD。PG->OSD映射:


a. CRUSH(pgid)->(osd1,osd2,osd3) 。


 

讯享网

640?wx_fmt=png

ceph_rbd_io


步骤


1. 客户端创建一个pool,需要为这个pool指定pg的数量。


2. 创建pool/image rbd设备进行挂载。


3. 用户写入的数据进行切块,每个块的大小默认为4M,并且每个块都有一个名字,名字就是object+序号。


4. 将每个object通过pg进行副本位置的分配。


5. pg根据cursh算法会寻找3个osd,把这个object分别保存在这三个osd上。


6. osd上实际是把底层的disk进行了格式化操作,一般部署工具会将它格式化为xfs文件系统。


7. object的存储就变成了存储一个文rbd0.object1.file。


640?wx_fmt=png

ceph_rbd_io1


客户端写数据osd过程


1. 采用的是librbd的形式,使用librbd创建一个块设备,向这个块设备中写入数据。


2. 在客户端本地同过调用librados接口,然后经过pool,rbd,object、pg进行层层映射,在PG这一层中,可以知道数据保存在哪3个OSD上,这3个OSD分为主从的关系。


3. 客户端与primay OSD建立SOCKET 通信,将要写入的数据传给primary OSD,由primary OSD再将数据发送给其他replica OSD数据节点。


640?wx_fmt=png

ceph_pool_pg


说明




场景数据迁移流程



现状


640?wx_fmt=png

ceph_recory_1


扩容后


640?wx_fmt=png

ceph_io_recry2


说明


每个OSD上分布很多PG, 并且每个PG会自动散落在不同的OSD上。如果扩容那么相应的PG会进行迁移到新的OSD上,保证PG数量的均衡。




心跳是用于节点间检测对方是否故障的,以便及时发现故障节点进入相应的故障处理流程。


问题



故障检测策略应该能够做到



640?wx_fmt=png

ceph_heartbeat_1


OSD节点会监听public、cluster、front和back四个端口



640?wx_fmt=png

ceph_heartbeat_osd


步骤



640?wx_fmt=png

ceph_heartbeat_mon


OSD报告给Monitor:




Ceph通过伙伴OSD汇报失效节点和Monitor统计来自OSD的心跳两种方式判定OSD节点失效。





网络通信框架三种不同的实现方式:




设计模式(Subscribe/Publish):


订阅发布模式又名观察者模式,它意图是“定义对象间的一种一对多的依赖关系,
当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。


640?wx_fmt=png

ceph_message


步骤


640?wx_fmt=png

ceph_message_2


640?wx_fmt=png

ceph_message_3



通信协议格式需要双方约定数据格式。


消息的内容主要分为三部分:


讯享网






CRUSH算法因子:



5.3.1 层级化的Cluster Map

640?wx_fmt=png

ceph_crush


CRUSH Map是一个树形结构,OSDMap更多记录的是OSDMap的属性(epoch/fsid/pool信息以及osd的ip等等)。


叶子节点是device(也就是osd),其他的节点称为bucket节点,这些bucket都是虚构的节点,可以根据物理结构进行抽象,当然树形结构只有一个最终的根节点称之为root节点,中间虚拟的bucket节点可以是数据中心抽象、机房抽象、机架抽象、主机抽象等。


5.3.2 数据分布策略Placement Rules


数据分布策略Placement Rules主要有特点


a. 从CRUSH Map中的哪个节点开始查找
b. 使用那个节点作为故障隔离域
c. 定位副本的搜索模式(广度优先 or 深度优先)

 


640?wx_fmt=png

ceph_bucket




说明


集群中有部分sas和ssd磁盘,现在有个业务线性能及可用性优先级高于其他业务线,能否让这个高优业务线的数据都存放在ssd磁盘上。


普通用户


640?wx_fmt=png

ceph_sas.png


高优用户


640?wx_fmt=png

ssd


配置规则


640?wx_fmt=png

ceph_crush1




QoS (Quality of Service,服务质量)起源于网络技术,它用来解决网络延迟和阻塞等问题,能够为指定的网络通信提供更好的服务能力。


问题


我们总的Ceph集群的iIO能力是有限的,比如带宽,IOPS。如何避免用户争取资源,如果保证集群所有用户资源的高可用性,以及如何保证高优用户资源的可用性。所以我们需要把有限的IO能力合理分配。



640?wx_fmt=png

ceph_mclok_qos


mClock是一种基于时间标签的I/O调度算法,最先被Vmware提出来的用于集中式管理的存储系统。(目前官方QOS模块属于半成品)。


基本思想:




6.4.1 令牌桶算法介绍

640?wx_fmt=png

ceph_token_qos


基于令牌桶算法(TokenBucket)实现了一套简单有效的qos功能,满足了云平台用户的核心需求。


基本思想



6.4.2 RBD令牌桶算法流程

640?wx_fmt=png

ceph_token1


步骤



6.4.3 RBD令牌桶算法框架图

现有框架图:


640?wx_fmt=png

ceph_qos2


令牌图算法框架图:


640?wx_fmt=png

ceph_qos_token2


作者:李航,多年的底层开发经验,在高性能nginx开发和分布式缓存redis cluster有着丰富的经验,目前从事Ceph工作两年左右。先后在58同城、汽车之家、优酷土豆集团工作。 目前供职于滴滴基础平台运维部 负责分布式Ceph集群开发及运维等工作。个人主要关注的技术领域:高性能Nginx开发、分布式缓存、分布式存储。


出处:https://www.jianshu.com/p/cc3ece


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

640?wx_fmt=png

架构文摘

ID:ArchDigest

互联网应用架构丨架构技术丨大型网站丨大数据丨机器学习

640?wx_fmt=jpeg

更多精彩文章,请点击下方:阅读原文

小讯
上一篇 2025-05-03 15:44
下一篇 2025-06-15 23:22

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/169322.html