zookeeper选举机制
sid:服务器id,用来唯一标识一台zookeeper集群中的机器,每台机器不能重复,和myid一致。
zxid:事务id,zxid是一个事务id,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的zxid值不一定完全一致,这和zookeeper服务器对于客户端更新请求,的处理逻辑有关。
epoch:每个leader任期的代号,没有leader时同一轮投票过程中的逻辑时钟值是相同的,每投完一次票这个数据就会增加。
1.服务1启动,发起一次选举,服务器1自己投自己一票,此时服务器1票数一票,不够半数以上3票,选举无法完成,服务器1状态保持为looking。
2.服务器2启动,再发起一次选举,服务器1和2分别投自己一票并交换选举信息,此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2,此时服务器1票数0票,服务器2票2票,没有半数以上结果,选举无法完成,服务器1,2状态保持looking。
3.服务器3启动,发起一次选举,此时服务器1和2都会更改选举票为服务器3,此时投票结果:
服务器1为0票,服务器2为0票,服务器3为3票,服务器3票数过半,当选leader,服务器1,2更改状态为following,服务器3为leading。
4.服务器4启动,发起一次选举,此时服务器123已经不是looking状态,不会更改选举信息,交换选票信息结果,服务器3为3票,服务器4为1票,此时服务器4服从多数,更改选举票为服务器3,并更改状态为following。
服务器5启动,同4一样当小弟。
1.zookeeper集群中的一台服务器出现以下两个情况之一,就开始进入leader进行选举;
服务器初始化启动。
服务器运行期间无法和leader保持连接。
2.而当一台机器进入leader选举流程时,当前集群也可能会处于以下两种状态;
集群中本来就已经存在leader。
对于第一种已经存在leader的情况下,机器试图去选举leader时,会被告知当前服务器的leader信息,对于该机器来说,仅仅需要和leader机器建立连接,并进行状态同步即可。
集群中确认不 存在leader。
假设zookeeper由五台服务器组成,sid分别为1,2,3,4,5zxid分别为8,8,7,7,此时sid为3的服务器是leader,某一时刻,3和5服务器出现故障,因此开始进行leader选举。
sid为1,2,4的机器投票情况(1,8,1),(1,8,2),(1,7,4)
---------------------------------------------------------------------------
国之殇,未敢忘!
南京大屠杀!
731部队!
(有关书籍《恶魔的饱食》)以及核污染水排海等一系列全无人性的操作,购买他们的食品和为它们提供帮助只会更加变本加厉的害你,呼吁大家不要购买日本相关产品
昭昭前事,惕惕后人
吾辈当自强,方使国不受他人之侮!
---------------------------------------------------------------------------
作者:三号小玩家
出处:https://www.cnblogs.com/q1359720840/
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。 版权信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?