1.选举机制

  1. 半数机制:集群中半数以上机器存活,集群就可用。所以Zookeeper适合安装奇数台服务器。
  2. Zookeeper虽然在配置文件中没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点作为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的。
  3. 以一个简单的例子来说明一下整个选举的过程:
假设有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.***原理(*)


  1. ***原理详解:
1)首先要有一个main()线程
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]

5.写数据流程