ceph源码分析--mon选举

Mon选举流程

ceph monitor----初始化和选举 - yimuxi - 博客园 (cnblogs.com)

一、Paxos算法

Paxos算法详解 - 知乎 (zhihu.com)

Paxos算法通过一个决议分为两个阶段(Learn阶段之前决议已经形成):

  1. 第一阶段:Prepare阶段。Proposer向Acceptors发出Prepare请求,Acceptors针对收到的Prepare请求进行Promise承诺。

  2. 第二阶段:Accept阶段。Proposer收到多数Acceptors承诺的Promise后,向Acceptors发出Propose请求,Acceptors针对收到的Propose请求进行Accept处理。

  3. 第三阶段:Learn阶段。Proposer在收到多数Acceptors的Accept之后,标志着本次Accept成功,决议形成,将形成的决议发送给所有Learners。

  4. Paxos算法流程中的每条消息描述如下:

    • Prepare: Proposer生成全局唯一且递增的Proposal ID (可使用时间戳加Server ID),向所有Acceptors发送Prepare请求,这里无需携带提案内容,只携带Proposal ID即可。

    • Promise: Acceptors收到Prepare请求后,做出“两个承诺,一个应答”。

    两个承诺:

    1. 不再接受Proposal ID小于等于(注意:这里是<= )当前请求的Prepare请求。

    1. 不再接受Proposal ID小于(注意:这里是< )当前请求的Propose请求。

    一个应答:

    1、不违背以前作出的承诺下,回复已经Accept过的提案中Proposal ID最大的那个提案的Value和Proposal ID,没有则返回空值。

    • Propose: Proposer 收到多数Acceptors的Promise应答后,从应答中选择Proposal ID最大的提案的Value,作为本次要发起的提案。如果所有应答的提案Value均为空值,则可以自己随意决定提案Value。然后携带当前Proposal ID,向所有Acceptors发送Propose请求。

    • Accept: Acceptor收到Propose请求后,在不违背自己之前作出的承诺下,接受并持久化当前Proposal ID和提案Value。

    • Learn: Proposer收到多数Acceptors的Accept后,决议形成,将形成的决议发送给所有Learners。

    • 获取一个Proposal ID n,为了保证Proposal ID唯一,可采用时间戳+Server ID生成;

    • Proposer向所有Acceptors广播Prepare(n)请求;

    • Acceptor比较n和minProposal,如果n>minProposal,minProposal=n,并且将 acceptedProposal 和 acceptedValue 返回;

    • Proposer接收到过半数回复后,如果发现有acceptedValue返回,将所有回复中acceptedProposal最大的acceptedValue作为本次提案的value,否则可以任意决定本次提案的value;

    • 到这里可以进入第二阶段,广播Accept (n,value) 到所有节点;

    • Acceptor比较n和minProposal,如果n>=minProposal,则acceptedProposal=minProposal=n,acceptedValue=value,本地持久化后,返回;否则,返回minProposal。

    • 提议者接收到过半数请求后,如果发现有返回值result >n,表示有更新的提议,跳转到1;否则value达成一致。

既 Prepare->promise->propose->accept->learn

二、mon选举流程

1.Monitor业务消息

1.1 Monitor self

消息类型 消息结构体 消息作用 处理接口
MSG_MON_PROBE MMonProbe 启动加入时需要向其他Monitor发送Probe请求 handle_probe
MSG_MON_JOIN MMonJoin 如果不在MonMap中申请加入到MonMap MonmapMonitor::prepare_join
MSG_MON_ELECTION MMonElection 发起选举流程 Elector::dispatch

1.2 mon启动阶段

mon启动两个阶段:mon准备阶段和启动阶段

mon启动需要如下数据:

  1. fsid 集群独一的标记

  2. cluster 默认就是ceph,可以通过--cluster指定

  3. monitor name

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值