一、选举机制
1)、半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
2)、Zookeeper虽然在配置文件中并没有指定Master和Slave。但是Zookeeper工作时是有一个节点为Leader,其他的则为Flower,Leader是通过内部的选举机制临时产生的。
3)、以一个简单的例子来说明整个选举过程。
假设五台服务器,没有历史数据,都是最新启动的,都一样。
假设这些服务器依次启动。
server们都很单纯,1号机启动了首先都是投票选举自己,投给自己之后发现自己搞不活集群,就会把票投给id(myid)值较大的服务器。
当2号机启动,2号机自己给自己投了一票,1号机给他一票,一共才两票,还是没过半。只要没超过半数,集群就活不了,前面启动的几个就一直处于Looking(选举状态)。当启动的服务器超过半数了,集群能活下来了。
当3号机启动了,3号机有1号机的一票,2号机的一票以及3号机自己给自己的一票,3号机的总票数就是三票,票数超过总服务数的一半,集群存活。3号机当选老大,1、2号机变成Flower。后面4、 5号机启动。票数不够,只能当flower。
所以一般只要是奇数台服务器,按启动顺序来看,中间一台的服务器就是Leader,其余的都是Flower。
二、节点类型
持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除。(Leader)
短暂(Ephemeral):客户端和服务器端断开连接后,创建的节点自己删除。(Flower)
若Client1创建的是持久型节点,断开之后不会删除。
若Client2创建的是短暂型节点,断开之后删除。
1)、持久化目录节点
客户端语Zookeeper断开连接后,该节点依旧存在。
2)、持久化顺序编号目录节点
客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。
3)、临时目录节点
客户端与Zookeeper断开连接后,该节点被删除。
4)、临时顺序编号目录节点
客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。
说明:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。
注意:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样的客户端可以通过顺序号推断事件的顺序。
三、监听器原理
1、监听原理详解:
1)、首先要有一个main()线程。
2)、在main线程中创建Zookeeper客户端,这时就会创建两个线程。一个负责网络连接通信(connet),一个负责监听(listener)。
3)、通过connect线程将注册的监听事件发送给Zookeeper。
4)、在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
5)、Zookeeper监听到有数据活路径变化,就会将这个消息发送给listener线程。
6)、listener线程内部调用了process()方法。
2、常见的监听:
1)、监听节点数据得变化
get path [watch]
2)、监听子节点增减的变化
ls path [watch]
四、写数据流程