• Geek_yuanhe
    2020-05-11
    韩老师您好,raft算法跟zab的选举区别,可以理解为比较大的区别就是zab是有leader PK,而raft只是先来先得,一旦该节点已经确认投票,后面即使比他任期编号大的选票再来请求投票,也会拒绝,这样理解对么?

    作者回复: 加一颗星:),可以这么理解,Raft领导者选举的关键是随机超时时间、一个节点在一个任期只有一张选票、基于任期编号大小和日志完整度来投票。

    共 4 条评论
    21
  • zyz
    2020-05-09
    根据获取选举票数过半机制的原则,同时服务器数量为奇数,不会出现选举失败的情况

    作者回复: 加一颗星:),其实节点的奇偶数不影响选举结果,影响的是节点故障容错能力,比如,4节点集群和3节点集群的“大多数”分别是3和2,也就是n/2 + 1,都只能容忍1个节点的故障。

    共 2 条评论
    14
  • xzy
    2020-05-25
    你好,请问投票的结果如何同步的呢?当选节点知道自己是 leader,怎么让其他节点也知道呢?

    作者回复: 加一颗星:),可以这么理解,每个节点维护一个投票池,每个投票池都包含自己和其他节点推荐的领导者的节点信息,如果有节点赢得大多数投票,那么这时会判断这个节点是否是自己,如果是自己,那么节点将设置自己的状态为LEADING状态,退出选举;如果不是自己,那么节点将设置自己的状态为FOLLOWING状态,退出选举。

    共 2 条评论
    7
  • 竹马彦四郎的好朋友影...
    2020-05-06
    老师,我想问一下 "选举出了新领导者,它是不是就可以处理写请求了呢?答案是不行的,比如这个时候各节点的数据副本还不一致呢,这就需要对数据做取舍,解决冲突,实现数据副本的一致" 那是不是raft也是如此呢? 就是说raft选出的新的leader也不能立即响应写请求~ 对吗?

    作者回复: 加一颗星:),Raft是可以的,这个特性与ZAB的设计有关,在我看来,这个设计不是很精巧,我会在接下来的加餐中,具体说说。

    共 5 条评论
    6
  • DullBird
    2020-05-18
    不会选举失败。假设要瓜分的节点是2个,那么最终这2个还是需要pk一轮。关键是zab的选票不是一张,是改变就可以投出去。

    作者回复: 加一颗星:)

    
    5
  • 小波菜
    2020-05-21
    “逻辑时钟(logicclock)(也就是选举的轮次),会影响选票的有效性,具体来说,逻辑时钟大的节点不会接收来自值小的节点的投票信息。比如,节点 A、B 的逻辑时钟分别为 1 和 2,那么,节点 B 将拒绝接收来自节点 A 的投票信息。” 老师我想请教下, 1:逻辑时钟具体工作原理是什么,这边如果A的事务id大于B,B也直接拒绝吗? 2:事务id是如何保证全局单调递增的,类似雪花算法吗?

    作者回复: 加一颗星:),问题1:主要是为了避免接受到旧的投票信息;会的,具体细节,可参考FastLeaderElection.lookForLeader() 的实现。 问题2:是一个AtomicLong的变量(hzxid),因为领导者的存在,所以事务id,本质上是“单机”的,原子变量就可以了。

    共 2 条评论
    4
  • 钟友兵
    2020-05-10
    韩老师,如果说投票时,因为网络问题,可能出现接收到的选票出现延迟,比如,节点A只接受到自身的票,没有接收到其他节点的票,其他节点也可能出现接收到的票数不一致的情况,这种情况是如何处理,设置超时时间吗?如果是超时时间,这个值的选取一般有什么原则

    作者回复: 加一颗星:),引入超时,更确切的说是读超时,读超时且没有接收到其他节点的新的选票,重新发送自己的投票,在ZooKeeper中,这个值,初始值为200ms,之后每次超时时,指数退避,增加时长,最大值为60s,具体的实现,可以参考FastLeaderElection.lookForLeader()函数。

    
    3
  • 宋菁
    2020-05-04
    在网络通讯正常情况下,各个节点都能够收到其他节点的选票,此时必然会选出最终领导者,不会出现选票瓜分的情况,因为即便是两个节点的任期编号和事物标识符一样,集群ID大的仍然会当选,集群ID小的根据规则会选举集群ID大的节点为领导者。

    作者回复: 加一颗星:)

    共 2 条评论
    3
  • Heaven
    2020-08-18
    ZAB协议中,ZAB协议是通过快速领导者选举,来选举出新的领导者的,那么会出现选票会瓜分的情况吗? 必然可能啊,ZAB是一种脱胎于Multi-Paxos的算法,其本质上也是一种投票选举,那么对于这种投票选举,设置不同的选举时间是一种相对较好的选择 看到这个选举突然想到了网络环路中STP的算法解决

    作者回复: 加一颗星:)

    共 2 条评论
    2
  • Kvicii.Y
    2020-06-29
    逻辑时钟到底是什么作用呢?我看到源码有这个东西,但是一直把他当做其他的判断条件,既然和选票PK类似,为什么不把逻辑时钟比较的逻辑加入到选票PK的逻辑totalOrderPredicate中呢?还是说这个逻辑时钟只是代表了机器的标识?

    作者回复: 加一颗星:),可以把逻辑时钟理解为选举的轮次,会影响选票的有效性,主要是为了避免接受到旧的投票信息。

    
    2