zookeeper内部原理

一.zookeeper的选举机制( 面试重点 )

1.半数机制:集群中半数以上机器存活,集群可用,所以zookeeper适合安装奇数台服务器。

2.Zookeeper虽然在配置文件中并没有指定Master和Slave,但是,Zookeeper工作时,是有一个节点为Leader,其他为Follower,Leader是通过内部的选举机制临时产生的

3.选举机制是怎样运行的,假如集群有五台服务器,id从1-5,然后这些服务器依次启动。

当服务器1启动,每台服务器启动时都会先投自己一票,服务器1发现投自己一票并不能达到半票机制,所以他的选举状态一直是LOOKING状态

然后服务器2启动,他与最开始启动的服务器1进行通信,互换自己的选举结果,由于两者都没有历史数据,所以id较大的服务器2胜出,但是由于没有达到半数以上所以还是不行

接着服务器3启动,先投自己一票,1和2知道投2不行,所以就把自己的票投给了3,这时3号的票达到了半票机制,当上了Leader

最后4,5号启动发现已经有Leader了,也只能把票投给了3号,所以最后3号当选的Leader

二.节点类型

持久(Persistent): 客户端和服务器断开连接后,创建的节点不删除

(1) 持久化目录节点

客户端与Zookeeper断开连接后,该节点依旧存在

(2) 持久化顺序编号目录节点

客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

短暂(Ephemeral) : 客户端和服务器断开连接后,创建的节点自己删除

(1) 临时目录节点

客户端与Zookeeper断开连接后,该节点被删除

(2) 临时顺序编号目录节点

客户端与Zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序标号

说明:创建znode时设置顺序标识,znode名称会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

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