ceph mon中的paxos应用

    最近听到分布式系统中用paxos的地方不少,比如最近蚂蚁金服的oceanBase都提到使用了paxos,而笔者最近也在可以理解paxos和其工程使用,注意到ceph中的Mon组件也是用paxos来实现Mon集群的一致性,所以阅读和分析了其代码,但本文仅仅分析paxos类本身的代码,至于paxos持久化日志的底层实现,以及Mon上层的业务类如何使用paxos,这个是后续的工作。

    最开始,几个mon启动起来,并且建立连接之后,会开始竞选leader,其实paxos协议是允许多个leader,但在系统正常的情况下,没有必要有多个leader,多个leader各自运行自己的流程,会增加整个系统的负载。而竞选的主要依据就是每个Mon都有一个全局唯一的数字rank,所以这个数字中肯定存在最小的,竞选的流程类似于paxos协商值时候的prepare阶段,rank最小的Mon会竞选成功成为leader,不成功的就是peon。


然后就可以对外面提过来的value或者之前尝试commit过的value进行协商,commit了。


需要说明的是:

  1. 为了系统的可靠性,在发出OP_COLLECT和OP_BEGIN之后,leader都会设置超时器,来超时重试。
  2. peon上的lease_timeout超时器,如果超时,会认为之前的leader死亡,会清除运行中的一些临时变量,重新发起选举和初始化。所以leader需要定时发送OP_LEASE消息,更新peon的lease time。
  3. leader和peon会持久化一些消息过程中几个重要的值,比如accepted_pn, first_committed,last_committed等,用来:

            1) 运行过程中需要一些数据,比如peon需要比较accepted_pn来决定是不是要accept新的pn(proposer number),

                    而这些数据是应该被持久化的。

                2) 在重试或者Mon重启之后,恢复之前协商中但没有commit的值。

                3)leader根据peon返回的first_committed,last_committed,来确定是不是需要把一些已经记录了日志

                但没有commit的值,commit掉,或者把peon上面连日志都没有但已经被大多数accept的值同步给peon。

   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值