raft协议,leader在commit了一条日志后,立刻挂了,那其他节点如何处理这条日志?

raft论文提到一旦日志被commit,那么大部分节点都会拥有这条日志,但问题是大部分节点只有当leader做了commit之后,才会commit到自己的状态机吧。假若leader在commit完一条日志后马上挂了,那其他节点肯定不知道这条日志已经被commit,那后续新的leader也不会把这条日志放进commited log中去。请问这样日志的一致性是怎么保证的? raft不是不能改写已经被commit的日志吗?

 

答1:

首先,Raft在Leader选举的时候保证拥有最新的已提交的log entry的Follower才有资格成为Leader。

新Leader通过强制Followers复制它的日志来处理日志的不一致,Followers上的不一致的日志会被Leader的日志覆盖。

Leader为了使Followers的日志同自己的一致,Leader需要找到Followers同它的日志一致的地方,然后覆盖Followers在该位置之后的条目。

Leader会从后往前试,每次AppendEntries失败后尝试前一个日志条目,直到成功找到每个Follower的日志一致位点,然后向后逐条覆盖Followers在该位置之后的条目。

 

答2:

作者:TianbingJ
链接:https://www.zhihu.com/question/357207584/answer/906154153
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

"假若leader在commit完一条日志后马上挂了,那其他节点肯定不知道这条日志已经被commit,那后续新的leader也不会把这条日志放进commited log中去。"

你这个理解是不对的。一条log是不是commit是看集群中是不是大部分节点是不是含有这条log,commit index 只是一个位置,不存在独立的commit log entries,log全部都在log[]里面。

leader commit这条log说明这条log已经被复制到了大多数节点上,这里的Raft的正确性是由选举保证的,后续选举出来的leader必须包含这条log,能做到应该不难理解正确性了:新leader会把log复制到其到节点上,然后leader会commit,follower commit。

选举是如何保证Raft正确性?

Raft要求选举出来leader的log要更 up-to-date, 其实直觉上也可以理解,含有这条log的节点相对于不含有这条log的节点肯定是更up-to-date。

up-to-date的意思是先判断最后一条log 的term哪个大,term不一样,term大的更up-to-date;term一样大的,log更长的more up-to-date。注意,term是指最后一条log的term,不是currentTerm,因为脑裂的那部分节点可以一直递增自己的term发起选举。

不含有这条log的节点不可能成为leader,它的log最终会被新选举出来的leader更新,最终会成含有这条log。

 

答3:

你这里讨论的应该是,领导人完全原则(Leader Completeness):

领导人完全原则:如果一个日志条目在一个给定任期内被提交,那么这个条目一定会出现在所有任期号更大的领导人中

结合 领导人只增加原则(Leader Append-Only)来看

领导人只增加原则:领导人永远不会覆盖或者删除自己的日志,它只会增加条目

这条日志一定会出现在新主的log[]上面。像Tianbing所说,commit index只是一个位置,新主在它的任期提交一条日志条目,会将这条前任的日志一并提交的。

领导人完全原则(Leader Completeness Property)保证了领导人一定拥有所有已经被提交的日志条目,但是在它任期开始的时候,它可能不知道哪些是已经被提交的。为了知道这些信息,它需要在它的任期里提交一条日志条目。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值