目录
1 什么是zookeeper
zookeeper 可以理解成一个管家,可以用zookeeper来管理一些分布式集群。比如 一个系统有一堆服务器组成,这些服务器有统一的配置,可以用zookeeper来存储统一配置(基于回调的机制会通知到所有的server)。可以把zookeeper理解一个公共区域。也可以把zookeeper实现分布式锁。或者使用zookeeper来选主(kafka种使用zookeeper的作用)
2 zookeeper 集群构成
zk集群中有3中角色:
(1) leader:可接受读请求也可以接受写请求
(2) follower:只能接受读请求,如果有写请求,会转接给leader
(3) observer:只能接受读请求。与follower的区别是在leader挂掉后,不能参与投票选举(为了加速选举恢复过程)
3 zookeeper 存储的数据特点
zookeeper中数据存储用的是目录树结构
每个目录都可以看成一个node节点(每个node节点可以存储1MB)。节点有以下3种类型可以选择
每个node节点附带的信息
通过 get /test2 /**得到/test2目录下的数据/
4 zookeeper ZAB协议
当有写请求时的时候,zk集群使用ZAB协议(由paxos协议改进)来完成消息传递的一致性。
5 zookeeper 选主过程
6 zookeeper 使用
6.1配置管理
(代码太多,具体代码可看https://gitee.com/myByteWorld/zookeeper/tree/master/src/java/zookeeper/configTest)
6.2分布式锁
zk分布式锁和redis分布锁的最主要的区别:
zk分布锁:客户端被动,由zk主要回调通知
redis分布锁:客户端主动轮询锁存不不存在
(代码太多,具体代码可看https://gitee.com/myByteWorld/zookeeper/tree/master/src/java/zookeeper/lock)