相关知识
Zookeeper什么时候会进行选举
在如下两种情况,zk 集群会进行 leader 的选举
1. server 初始化启动的 leader 选举
2. server 运行时期的 leader选举(server 运行期间无法和 leader 保持连接)
Zookeeper选举机制
zk 的 leader 选举机制,采用投票机制和过半策略
当集群中半数以上的 zk 实例启动时,leader就会被确定
后续新增的 zk 实例会默认变成 follower
以集群中存在 3 个 zk 实例为例,选举的具体流程如下:
1. 每个 server 发出一个投票
2. 接受来自各个服务器的投票
集群的每个服务器收到投票后,首先判断该投票的有效性
如检查是否是本轮投票、是否来自LOOKING状态的服务器
3. 处理投票
针对每一个投票,服务器都需要将别人的投票和自己的投票进行比较,规则如下
对于 ZK1 而言,它的投票是(1, 0),接收ZK2的投票为(2, 0),
首先会比较两者的ZXID,均为0
再比较myid,此时ZK2的myid最大,于是ZK2胜
ZK1更新自己的投票为(2, 0),并将投票重新发送给ZK2
4. 统计投票
每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票
信息
每次投票会包含所推举的服务器的 myid 和 ZXID ,使用(myid, ZXID)来表示
由于是初始情况,ZK1和ZK2都会将自己作为Leader服务器来进行投票,此时
ZK1的投票为(1, 0),ZK2的投票为(2, 0),然后各自将这个投票发给集群中其他机
器
优先检查ZXID
ZXID比较大的服务器优先作为Leader
如果ZXID相同,那么就比较myid
myid较大的服务器作为Leader服务器
评论1
最新资源