Skip to content

Latest commit

 

History

History
18 lines (6 loc) · 1.16 KB

130.md

File metadata and controls

18 lines (6 loc) · 1.16 KB

130、ZAB协议下一种可能存在的数据一致性问题

Leader收到了过半的follower的ack,接着leader自己commit了,还没来得及发送commit给所有follower自己就挂了,这个时候相当于leader的数据跟所有follower是不一致的,你得保证全部follower最终都得commit

另外一个,leader可能会自己收到了一个请求,结果没来得及发送proposal给所有follower之前就宕机了,此时这个Leader上的请求应该是要被丢弃掉的

所以在leader崩溃的时候,就会选举一个拥有事务id最大的机器作为leader,他得检查事务日志,如果发现自己磁盘日志里有一个proposal,但是还没提交,说明肯定是之前的leader没来得及发送commit就挂了

此时他就得作为leader为这个proposal发送commit到其他所有的follower中去,这个就保证了之前老leader提交的事务已经会最终同步提交到所有follower里去

然后对于第二种情况,如果老leader自己磁盘日志里有一个事务proposal,他启动之后跟新leader进行同步,发现这个事务proposal其实是不应该存在的,就直接丢弃掉就可以了