讲到 ZooKeeper 的选举机制了
这里我就可以回答大家前面的问题了,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 完全看的就是这几个值
优先级从上到下逐级比较,谁大谁就更有资格成为 Leader,当前级一样就比较下一级,直到分出胜负为止!因为 myid 是不能重复的,所以最终是一定能分出胜负的! 好了,现在大家知道了最基本的选举规则了~让我们进入下一节吧 二、三马之争 马果果一定想不到,这辈子自己可以和两位鼎鼎大名的明星企业家相提并论,让我们一起去看看发生了什么吧~ 2.1 准备开工 之前马果果规定了三个办事处在对外开张前必须选出一个 Leader,在正式开始选之前,每一个办事处也有一些准备工作需要做:
(编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |