- Zookeeper
- zookeeper基础架构leader与follower,半数选举机制,配置id大小
- Clint与follower之间通信NIO
- Leader与follower通信是socket通信
- 选举时候leader与follower默认选举机制是FastLeaderElecation机制,通信采用tcp/ip
- Zookeeper作用是做分布式协调服务
- 节点能存储的消息是1M
- 节点有四种类型:永久节点(断开之后依然存在),永久顺序节点,临时节点(断开之后节点将被删除),临时顺序节点
- Zookeeper通信机制是clint端上传数据给follower,follower将请求发送给leader,leader再将请求分发给下面的follower,待半数以上的follower都数据同步完成,那么此次请求通信完成(每个server保存相同的数据副本),更新数据具有原子性,查询数据再一定范围内有实时性
- 端口是2181
- 几个重要的参数(
Zookeeper中的配置文件zoo.cfg中参数含义解读如下:
1.tickTime =2000:通信心跳数,Zookeeper服务器与客户端心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
2.initLimit =10:LF初始通信时限
集群中的Follower跟随者服务器与Leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
3.syncLimit =5:LF同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
4.dataDir:数据文件目录+数据持久化路径
主要用于保存Zookeeper中的数据。
5.clientPort =2181:客户端连接端口
监听客户端连接的端口。
) - zookeeper必须是奇数台节点,因为zookeeper的选举依赖节点的投票,半数以上同意菜能选举出leader
- zookeeper的节点状态(looking,follower,leader)依次启动根据节点配置的id选取最大的作为leader,选出之后其余均为follower
- 每个节点的结构体(state)包含整个节点的信息(
1)czxid-创建节点的事务zxid
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。
事务ID是ZooKeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2,那么zxid1在zxid2之前发生。
2)ctime - znode被创建的毫秒数(从1970年开始)
3)mzxid - znode最后更新的事务zxid
4)mtime - znode最后修改的毫秒数(从1970年开始)
5)pZxid-znode最后更新的子节点zxid
6)cversion - znode子节点变化号,znode子节点修改次数
7)dataversion - znode数据变化号
8)aclVersion - znode访问控制列表的变化号
9)ephemeralOwner- 如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0。
10)dataLength- znode的数据长度
11)numChildren - znode子节点数量
) - zookeeper监听详解: 1)首先创建一个main线程 2)再main线程中创建zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)3)通过connet线程将注册监听信息发送给zookeeper 4)再zookeeper注册监听器列表中将注册的监听时间添加到列表中 5)zookeeper监听到有数据或者路径的变化,就会将这个消息发送给监听事件的listener 6)listener线程内部调用process()方法 ---常见的监听get path【watch】监听节点值得变化,---ls path【watch】监听节点目录得变化
- 代码后面补