zookeeper实现master选举

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: zookeeper其中的一个功能就是实现集群master的选举功能,这篇文章就来实现一下这个master选举功能,并附上相应的demo首先是应用原理,先上一个原理图原理图结构图解释:左侧树状结构为zookeeper集群,右侧为程序服务器。

zookeeper其中的一个功能就是实现集群master的选举功能,这篇文章就来实现一下这个master选举功能,并附上相应的demo

首先是应用原理,先上一个原理图

img_8a16e2152beb9e8a02e5509c5fe8da51.png
原理图

结构图解释:左侧树状结构为zookeeper集群,右侧为程序服务器。所有的服务器在启动的时候,都会订阅zookeeper中master节点的删除事件,以便在主服务器挂掉的时候进行抢主操作;所有服务器同时会在servers节点下注册一个临时节点(保存自己的基本信息),以便于应用程序读取当前可用的服务器列表。

 选主原理介绍:zookeeper的节点有两种类型,持久节点跟临时节点。临时节点有个特性,就是如果注册这个节点的机器失去连接(通常是宕机),那么这个节点会被zookeeper删除。选主过程就是利用这个特性,在服务器启动的时候,去zookeeper特定的一个目录下注册一个临时节点(这个节点作为master,谁注册了这个节点谁就是master),注册的时候,如果发现该节点已经存在,则说明已经有别的服务器注册了(也就是有别的服务器已经抢主成功),那么当前服务器只能放弃抢主,作为从机存在。同时,抢主失败的当前服务器需要订阅该临时节点的删除事件,以便该节点删除时(也就是注册该节点的服务器宕机了或者网络断了之类的)进行再次抢主操作。从机具体需要去哪里注册服务器列表的临时节点,节点保存什么信息,根据具体的业务不同自行约定。选主的过程,其实就是简单的争抢在zookeeper注册临时节点的操作,谁注册了约定的临时节点,谁就是master。

    其实简单来说就是利用了zookeeper的临时节点特性,服务器心跳宕机之后,节点会自动删除,新master会注册

接下来直接看demo

1、javaApi实现

img_88bcabb06c6e864eb434906b112ff549.png
选举器属性
img_9c28298073ad4a8540151f87712e8dbf.png
开启关闭选举
img_7597108a12de23431801cae4e77c17e1.png
选举的主要逻辑代码
img_b52013fa15673cf7d5c8a5a757d6c82e.png
模拟宕机和判断master
img_5f879025adb625cdfcb16beb706136aa.png
注册删除事件
img_464748ff648f4477ea57f4f18a4550e9.png
服务器信息对象(简单实现)
img_101092006f9a90b7c67b1aec95e7d7d2.png
测试代码

此处的此时代码,个人觉得不是很好,应该写成那种多线程通过访问选举的过程,多个线程多个zookeeper客户端,同时进行访问,这样更能模拟出真实的运行环境

2、zkclient实现,大部分逻辑代码都是一样的,可以参考javaApi原生代码实现

3、curator实现

img_77dfcfbe29abc365fdee4726e4b9568c.png
由于curator有现成的选举功能,可以直接拿来用
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
4月前
|
存储 负载均衡 算法
深入浅出Zookeeper源码(七):Leader选举
对于一个分布式集群来说,保证数据写入一致性最简单的方式就是依靠一个节点来调度和管理其他节点。在分布式系统中我们一般称其为Leader。
191 6
|
4月前
|
消息中间件 分布式计算 算法
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(上)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
262 0
|
存储 算法 Java
准备跳槽必看的这道【Java面试题】:谈谈你对Zookeeper 选举原理的理解
一位工作了 7 年的程序员,最近在面试时被问到一个关于Zookeeper的问题。因为平时很少研究,所以面试的时候只能一直说:不知道,不知道,不知道。当时,他感觉很尴尬,面试还没结束,就已经知道应该被Pass了。于是又来问我,希望我能分享一期这样的视频。
94 2
|
2月前
|
存储 数据库
zookeeper 集群环境搭建及集群选举及数据同步机制
zookeeper 集群环境搭建及集群选举及数据同步机制
48 2
|
10月前
|
算法 Linux
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
76 0
|
10月前
|
Java 开发工具 Maven
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
78 0
|
存储
zookeeper的leader选举原理和底层源码实现超级详解 2
zookeeper的leader选举原理和底层源码实现超级详解
68 1
|
4月前
|
监控 算法 网络协议
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析(下)
深入理解Zookeeper系列-3.Zookeeper实现原理及Leader选举源码分析
57 1
|
4月前
Zookeeper的选举机制原理(图文深度讲解)——过半选举
Zookeeper的选举机制原理(图文深度讲解)——过半选举
332 0
|
存储 负载均衡 算法