选举机制(非常重要)
1、半数机制:集群中半数以上机器存活,集群可用,所以zookeeper适合装在奇数台机器上。
2、zookeeper虽然在配置文件中并没有指定master和salve。但是zookeeper工作时,是又一个节点为leader没其他则为follower,leader是通过内部选举机制临时产生的
3、以一个简单的例子来说明整个选举机制。
假如有五台服务器组成的zookeeper集群,他们的id从1-5,同时他们都是最新启动的,也就是没有历史记录,在存放数据这一个点上,都是一样的。
1)、服务器1启动,此时只有它一台服务器启动了,它发出去的并没有任何相应,所以他的选举状态一直都是LOOKING状态
2)、服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两个都没有历史数据,所以id值较大的服务器2胜出但是由于没有达到超过半数以上的服务器都廷议选举它(这个例子中的半数以上是3),所以服务器1、2还是继续保持LOOKING状态
3)、服务器3启动,根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader
4)、服务器4启动,根据前面的分析,理论上服务器4是服务器1、2、3、4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接受当小弟的
5)、服务器5启动,同4一样当小弟
stat结构体
1)、czxid- 引起这个znode创建的zxid,创建节点的事务的zxid(Zookeeper Transaction Id),每次修改Zookeeper状态都会收到一个zxid形式的时间戳,也就是Zookeeper事务ID,事务ID是Zookeeper中所有修改总的次序,每个修改都有唯一的zxid,如果zxid1 小于zxid2,那么zxid1在zxid2之前发生
2)、ctime -znode被创建的毫秒数(从1970年开始)
3)、mzxid -znode最后更新的zxid
4)、mtime -znode最后修改的毫秒数
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自己点数量
监听器原理
监听器是一个接口,我们的代码中可以实现Wather这个接口,实现其中的process方法,方法中即我们自己的业务逻辑,监听器的注册是在获取数据的操作汇总实现:
getData(path , watch ?)监听的时间是:节点数据变化事件
getChildren(path ,watch?) 监听的事件是:节点下的子节点增减变化事件