在领导人重选时筏丢失数据/日志条目

时间:2017-12-22 00:25:58

标签: distributed distributed-system consistency consensus raft

场景1:让我们假设有一个5节点集群,其中3个已经失效。服务A(领导者)中有3个节点,B,C

复制到B,C的日志条目,收到成功响应,提交,应用它,响应客户端然后死亡。现在,只有两个节点B,C具有一些未应用的日志条目。 现在,如果D出现,并且B成为新的领导者,那么未应用的条目会发生什么?它们会被承诺/应用吗?

场景2: 5个节点群集中,3个刚下来,A仍然是领导者,B在线

复制了B的一个条目,但不能提交,然后A被杀死,C,D上升(所以B,C,D都启动)。复制到B的条目会发生什么?他们会被承诺/应用吗?

1 个答案:

答案 0 :(得分:0)

请注意,已提交的条目已应用的条目之间存在差异。条目可以提交但尚未应用,但条目不能应用而不能提交。一旦提交了一个条目(复制到领导者当前条款中的大部分集群),它就会保证最终应用于所有节点。因此,下一个领导者必须应用它,否则如果您使用Raft来管理复制的状态机,则可能导致状态不一致。选举协议保证当选的下一个领导者将拥有承诺的条目(因此B或C,但不是D),新领导者的第一个动作将是将这些条目复制到另一个节点(D),确定他们已经承诺,然后申请并更新粉丝。

在第二种情况下,如果B通过附加条目选出,那么它将最终提交并应用它们。这就是会话是保证客户线性化的关键组成部分的原因。当由于未能达到法定人数而导致操作失败时,总是可能实际上可以在以后提交更改。无论多少次提交(幂等),都应该使用会话来保证更改只是应用到状态机。有关会话的更多信息,请参阅Raft论文。