月眸


zookeeper学习二:zookeeper内部原理

毛毛小妖 2019-08-08 473浏览 0条评论
首页/ 正文
分享到: / / / /

一、选举机制

1、半数机制:集群中半数以上机器存活,集群可用。所以zookeeper适合安装奇数台服务器。
2、zookeeper虽然没有在配置文件中指定Master和Slave。但是,zookeeper在工作时有一个节点为Leader,其他节点则为Follower,Leader是通过内部选举机制临时产生的。
3、例子解释:

假如有5台服务器组成的zookeeper集群,他们的id从1-5,同时他们都是最新启动的。假设他们依次启动,如图所示:

(1)服务1启动,此时只有它一台服务器启动了,他发出去的报文没有任何响应,所以他的选举状态一直是LOOKING状态。

(2)服务2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id较大的服务器2胜出,但由于没有达到半数以上,所以还是LOOKING状态。

(3)服务3启动,服务器1和2都依次选举3,于是服务器3票数最多胜出,此时已经达到半数以上了,所以此时服务器3就是leader,其他则为follower。

二、节点类型

zookeeper的节点有两种类型,分别是持久类型和短暂类型。

1、持久类型:服务器和客户端断开连接后,创建的节点不删除

持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在。

持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只是zookeeper给该节点名称进行顺序编号。

2、短暂类型:服务器和客户端断开连接后,创建的节点自己删除

临时目录节点:客户端与zookeeper断开连接后,该节点被删除。

临时顺序编号目录节点:客户端与zookeeper断开连接后,该节点被删除,只是zookeeper给该节点名称进行顺序编号。

3、注意

在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。


三、stat结构体

1、czxid:创建节点的事务zxid

2、ctime:znode被创建的毫秒数

3、mzxid:znode最后更新的事务zxid

4、mtime:znode最后修改的毫秒数

5、pZxid:znode最后更新的子节点zxid

6、cversion:znode子节点变化号,znode子节点修改次数

7、dataversion:znode数据变化号

8、aclversion:znode访问控制列表的顺序号

9、dataLenth:znode数据长度

10、numChildren:znode子节点数量

四、监听器原理

1、首先要有一个main()线程

2、在main()线程中创建zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)。

3、通过connect线程将注册的监听事件发送给zookeeper。

4、在zookeeper的注册监听器列表中将注册的监听事件添加到列表中。

5、zookeeper监听到有数据或路径发生变化,就会将这个消息发送给listener线程。

6、listener线程内部调用了process()方法。

注意:常用的监听有

1、监听节点数据的变化:get path [watch]

2、监听子节点增减的变化:ls path [watch]

五、写数据流程

最后修改:2019-08-08 15:08:50 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

还没有人评论哦~赶快抢占沙发吧~