weixin_44282021 2019-11-02 17:25 采纳率: 0%
浏览 893

急求zookeeper中ZAB协议崩溃恢复新LEADER选举疑问

在ZAB协议崩溃恢复要求满足如下2个要求:
1. 确保已经被leader提交的proposal必须最终被所有的follower服务器提交。
2. 确保丢弃已经被leader提出的但是没有被提交的proposal。
根据上述要求,新选举出来的leader不能包含未提交的proposal,即新选举的leader必须都是已经提交了的proposal的follower服务器节点。

请问,如果是leader提出了proposal A,各个follower收到了,但leader还未发起commit就崩溃,此时进行选举,所有follower上都有未提交的proposal A,为什么又能够选举出新leader呢?这是否与上面的要求向背离?

切盼答复,非常感谢!

  • 写回答

3条回答 默认 最新

  • qq_41663725 2019-11-15 09:40
    关注

    你看到的都是很多一大抄的文章,很多细节都是错误的,误导你了,看这篇吧:

    https://www.cnblogs.com/fanguangdexiaoyuer/p/10311228.html#_label3
    

    首先:这2个要求的理解,网上大部分文章都是错误的

    在ZAB协议崩溃恢复要求满足如下2个要求:
    1. 确保已经被leader提交的proposal必须最终被所有的follower服务器提交。
          这个“已经被leader提交的proposal”的理解,网上的文章是错的:
    
          网上的错误理解:
            只要leader发出了commit这个命令才算提交(不论是leader自己commit,还是发送commit给follower)
    
          正确理解:
             只要leader提出的proposal被过半的节点接收到(包含了leader自己),那么就算是被leader提交成功了(不论leader有没发出commit命令),如果leader根本没发出commit命令就挂了,那么后续被选举的新leader(zxid最大的那个),会首先判断自身未Commit的消息是否存在于大多数服务器中从而决定是否要将其Commit。
    
    2. 确保丢弃已经被leader提出的但是没有被提交的proposal。
    
          这个“已经被leader提出的但是没有被提交的proposal”的理解,网上的文章也是错的:
    
          网上的错误理解:
            leader提出proposal后就挂了,follower没收到proposal,意思是只在leader上生成了proposal,但是follower上没有,才算是“已经被leader提出的但是没有被提交的proposal”
    
          正确理解:
            只要leader提出的proposal没有被过半的节点接收到,那么就可以被认为是“已经被leader提出的但是没有被提交的proposal”
    

    其次:“新选举出来的leader不能包含未提交的proposal,即新选举的leader必须都是已经提交了的proposal的follower服务器节点”,这个也是网上文章误导;

      选举leader根本没有这个要求,纯属误人子弟,只要选出最大的zxid作为leader即可。
    
    评论

报告相同问题?

悬赏问题

  • ¥20 求计算赫斯特(Hurst)指数
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大