1. 选举机制
- 半数机制:半数以上机器存活,集群可用,所以ZooKeeper适合安装奇数台服务器
- 工作时自动选举出Leader,其他则为Follower(以下以5台服务器举例)
- 持久节点(Persistent):客户端和服务器断开连接后,创建的节点不删除
- 持久化目录节点
- 持久化顺序节点:断开连接后,节点依然存在,只是ZooKeeper对节点名称进行顺序编号
- 短暂节点(Ephemeral):客户端和服务器断开连接后,创建的节点自己删除
- czxid-创建节点的事务zxid
- 每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID
- 事务ID是ZooKeeper中所有修改总的次序,每个修改都有唯一的zxid
- ctime-znode被创建的毫秒数(从1970年开始)
- mzxid-znode最后更新的事务zxid
- mtime-znode最后修改的毫秒数(从1970年开始)
- pzxid-znode最后更新的子节点zxid
- cversion-znode子节点变化号,znode子节点修改次数
- dataversion-znode数据变化号
- aclversion-znode访问控制列表的变化号
- ephemeralOwner-如果是临时节点,这个是znode拥有者的session id,如果不是临时节点则为0
- dataLength-znode的数据长度
-
4. 监听器原理
client需要一个主线程main()
- 主线程创建两个线程listener(监听)和connect(网络连接通信)
- connect将注册的监听事件发送给ZooKeeper服务器
- ZooKeeper服务器在监听器列表中插入这个监听事件
- ZooKeeper一旦监听到这个监听器监听的节点有数据或路径变化,就会将这个消息发送给listener线程
- listener线程内部执行process方法执行业务流程