Zookeeper】zookeeper的leader选举策略有哪些?

2020-05-28 09:07发布

2条回答
璞璞
2楼 · 2020-06-19 18:12

leader 选举开始时,每个 follower 节点首先清空自己的投票箱,然后投票给自己,并通过广播的方式通知所有其他节点给自己投票;

每个 follower 节点接收到其他 follower 节点的选票,将该外部选票与自己的选票进行对比,对比主要是基于以上5个核心数据项来展开:


    选举轮次:比较 logicalClock,如果外部选票的 logicalClock 大于自己的,则说明自己的选举轮次落后于该外部节点了,则清空自己的投票箱,并将自己的投票更新为当前轮次后重新广播投票出去;小于则忽略该外部选票;等于则进入下面步骤继续比较其他数据;

    vote_zxid 大小比较:将外部选票的 vote_zxid 与自己的投票的vote_zxid 进行对比,如果外部的大,则将自己的(vote_myid,vote_zxid)更新为该外部选票的 vote_myid 和 vote_zxid 并广播出去,即投给这个 vote_zxid 更大的 vote_myid;并更新自身的投票箱,即添加或者更新该外部投票对应的 vote_myid 的选票情况。因为在每个节点的投票箱中,对于集群中的所有参与投票 follower 节点只能存在一张投票,即当当前节点收到某个节点的多次投票时,则需要进行覆盖,如节点A刚开始收到节点B投给B自己的投票,A放入投票箱为(B,B),后来又收到B投给C,则更新为(B,C),此时A的投票箱不再存在(B,B)的这种选票了,而是更新为了(B,C);

    vote_myid大小比较:如果 vote_zxid 相同,则投票给 vote_myid 更大的节点;

    重复以上过程,当某个节点发现过半数的 follower 节点都投给了自己,则更新自己的状态为 LEADING,其他节点则更新自己的状态为FOLLOWING,投票结束。接下来进入数据同步阶段。

    数据同步阶段:主要是当前新的 leader 节点将自己的已经 commit 的数据同步给其他 follower 节点。



十一郎
3楼 · 2020-06-19 18:13

leader选举的过程

leader 选举开始时,每个 follower 节点首先清空自己的投票箱,然后投票给自己,并通过广播的方式通知所有其他节点给自己投票;

每个 follower 节点接收到其他 follower 节点的选票,将该外部选票与自己的选票进行对比,对比主要是基于以上5个核心数据项来展开:

选举轮次:比较 logicalClock,如果外部选票的 logicalClock 大于自己的,则说明自己的选举轮次落后于该外部节点了,则清空自己的投票箱,并将自己的投票更新为当前轮次后重新广播投票出去;小于则忽略该外部选票;等于则进入下面步骤继续比较其他数据;

vote_zxid 大小比较:将外部选票的 vote_zxid 与自己的投票的vote_zxid 进行对比,如果外部的大,则将自己的(vote_myid,vote_zxid)更新为该外部选票的 vote_myid 和 vote_zxid 并广播出去,即投给这个 vote_zxid 更大的 vote_myid;并更新自身的投票箱,即添加或者更新该外部投票对应的 vote_myid 的选票情况。因为在每个节点的投票箱中,对于集群中的所有参与投票 follower 节点只能存在一张投票,即当当前节点收到某个节点的多次投票时,则需要进行覆盖,如节点A刚开始收到节点B投给B自己的投票,A放入投票箱为(B,B),后来又收到B投给C,则更新为(B,C),此时A的投票箱不再存在(B,B)的这种选票了,而是更新为了(B,C);

vote_myid大小比较:如果 vote_zxid 相同,则投票给 vote_myid 更大的节点;

重复以上过程,当某个节点发现过半数的 follower 节点都投给了自己,则更新自己的状态为 LEADING,其他节点则更新自己的状态为FOLLOWING,投票结束。接下来进入数据同步阶段。

数据同步阶段:主要是当前新的 leader 节点将自己的已经 commit 的数据同步给其他 follower 节点。

相关问题推荐

  • 回答 1

    2888:Follower与Leader交换信息的端口。3888:万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。...

  • 回答 1

    Paxos算法是分布式选举算法,Zookeeper使用的 ZAB协议(Zookeeper原子广播),两者的异同如下:① 相同之处:比如都有一个Leader,用来协调N个Follower的运行;Leader要等待超半数的Follower做出正确反馈之后才进行提案;二者都有一个值来代表Leader的周期。...

  • 回答 2

    ZooKeeper对于事务性的支持主要依赖于四个函数,zoo_create_op_init, zoo_delete_op_init, zoo_set_op_init以及zoo_check_op_init。每一个函数都会在客户端初始化一个operation,客户端程序有义务保留这些operations。当准备好一个事务中的所有操作后,可以...

  • 回答 1

     

  • 回答 1

    主从模式下可以使用keepalive处理。如果是多机组网,可以借助内置集群。如果是主从模式,进行热切换,可以考虑使用内置的分布式锁或者搭建三方裁定服务器。

  • 回答 1

    实现原理如下:使用zookeeper创建临时序列节点来实现分布式锁,适用于顺序执行的程序,大体思路就是创建临时序列节点,找出最小的序列节点,获取分布式锁,程序执行完成之后此序列节点消失,通过watch来监控节点的变化,从剩下的节点的找到最小的序列节点,获...

  • 回答 3

    Zookeeper 的视图结构跟标准的 Unix 文件系统很像,都有一个根节点 / 。在根节点下面就是一个个的子节点,我们称为 ZNode。ZNode 是 Zookeeper 中最小数据单位,在 ZNode 下面又可以再挂 ZNode,这样一层层下去就形成了一个层次化命名空间 ZNode 树,我们称为...

  • 回答 4

    Zookeeper的特点:Zookeeper工作在集群中,对集群提供分布式协调服务,它提供的分布式协调服务具有如下的特点:顺序一致性从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到zookeeper中原子性所有事物请求的处理结果在整个集群中所有机器上...

  • 回答 3

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。...

  • 回答 1
    已采纳

    ZooKeeper的价值就在于实现了基于分布式的统一化配置管理,命名服务,状态同步等。在ZooKeeper的体系下,会使用一种树状的文件存储系统,这一套系统强调在各个子节点下的文件目录结构,文件名称以及文件内容都是相同的,而ZooKeeper会通过其内部机制,保证在...

  • 回答 1

    ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) 、 蜜蜂(Hive) 、 小猪(Pig)  的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei  等项目中都采用到了 Zookeeper。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,ZooK...

  • 回答 1

    ZAB协议是专门为zookeeper实现分布式协调功能而设计。zookeeper主要是根据ZAB协议是实现分布式系统数据一致性。zookeeper根据ZAB协议建立了主备模型完成zookeeper集群中数据的同步。这里所说的主备系统架构模型是指,在zookeeper集群中,只有一台leader负责处...

没有解决我的问题,去提问