博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【ZooKeeper Notes 23】Leader选举-来自邮件列表
阅读量:6326 次
发布时间:2019-06-22

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

logical clocks是用来唯一标识一轮Leader选举的。

- 次Leader挂了之后,集群中的其他机器都会对logical clocks值做自增操作。

- 新一轮的Leader选举开始或新一轮的投票开始了的时候,会对logical clocks值做自增操作。

在FastLeaderElection选举中,每个机器(peer)都会广播自己的(zxid,id)。每个机器都会收集集群中所有的机器的投票。

对于每一个机器来说,在每一轮的选举超时结束之前,都应该收集完了其他机器的投票。

对于一个机器而言,如果在收集的过程中,收到了一个更高轮次(epoch)的投票,那么当前机器会清空所有手机的投票,然后重新加入这一轮投票。

ZooKeeper中有个过半的概念,就是说,对于一个有n台机器的集群,我们认为 (n/2+1)即为过半,在ZooKeeper中,经常使用“quorum”来表示过半的机器数。

也就是说,理论上只要能够收集到大于等于quorum台机器的投票,就可以选出Leader了。同时,也只能够在已经收到到quorum台机器的投票后,才可以退出选举。

这就避免了在没有足够的服务器启动起来后,Leader就已经失败退出了(因为选举超时了)。实际上,只有在已经收到了quorum台机器的投票后,才会开始启动超时计时。

另一个终止Leader选举的条件就是,集群中已经存在了Leader。当集群中的一个机器发起一轮Leader选举的时候,会收到“there-is-already-a-leader-for-epoch-X”的消息,

如果大于等于quorum台机器回复了相同的epoch和leader,那么也就退出了Leader选举。

无论以哪种方式退出了Leader选举,在退出Leader选举流程之前,都需要确定集群中是否有足够多的机器参与了投票,即机器数是否过半,同时需要确定当前选出的Leader是否在这个quorum台机器中。

在进行Leader选举的过程中,各个服务器之间都会两两进行网络连接。在创建网络连接的时候,机器A会和机器B创建一个TCP连接,当然,反之亦然。创建连接之后,机器A和机器B分别会把自己的myid发送给对方。

这个时候,比对完彼此的myid后,myid小的那个机器会主动关闭与对方的连接。

本文转自 nileader 51CTO博客,原文链接:http://blog.51cto.com/nileader/980351,如需转载请自行联系原作者

你可能感兴趣的文章
linux系统性能分析
查看>>
SystemTap----将SystemTap脚本编译成内核模块
查看>>
KVM虚拟机介绍
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(7)-MVC与EasyUI DataGrid
查看>>
Redis系列(六)-SortedSets设计技巧
查看>>
Latex技巧
查看>>
Android开发日记(一)
查看>>
java中简单字符替换
查看>>
【推荐】【给中高级开发者】构建高性能ASP.NET应用的几点建议
查看>>
ale.js 1.2.1 发布,以组件形式构建用户界面
查看>>
移动端web app自适应布局探索与总结
查看>>
前端开发中的正则表达式验证
查看>>
阿里巴巴微服务开源项目盘点(持续更新)
查看>>
中国工程院院士衣宝廉:预计国内明年将有100台加氢站运行 |电动车百人会2019 ...
查看>>
区块链溯源是什么?一文带您读懂!
查看>>
为什么很多人开始反对996了?
查看>>
一文说透WordPress的自定义文章类型
查看>>
Go并发编程之美-条件变量
查看>>
k8s与CICD--一个完整的drone demo
查看>>
Redis指令与数据结构(二)
查看>>