这里注意一个特殊情况,即stand-replay状态下的mds也是持有rank的,s且id和其follow的activemds的rankid同样,如下图所示
下面是一个journalevent例子(中间折叠了很多内容):
参考下图:注意图仅列出mds一些架构和核心类,实际构成更复杂,涉及的类别和逻辑更多。
冷备:默认配置下,除activemds外其余MDS均处于standby除了保持和mon心跳,别的什么都不做,cache为空,无rank。
热备:配置allow_standby_replay为true,每个activemds会有专属的standby-replaymds在follow,持有和activemds相同的rankid,不断从rados中读取journal加载到cache尽可能和actviemds保持同步。
显然,在热备状态下会有一个standby-replay的mds一直在更新cache,这样,当切换发生时,切换过程会更快。
首先,在分析切换过程之前,首先要明确MDS切换的两个核心思想:
上面已经介绍过了mds在切换过程中,mon和mds的交互都是mdsmap,先看下面mdsmap处理流程:
MDSDaemon::handle_mds_map:
MDSRankDispatcher::handle_mds_map:逻辑太多,只截取了一些代码
可以看到,冷备和热备的切换流程的不同主要体现在切换前和replay两个阶段,其余流程基本相同。
REPLAYSTART
replay流程由MDSRank::replay_start()触发,其触发bootstart过程以及获取新的osdmap
voidMDSRank::replay_start(){dout(1)<<"replay_start" ACTUALREPLAY replay线程的逻辑: while(1){ 1、读取一条journal记录,如果满足条件则flush 2、解码成logEvent格式 3、replay:根据journal信息在内存中重建CInode,CDir,CDentry等信息,并根据journal内容对dentry进行各种设置}UP:RECONNECTBEFORECLIENTRECONNECT MDSRank::reconnect_start(): voidMDSRank::reconnect_start(){dout(1)<<"reconnect_start" HANDLECLIENTREPLAYREQ 在切换之前可能会有client有未完成的元数据请求,在切换后这些client会重新发送replay请求或者retry请求(不准确)到新的mds,新mds则记录这些client的信息(needclientreplay) voidServer::dispatch(constMessage::const_ref&m){......//满足条件的client加入到replay_queue中,replay_queue不为空则需要经历client_replay阶段if(queue_replay){req->mark_queued_for_replay();mds->enqueue_replay(newC_MDS_RetryMessage(mds,m));return;}}......}HANDLECLIENTRECONNECT 处理client重连请求,重新建立session,并遍历client的caps:1)clientcaps对应inode在cahce中,则直接在cahce中重建caps2)clientcaps对应的inode不在cache中,则先记录下来 Server::handle_client_reconnect部分代码: 打开openfiletable中的所有inode,记录在cache中的openinginodemap中(前者是用于加速切换过程的,后者是真正维护的openinginode) 处理reconnect阶段记录的caps,根据reconnect阶段记录的caps、session等信息,在cache中为这些client重建caps 遍历cache中的inode和其对应的所有可写client(inodecahce中维护了每个inode有哪些client可写以及可写的范围),如果某个client可写但是没有caps则记录下来 clientreplay主要是对那些切换前有些client的请求原mds已经回复了,但是还没有存journal(会是哪些请求?猜测是clientcache写?)。这些请求在reconneect阶段重新发起,也就是前面提到的handleclientreplayreq。这个阶段记录下的client请求信息在replay_queue中,在clientreplay阶段对这些请求进行replay,并对涉及的inode进行recover。 本文链接:ceph单活mds主从切换流程_jiang4357291的博客-CSDN博客 CD4514B产品参数_产品功能_现货出售 OPA365AIDBVR运算放大器引脚功能配置电路连接图 CD74HC4515中文参数_产品特性_原装现货 CD74AC157中文规格_产品特点_原装供应 电压基准芯片TLV431AIDBVR设备参数引脚图应用图 CD74HCT137中文参数_产品功能_原装供应 CD74HCT354产品规格_产品特征_原厂出售 CD74HC154中文参数_产品功能_原装供应 TPS54335ADRCR同步转换器功能参数应用图原理图 CD4543B产品参数_功能特性_原装现货 详细介绍电流互感器功能区别3CTSRZCT 雅特力携多款AT32MCU新品与应用方案亮相2024慕尼黑上海电子展 AMEYA360|江苏润石RSR58x高压系列高精密基准源 断路器的常见故障和处理方法 普源精电(RIGOL)多通道材料应力测量系统 亚马逊云科技宣布基于自研AmazonGraviton4的AmazonEC2R8g实例正式可用 OPPO与爱立信签署全球战略合作协议 英飞凌推出业界首款符合太空标准的并行接口1Mb和2MbF-RAM,扩大其抗辐射存储器产品组合 2024慕尼黑上海电子展亮点:三款重点展品及解决方案的深度探索 前途未卜的AI个人助理 让“节能”贯穿服务器全生命周期,英特尔至强6能效核处理器的出众之处 英特尔CEO帕特·基辛格:AI正推动业界进入创新黄金时代,影响力堪称空前 英飞凌推出适用于物联网设备进行非接触式验证及安全配置的NFCI2C桥接标签 安森美推出提高数据中心能效的完整电源解决方案 Molex莫仕在中国荣获通用汽车供应商质量卓越奖 整流二极管的应用电源 绝缘栅双极型晶体管应用电路 多位LED数码管 单向晶闸管构成的交流开关电路 压敏电阻器电路 27MHz谐振转换器的直流输出 具有初级电压钳位的氮化镓(GaN)FET可显著实现交流适配器的小型化 栅极驱动器电路设计 现代电磁炉烹饪需要紧凑而高效的解决方案 工业辅助电源中的SiC 锐单2024年51劳动节放假通知 锐单商城2024年清明节放假通知 2024年春节锐单商城放假安排 【通知】2024年元旦锐单商城放假安排 2023年锐单商城国庆节放假通知 艾迈斯欧司朗最新推出的DURISLED将引领柔性多变照明新时代 在线式一氧化碳检测仪XKCON-G600-DCO具有防爆功能,使用于冶金行业场所应用