加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 编程 > 正文

讲到 ZooKeeper 的选举机制了

发布时间:2021-03-28 14:26:06 所属栏目:编程 来源:互联网
导读:这里我就可以回答大家前面的问题了,epoch 就是 zxid 前 32 位的这个数字,epoch 本身的翻译是纪元,时代的意思,意味着更新换代,而 zxid 的后 32 位数字仅仅是写请求的计数罢了 1.2 myid 在之前的小故事里,我给 ZK 的集群中的各个节点都起了一个好记的名

这里我就可以回答大家前面的问题了,epoch 就是 zxid 前 32 位的这个数字,epoch 本身的翻译是“纪元,时代”的意思,意味着更新换代,而 zxid 的后 32 位数字仅仅是写请求的计数罢了

1.2 myid

在之前的小故事里,我给 ZK 的集群中的各个节点都起了一个好记的名字(神特么好记!)。但是 ZK 官方自己是如何给每一个集群中的节点起名字的呢?用的就是 myid!

ZK 的启动配置 zoo.cfg 中有一项 dataDir 指定了数据存放的路径(默认是 /tmp/zookeeper),在此路径下新建一个



 

这个 server. 之后的数字就是 myid,这个 myid 在整个集群中,各个节点之间是不能重复的。我忘记之前在哪儿看到的了,说是 myid 只能是 1 到 255 的数字,我一直信以为真,直到这次,我本着严谨的态度去做了实践,一切以事实为主,并且我的实验覆盖了 3.4、3.5、3.6 三大版本(都是三台机器的简单集群),结论是:myid 只要是不等于 -1 就行(-1 是一个固定的值会导致当前节点启动报错),不能大于 Long.MAX_VALUE 或者小于 Long.MIN_VALUE,但是如果在当前的节点中配置了 zookeeper.extendedTypesEnabled=true 那当前节点的最大 myid 是 254(负数不影响,我也不知道这个 254 的用意,但是代码中的确有判断) 是不是奇怪的知识又增加了呢~

关于配置更多的信息,之后单独再整理,今天就点到为止

1.3 选举规则

知道了上面这些有什么用呢?非常重要!因为选举 Leader 完全看的就是这几个值

  • epoch
  • 写请求次数
  • myid

优先级从上到下逐级比较,谁大谁就更有资格成为 Leader,当前级一样就比较下一级,直到分出胜负为止!因为 myid 是不能重复的,所以最终是一定能分出胜负的!

好了,现在大家知道了最基本的选举规则了~让我们进入下一节吧

二、三马之争

马果果一定想不到,这辈子自己可以和两位鼎鼎大名的明星企业家相提并论,让我们一起去看看发生了什么吧~

2.1 准备开工

之前马果果规定了三个办事处在对外开张前必须选出一个 Leader,在正式开始选之前,每一个办事处也有一些准备工作需要做:

  • 每一个办事处必须得知道一共有多少个办事处
  • 额外聘请一些专门负责和其他办事处沟通的话务员
  • 准备好一个票箱用来对投票统计和归票
  • 为每一个办事处设置一个固定的 myid

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读