小伙伴们的ceph源码分析三——monitor消息处理流程

本文详细探讨了Ceph存储系统中Monitor的内部工作机制,重点关注Monitor与MonClient之间的交互,以及在处理特定消息类型时的角色。通过分析`src/mon/monitor.cc`、`src/tools/ceph.cc`中的关键代码,揭示了Monitor服务端如何响应客户端请求,特别是对于`CEPH_MSG_MON_MAP`等关键消息的处理。同时,澄清了命令行工具`ceph mon dump`的工作原理,指出其并不直接涉及MonClient,而是通过`src/tools/ceph.cc`入口进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://blog.youkuaiyun.com/kakaxi8891/article/details/10935595

笔者在读代码初期非常想理清楚的就是ceph这么个系统在服务端与客户端是怎么响应与发起请求的。

本人主要负责monitor部分,而且追了一会cephx认证的代码,所以拿这块举例,后续osd部分主要是对同事分享的学习。

本篇会讲到src/mon/monitor.cc中

class Monitor : public Dispatcher

class MonClient : public Dispatcher 

以及src/tools/ceph.cc

这三者的关系:


前一篇讲到ceph-mon.cc中启动了monitor的进程,而启动的过程伴随着一些消息队列的启动:

void SimpleMessenger::ready()

{

  ldout(cct,10) << "ready "<< get_myaddr()<< dendl;

  dispatch_queue.start();//消息接收队列启动

  lock.Lock();

  if (did_bind)

 &nbs

Ceph是一个分布式存储系统,包括多个组件,其中包括Librbd块存储库。在Ceph中,Librbd提供了一种将RBD(块设备)映射到客户端的方法,并使客户端能够读写这些设备。在本文中,我们将分析Librbd块存储库的源代码以及RBD的读写过程。 1. Librbd源码分析 Librbd块存储库的源代码位于src/librbd目录下。其中,包括librbd.cc、ImageCtx.cc、ImageWatcher.cc、Journal.cc等多个源代码文件。这些源代码文件组成了Librbd块存储库的核心。 其中,librbd.cc是Librbd块存储库的主要源代码文件。在这个文件中,包括了Librbd的初始化、映射、卸载等方法。ImageCtx.cc则是Image上下文,用于管理Image的状态、锁定、映射等信息。ImageWatcher.cc用于监控Image的状态变化,Journal.cc则是Librbd的Journal日志管理。 2. RBD读写流程源码分析Ceph中,RBD由client和server两个部分组成。client在客户端上运行,提供了将RBD映射到客户端的方法。server在存储集群中运行,提供了RBD的存储和管理。 RBD的读写流程如下: 1)客户端向Ceph Monitor请求RBD映射信息,Monitor返回Image ID和Image特性; 2)客户端向Ceph OSD请求RBD数据块,OSD返回数据块内容; 3)客户端将数据写入或读取到本地块设备; 4)客户端向Ceph OSD写入或读取数据块,OSD返回操作结果; 5)客户端向Ceph Monitor请求解除RBD映射,Monitor返回解除结果。 在上述过程中,涉及到的源代码文件有:librbd.cc、ImageCtx.cc、ImageWatcher.cc、Journal.cc等。 总结 Librbd块存储库和RBD读写流程Ceph存储系统的核心组件之一,通过分析源代码可以更加深入地了解Ceph存储系统的实现原理。同时,对于开发者来说,也有助于在Ceph存储系统上构建更加高效、稳定的存储应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值