Zookeeper是开源的分布式应用程序协调服务,是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置文件的管理、集群管理、同步锁、leader 选举、队列管理等。zookeeper集群通过paxos协议变种zab来保持的。
zookeeper的主要角色为:首领-leader,跟随者-follower,观察者-observer
leader
leader是zookeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求(事务性更新和非事务性查询)
对于exists,getData,getChildren等非事务性查询请求,zookeeper服务器直接本地处理,每个服务器的命令空间是一致的。对于create,setData,delete等事务性更新请求,需要统一转发给leader处理,leader保证2-阶段或者3阶段来处理请求。
follower
follower响应非事务性查询,还可以处理leader的提议,并在leader提交该提议时在本地提交。leader和follower构成ZooKeeper集群的法定人数,参与新leader的选举、响应leader的提议。
observer
observer只响应非事务性查询,observer和follower区别在于:observer不参加选举也不响应提议;observer不需要将事务持久化到磁盘,一旦observer重启,需要leader全量同步命令空间。
如果做分机房集群,一个机房可以全部是leader 和 follower, 另外一个机房是 Observer,主机房可以内部完成选举恢复不需要跨机房,副机房可以让observer全部投入读服务。
Znode 种类
临时节点,该生命周期依赖于创建它们的会话,一旦会话结束,临时节点将会被自动删除,当然也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端,但它们对所有的客户端还是可见的。另外,需要注意的是临时节点不允许拥有子节点。
永久节点,该生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,它们才能被删除。
- 永久节点
- 临时节点 (不可在拥有子节点) : 适用于心跳,服务发现等场景
- 永久序号节点 : 分布式锁、分布式选举等场景
- 临时序号节点 (不可在拥有子节点)
- 持久TTL节点
- 持久TTL顺序节点
- 容器节点