zookeeper什么意思:核心定义与用法
zookeeper什么意思,它是Apache基金会开源的分布式协调服务,全称ApacheZooKeeper,核心作用是在多台服务器组成的分布式集群里统一管理配置、维护节点状态、完成分布式锁与选主,解决分布式系统中多节点数据不一致、主节点故障切换、服务注册发现这类协同问题,适合微服务集群、分布式任务调度、大数据组件(Hadoop、Kafka)配套场景;它并不承担业务数据存储,也不是消息队列,如果你是单机小应用,不需要引入该组件。
zookeeper什么意思,底层核心机制
ZooKeeper采用ZAB协议(ZooKeeperAtomicBroadcast,原子广播协议)来保证集群数据一致性,集群一般部署奇数台节点,常见为3台或者5台,节点分为Leader、Follower、Observer三种角色,Leader负责处理写请求并广播事务,Follower参与投票并同步数据,Observer只同步数据不参与投票,用来扩展读性能。它的数据模型是类似文件系统的树形结构,叫做ZNode,每个ZNode可以存储少量元数据,同时自带临时节点、持久节点、顺序节点三种类型,临时节点会在客户端会话断开后自动删除,这个特性常被用来做服务上下线感知。
它不是数据库。
ZNode单节点存储数据大小默认上限是1MB,这是很关键的边界限制,你不能把大量业务报文、日志全部塞进ZNode,一旦存储内容超过这个阈值,写入操作会直接报错,很多初学者会误把它当成通用存储引擎,写入大对象之后集群出现写入失败,就是触碰了这个限制。客户端和服务端维持长连接会话,会话有超时时间,会话过期之后临时ZNode自动清除,依赖临时节点的服务注册信息就会失效。
zookeeper什么意思,典型应用场景
常见落地场景包含分布式锁、主节点选举、统一配置中心、服务注册发现。分布式锁依靠顺序临时节点实现,所有抢锁客户端在同一个父节点下创建顺序临时节点,编号最小的节点获得锁,前面节点释放锁之后,后续节点收到通知继续竞争;主节点选举就是集群内候选节点创建临时节点,成功创建的节点成为主节点,主节点宕机会话失效,临时节点删除,剩余节点重新发起选举。Apache官方项目文档对ZAB协议、ZNode类型、集群角色都有明确定义,你可以在ApacheZooKeeper官方文档查阅协议细节与配置参数。
| 功能 | 实现原理 | 适用场景 |
|---|---|---|
| 分布式锁 | 顺序临时节点+监听前驱节点 | 跨集群互斥资源抢占 |
| 主节点选举 | 临时节点抢占,会话失效触发重选 | 集群主备切换 |
| 统一配置中心 | 持久ZNode保存配置,watch监听变更 | 多节点配置同步推送 |
| 服务注册发现 | 临时ZNode保存服务地址,上下线自动更新 | 微服务服务列表维护 |
zookeeper什么意思,部署与使用要点
你部署集群的时候,推荐把节点分散在不同物理机或者独立故障域,避免单台物理机故障直接让集群失去过半投票能力,集群必须维持过半节点存活才能对外提供写服务,也就是Quorum过半机制,如果3节点集群挂掉2台,剩余1台节点无法完成投票,写请求就会阻塞。配置文件zoo.cfg里需要配置dataDir数据目录、clientPort客户端端口、server.X集群节点列表,X对应每台机器myid文件内的编号,myid是每台节点唯一标识,编号不能重复。
客户端可以使用Java原生客户端,也可以使用Curator框架,Curator对原生API做了封装,内置分布式锁、选举的成熟工具类,减少你自己处理会话重连、watch重复注册的代码量。原生客户端的watch是一次性触发,触发之后需要重新注册监听,这是容易出错的细节,如果没有重新注册,后续节点变更就收不到通知。
该组件的适用边界是协调类元数据管理,高吞吐大数据业务、高并发消息投递并不适合交给ZooKeeper,它的写性能受单Leader节点瓶颈约束,写请求全部由Leader处理再广播,当写请求量非常大时,集群延迟会明显上升。
运维层面,定期备份dataDir内的事务日志与快照文件,快照会周期性把内存全量数据落盘,事务日志记录所有写事务,集群崩溃恢复依靠这两类文件回放重建内存数据,日志目录建议单独挂载磁盘,减少随机IO争抢。
