本站文章大部分为作者原创,非商业用途转载无需作者授权,但务必在文章标题下面注明作者 刘世民(Sammy Liu)以及可点击的本博客地址超级链接 http://www.cnblogs.com/sammyliu/ ,谢谢合作
随笔 - 206  文章 - 46  评论 - 755  阅读 - 270万

Ceph读写流程分析

http://www.quts.me/ceph-readwrite/

初步的Ceph读写流程分析。更详细的IO路径整理好了放上来。

Ceph OSD层的数据层级

1.OSD

主要实现 OSD,OSDService ,每个数据节点的守护进程

2.PG

主要实现 PG,ReplicatedPG,ReplicatedBackend,Object的逻辑组织

3.ObjectStore

主要实现 FileStore,KeyValueStore,MemStore,直接操作数据

OSD层和PG层的读写

OSD和ObjectStore层,都有一个线程池(tp)和消息队列(wq),每个线程会从不同消息队列中取出消息然后执行。

  • 下图是OSD的消息入队路径,红色为主要路径

OSD-in

  • 消息入队后,线程池OSDService->op_tp(osd->osd_op_tp)从队列中拿出消息开始工作。详细流程见下图

OSD-out

图中,红色方框都是主OSD的操作,蓝色方框是从OSD的操作。

首先会有主OSD消息,经过一定检查后,执行到右半部分,提交事务前,先将从OSD的op添加到Apply和Commit的等待队列,然后发消息给从PG的OSD,最后提交自己的操作到ObjectStore。

从OSD收到消息后,会注册Apply和Commit事件(在完成事务后执行),然后提交事务到ObjectStore。

posted on   SammyLiu  阅读(3605)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示