ZooKeeper 是一款面向分布式应用的高性能协调服务。
它通过一个简单的接口来提供常用服务:命名、配置管理、同步和组服务(例如节点注册和发现)
它本质上是一个强一致性的分布式键值存储系统,但用途并不限于存储,更在于协调和管理。
能力 | 说明 |
---|---|
命名服务 | 支持分布式命名,节点可通过路径访问(类似文件系统) |
配置管理 | 存储共享配置,并可监听配置变更 |
分布式锁 | 通过顺序临时节点实现公平锁、排他锁等 |
服务注册与发现 | 节点上线时注册,其他节点监听注册变化 |
组成员管理(Group Service) | 跟踪系统中哪些节点在线、下线等 |
Leader 选举 | 通过节点顺序编号与监听机制实现高可用 leader 选举 |
元数据存储 | 存储如 Kafka 分区、Offset 等分布式元信息(如 Kafka 就依赖 ZooKeeper) |
ZooKeeper 通过以下核心机制实现其功能:
所有数据节点称为 ZNode,路径类似于文件系统,如 /config/app1/db_url
节点分为 持久节点 和 临时节点,也可设置为顺序节点
自研协议,类似 Raft/Paxos,用于实现分布式一致性
客户端可以对节点设置 Watcher
节点变更(数据变化、节点上下线)时通知客户端
实现了分布式系统的 事件监听/回调机制
ZooKeeper 集群通过奇数台机器组成(推荐 3/5/7 节点)
通过多数机制(Quorum)容错
节点间通信通过 TCP,端口默认 2888 和 3888
ZooKeeper 集群中所有 写操作(create、delete、setData)只能由 Leader 处理,Follower 只负责转发请求、参与投票。
因此,ZooKeeper 的 Leader:
Leader 选举的触发时机
每个节点都维护了两个值,用于选举使用
字段 | 含义 |
---|---|
sid | 当前节点的 Server ID(唯一) |
zxid | 最新事务的 zxid(越新越优先)高32位为 epoch 当前任期,低32位为事物计数器 |
选举步骤:
ZooKeeper 实现分布式锁主要基于两个机制:
以“公平排队式分布式锁”为例:
使用临时的顺序节点
/lock/lock-00000001
/lock/lock-00000002
...
核心逻辑和分布式锁类似:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。