博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper FastLeaderElection
阅读量:4507 次
发布时间:2019-06-08

本文共 1212 字,大约阅读时间需要 4 分钟。

     zk 为了实现Paxos算法的快速收敛,添加Leader选举算法,只有Leader角色才可以发起提案。为了熟悉并使用zk,近来也具体看了zk(3.4.8)部分代码,主要逻辑(集群模式)分析如下:

 

  1. zk启动,zk启动脚本是zkServer.sh

        调用 (org.apache.zookeeper.server.quorum.QuorumPeerMain) 的main方法 -> QuorumPeerConfig 加载配置文件 ->  QuorumPeer 实例化相关网络连接服务  -> 启动 QuorumPeer 

这里主要根据自己读取源码,分析一下QuorumPeer启动时  FastLeaderElection的选举实现。

      

  2 Leader选举算法实现(FastLeaderElection)分析,网络上相关的文章比较多,具体就是每个 QuorumPeer 启动时,会尝试向其它节占发送Leader选举信息包(Notification),

 

    主要实现代码逻辑在   FastLeaderElection.lookForLeader()方法中,具体就是每个peer分析收到的Notification,对比其中各个字段的值,看哪一个peer获得了大多数投票。

  总体代码,我基本看了一下,网络收发包,本机分析。

  

  问题: 

      如果在配置文件中,没有配置(或者都配置成一样)每个peer的 long leader, long zxid, long epoch,那么每个节占的会为其初始化一个 Long.MIN_VALUE值。

 

  

    如何是否存在以下情况:

          如果没有配置 long leader, long zxid, long epoch,(或者有多个节点,某个值设置的一样)每个节点按初始值进行发包 ,最终会进入

        

              

                                 图 2

            然后每个节点都等待其它其它的消息,然后同时每个peer又同时修改自己的 long   , long zxid, long epoch,这样是不是存在一定的活锁情况?(当然具体可能因为网络时延的时间,应该不是每个peer都这么一样,估计就不会出现这个情况)?

      为此,是否需要在 QuorumPeerConfig 加载配置文件时,验证一下 每个peer不server.id不可相同,在图 2的while中每个节点,随机一下等待时间?

 

             以上只是个人阅读源码的一点想法,可能还没有更深入的理解,先记在这儿,后续再研读!

      

    

 

转载于:https://www.cnblogs.com/every/p/5839200.html

你可能感兴趣的文章
今天说一下DML触发器的顺序
查看>>
Memcached学习(一)--网络模型
查看>>
FragmentTransaction add 和 replace 区别 转
查看>>
jQuery 效果方法
查看>>
STM32物联网通信WIFI
查看>>
java反射案例详解
查看>>
MAGENTO 与 reindexer
查看>>
数字,字符串,列表及其内置方法
查看>>
iOS遍历数组的同时删除元素
查看>>
小强的HTML5移动开发之路(16)——神奇的拖放功能
查看>>
zookeeper FastLeaderElection
查看>>
Jquery AJAX如何使用Promise/Deferred实现顺序执行?
查看>>
进度条
查看>>
maven 常用命令
查看>>
用户画像
查看>>
HTTP报文(面试会问开发时常用的报文头格式)
查看>>
机器学习从业人员到底做什么?
查看>>
word发表博客的方法
查看>>
Programming Erlang_CHAPTER2_Basic Erlang 学习笔记(2)。
查看>>
Linux基础
查看>>