1.选举机制
- 半数机制:集群中半数以上机器存活,集群就可用。所以Zookeeper适合安装奇数台服务器。
- Zookeeper虽然在配置文件中没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点作为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。
- 以一个简单的例子来说明一下整个选举的过程:
假设有5台服务器组成的Zookeeper集群,它们的id是1-5,同时它们都是最新启动的没有历史数据,在存放数据量这一点上,都是一样的。假设这些服务器依次启动,会发生什么呢?
通过投票的机制进行选举,当有任何一个获得票数超过总服务器数的一半,则这个服务器为Leader。
2.节点类型
持久(Persistent):客户端与服务器断开连接之后,创建的节点不删除。
短暂(Ephemeral):客户端与服务器断开连接之后,创建的节点自行删除。
3.stat结构体
1)czxid- 引起这个znode创建的zxid,创建节点的事务的zxid
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子节点数量
4.***原理(*)
- ***原理详解:
2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)
3)通过connect线程将注册的监听事件发送给Zookeeper
4)在Zookeeper的注册***列表中将注册的监听事件添加到列表中
5)Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程
6)listener线程内部调用了process()方法
2. 常见的监听
1)监听节点数据的变化
get path [watch]
2)监听子节点增减的变化
ls path [watch]