Zookeeper的配置文件解析:
Zookeeper内部原理:
选举机制
半数机制:在集群环境中半数以上的机器存活,这个集群可用,所以在设计Zookeeper集群系统时,通常会选择 奇数台服务器来搭建Zookeeper的集群
虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点为Leader,其他则为Follower,Leader是通过内部的选举机制临时产生的
临时选举机制:zookeeper集群启动时有一个默认的票数,第一个台启动,票数投给自己,第二台也启动,票数也是投给自己,第三台也是把票数给自己,zookeeper最少要三台服务才能成为集群(id是自动自增的,后启动的服务id越大),但是目前的票数都为1,就会把票数给id大的的服务,于是第三台服务就有了三票,成为了leader,之后启动的服务票数只有1,无论如何也成为不了leader,也会把票数投给第三台服务,所以只要是第三台启动的服务都会成为leader
节点类型
1.持久型
特点:客户端如果和Zookeeper断开了连接,对应的节点上数据依旧持久保存着
创建ZNode时按照顺序来进行标识节点,ZNode名称后面追加一个数字的值,
例如:Znode001、Znode002、Znode003...顺序号是一个单调递增的数字来进行标记。
2.短暂型
特点:客户端和Zookeeper断开连接之后,该节点会被自动的回收(自动的删除)
创建ZNode节点的时候,ZNode名称会追加一个数字的值,顺序编号是一个单调递增的数字:例如:Znode001、Znode002、Znode003...
监听器原理
1.在main方法中创建Zookeeper客户端的同时就会创建两个线程,一个负责网络连接通信(获取数据),一个负责监听(看数据是否改变)。
2.监听事件就会通网络络通信发送给Zookeeper。
3.Zookeeper获得注册的监听事件后,立刻将监听事件添加到监听列表里。
4.Zookeeper监听到数据变化或路径变化,就会将这个消息发送给监听线程。常见的监听: 监听节点数据的变化:get path [watch]
监听子节点增减的变化:ls path [watch]
5.监听线程就会在内部调用process()方法(需要开发者实现process()方法的内容)。
写数据流程解析
1.Client想向ZooKeeper的Server1上写数据,必须得先发送一个写的请求。
2.如果Server1不是Leader(从节点没有写的权限),那么Server1会把接收到的请求进一步转发给Leader。
3.这个Leader会将写请求广播给各个Server,各个Server写成功后就会通知Leader。 4.当Leader收到半数以上的Server数据写成功了,那么就说明数据写成功了。
5.随后,Leader会告诉Server1数据写成功了。
6.Server1会反馈通知Client数据写成功了,整个流程结束。