码迷,mamicode.com
首页 > 其他好文 > 详细

Ceph Rados io流程处理

时间:2020-06-16 18:27:07      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:dos   nbsp   需要   影响   图片   更新   发送   过程   inf   

CEPH RADOS IO(读写) 处理流程图:

 

以下流程版本ceph version 14.2.5 nautilus

技术图片

 

 

 

CPEH读写顺序保证: 

  •  不同对象的并发控制

不同的对象有可能落到同一个pg里,ceph实现里,在OSD的处理线程中就会给PG加锁,一直到queue_transactions里把事务放到journal的队列里(以filestore为例)才释放PG的锁。从这里可以看出,对于同一个PG里的不同对象,是通过PG锁来进行并发的控制,好在这个过程中没有涉及到对象的I/O,不会太影响效率;对于不同PG的对象,就可以直接进行并发访问。

 

  • 同一个对象的并发顺序控制

从上面的介绍可以得知,同一个对象的访问也会受到PG锁的限制,但这是在OSD的处理逻辑里。对于同一个对象的访问,要考虑的情况比较复杂。从用户使用场景上来说,有两种使用方式。比如:

1)一个client情况,客户端对同一个对象的更新处理逻辑是串行的,要等前一次写请求完成,再进行后一次的读取或者写更新;

2)多个client对同一个对象的并发访问,目前的分布式系统里很少能做到,涉及到多个client同时更新带来的数据一致性问题,一般都需要集群文件系统的支持;

 

对于多client的场景,cephrbd也是不能保证的,因此这里主要以单client访问ceph rbd块设备的场景进行阐述,看一个极端的例子:同一个client先后发送了2次对同一个对象的异步写请求。以这个例子展开进行说明。

  • pg层顺序保证及对象锁机制

从消息队列里取消息进行处理时,osd端处理op是划分为多个shard,然后每个shard里可以配置多个线程,pg按照取模的方式映射到不同的shard里。另外osd在处理pg时,从消息队列里取出的时候就对pg加了写锁的,而且是在请求下发到store后端才释放的锁,所以消息队列里过来的消息有序后,在osdpg这一层处理时也是有序的

Ceph Rados io流程处理

标签:dos   nbsp   需要   影响   图片   更新   发送   过程   inf   

原文地址:https://www.cnblogs.com/wx-angel/p/13143403.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!