本章节博客开始深入下zookeeper的配置文件分析,集群主从选举机制,节点类型讲解等内容。
一起学习,一起进步。继续沉淀,慢慢强大。希望这文章对您有帮助。若有写的不好的地方,欢迎评论给建议!
初写博客不久,我是杨展浩。这是我的第七篇博客。加油!!!
1、zookeeper的配置文件分析
配置文件内容不多,贴图完事:
2、集群主从选举机制
zookeeper的集群与redis集群概念很类似。zookeeper的集群用 Leader领导者、Follower跟随者来标识。Redis的集群使用Master主、Slave从来标识。
选举机制:初次进来的zookeeper服务,在参与选举中优先投自己一票,当发现自己的票数没超过集群的半数以上的时候,就会投出另一票给当前集群中的id最大的那一个zookeeper服务,zookeeper服务一次开启加入集群,当有一个zookeeper服务得到的投票数超过集群的半数以上,该zookeeper服务就当选Leader领导者了,而后面加入的zookeeper服务就算id大也不能当选Leader领导者,遵循先到先得原则,因为前面已经选出了一个Leader了,除非前面当选得Leader(zookeeper服务)挂了,选举重新开始。
3、节点类型讲解
- 持久(Persistent) :客户端和服务器端断开连接后,创建的节点不删除。
- 客户端与Zookeeper断开连接后,该节点依旧存在。
- 持久化顺序编号目录节点客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给 该节点名称进行顺序编号。
- 短暂(Ephemeral) :客户端和服务器端断开连接后,创建的节点自己删除。
- 客户端与Zookeeper断开连接后,该节点被删除。
- 临时顺序编号目录节点客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。
4、zookeeper客户端监听器原理
-
先要存在一个 main 线程。
-
在 main 线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener )。
-
通过 connect 线程将注册的监听事件发送给Zookeeper服务。
-
在Zookeeper服务的注册监听器列表中将注册的监听事件添加到列表中。
-
Zookeeper服务监听到列表中有数据或路径发生变化,就会将这个消息发送给 listener 线程。
-
listener线程内部调用了process()方法(就是程序员自定义的处理代码)。
常见的监听例子:
-
监听节点数据的变化 get path [watch]
-
监听子节点增减的变化 Is path [watch]