最近项目中采用ZK去选择分布式集群的Master/Slave,生产环境运行一段时间中,经常出现同时存在多个Master的问题,然后去阅读了一下ZK扩展包的源码,发现两个BUG:
BUG:多机器同时获取WriteLock全局锁时有可能会有多个机器成为Leader。
原因分析:WriteLock创建临时自增节点是采用x-session_id-sequece_no的方式,在选举Leader时,通过TreeSet对节点进行排序,最小的节点就会被选为Leader,其它的会被选为Follower。由于ZNodeName的compareTo方法的实现问题,WriteLock获取的锁时并不是按sequence_no最小的来选择,而是先根据session_id的字符串进行比较,再比较sequence_no,如果WriteLock后创建的节点的session_id比前面的小(可能性比较大),这种比较方式就有可能导致产生多个Leader。如:
机器1创建了:x-231622919316419832-0000000183
机器2创建了:x-231622919316419833-0000000184
机器3创建了:x-87556941509467773-0000000185
机器4创建了:x-159565318739768636-0000000186
由于机器1最先启动,只有一个节点生成,所以理所当然成为Leader,但由于ZNodeName的compareTo方法的问题,机器4启动后发现session_id值比当前Leader的值要小,所以机器4也被认为是Leader,这样就同时存在了两个Leader。
另外,不仅在机器启动和重启的时候发生,ZK会话超时重连,而会出现此情况。
如何改造:
去除ZNodeName的compareTo方法对session_id的比较,仅保留对sequece_no的比较。
分享到:
相关推荐
在这个"zookeeper的分布式全局锁纯代码解决方案"中,我们将探讨如何利用Zookeeper来构建一套易于理解和扩展的分布式锁。 首先,Zookeeper的特性使其成为实现分布式锁的理想选择。Zookeeper提供了原子性的读写操作、...
接下来,我们谈谈Zookeeper的选举机制: Zookeeper使用一种叫做Zab(Zookeeper Atomic Broadcast)的协议来实现分布式一致性。在Zookeeper集群中,当一个新的节点加入或某个节点失效时,需要进行领导者选举以确定新...
这里,我们将深入探讨如何利用ZooKeeper这一强大的分布式协调服务来实现分布式锁,以解决订单编号的唯一性问题。 ZooKeeper是由Apache Hadoop项目孵化的开源项目,它提供了一个高可用、高性能的分布式协调服务。其...
Zookeeper由Apache基金会开发,它提供了一种可靠的分布式一致性服务,包括命名服务、配置管理、集群同步、领导者选举等功能。Zookeeper基于ZAB协议(Zookeeper Atomic Broadcast),保证了数据的强一致性和最终一致...
1. **顺序一致性:** Zookeeper中的节点被创建顺序是全局唯一的,这有助于实现锁的唯一性。 2. **原子性:** 创建和删除节点的操作在Zookeeper中都是原子性的,这保证了分布式锁操作的原子性。 3. **排他性:** 一个...
- ZooKeeper提供了一种树型的数据结构,它支持数据的发布/订阅、配置管理、命名服务、分布式锁和组服务等多种功能。 2. **主从选举**: - 在Zookeeper中,每个节点(称为Server)都可以成为领导者或跟随者。选举...
分布式锁是解决多节点系统中同步问题的一种常见技术,ZooKeeper,由Apache基金会开发的分布式协调服务,常被用于实现高效可靠的分布式锁。本文将深入探讨如何利用ZooKeeper来构建分布式锁,并讨论其背后的关键概念和...
5. **命名服务**:Zookeeper可以作为分布式环境中的全局命名服务,通过路径来标识和查找服务。 6. **配置管理**:在分布式系统中,配置的更新和同步是常见的需求。Zookeeper可以作为集中式的配置中心,确保所有节点...
在分布式系统领域,Zookeeper作为一款强大的协调服务,广泛应用于配置管理、命名服务、分布式锁等场景。其中,ZkFuse是Zookeeper的一个重要组件,它允许用户通过文件系统接口与Zookeeper进行交互。然而,在Zookeeper...
zookeeper选举机制图,内讲述了zookeeper是如何选举出leader、fllower的
在C#开发环境中,我们可以借助外部协调服务,如Apache ZooKeeper,来实现分布式锁。ZooKeeper是一个高可用的分布式协调服务,它提供了诸如命名服务、配置管理、分布式同步、组服务等功能。本篇将深入探讨如何在C#中...
Zookeeper 中 Leader 选举机制 在分布式系统中,Leader 选举机制是非常重要的一环,Zookeeper 作为一个广泛应用于分布式系统的协调服务,自然也有自己的 Leader 选举机制。下面,我们将通过一个有趣的面试对话来...
在分布式系统中,Zookeeper是一个至关重要的组件,它主要用于实现分布式服务管理,提供诸如配置管理、命名服务、集群同步、 leader选举等核心功能。在这个"zookeeperMaster选举以及数据同步代码"项目中,我们将深入...
#资源达人分享计划#
Zookeeper默认提供的是非公平锁,但可以通过设计实现公平锁。 **Zookeeper客户端实现分布式锁** 1. **连接Zookeeper**: 客户端首先需要与Zookeeper服务器建立连接,获取会话。 2. **创建临时顺序节点**: 在指定的...
本文来自于技术世界,本文结合实例演示了使用Zookeeper实现分布式锁与领导选举的原理与具体实现方法。如上文《Zookeeper架构及FastLeaderElection机制》所述,Zookeeper提供了一个类似于Linux文件系统的树形结构。该...
在这个场景下,我们将关注ZooKeeper如何实现分布式锁,特别是不可重入锁、可重入锁以及可重入读写锁的概念与实践。 首先,我们要理解什么是分布式锁。在多节点并发访问共享资源时,分布式锁能确保同一时刻只有一个...
Zookeeper 的这种一致性模型在实践中是非常实用的,因为它允许在可用性和一致性之间做出权衡,同时保持了基本的顺序一致性保证,这对于分布式锁和其他需要全局顺序的服务来说已经足够。在 Zookeeper 的官方文档中,...
4.1zookeeper 分布式锁简单练习
本文将深入探讨基于Zookeeper实现的分布式读写锁,并利用Zkclient客户端进行操作。Zookeeper是一个分布式服务协调框架,它提供了一种简单且高效的方式来实现分布式锁。 **一、Zookeeper简介** Zookeeper是由Apache...