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

问题描述 投票:0回答:1

场景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都是up)。复制到B的条目会发生什么?他们会被承诺/应用吗?

distributed distributed-system consistency consensus raft
1个回答
0
投票

请记住,正在提交的条目与正在应用的条目之间存在差异。条目可以提交但尚未应用,但条目无法应用且未提交。一旦提交了一个条目(复制到领导者当前术语中的大多数集群),它将保证最终应用于所有节点。因此,下一个领导者必须应用它,否则如果您使用Raft管理复制的状态机,则可能导致状态不一致。选举协议保证当选的下一个领导者将拥有提交的条目(因此B或C,但不是D),新领导者的第一个动作是将这些条目复制到另一个节点(D),确定它们已经提交,然后申请并更新关注者。

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

© www.soinside.com 2019 - 2024. All rights reserved.