要全面了解zookeeper,首先我们得知道什么是zookeeper,能做什么。zookeeper是一个开源的分布式协调服务,主要用于数据订阅/发布,集群管理,配置管理,分布式锁。

基本架构

zookeeper基本架构如下,zookeeper client连接zookeeper集群中的任一节点进行api操作,同时zookeeper节点中的Following节点连接zookeeper Leader节点进行数据同步跟将对zookeeper节点修改操作的请求转发到zookeeper leader节点进行操作。

Server节点角色

Zookeeper server节点有3种角色,Leading角色,Follower角色和Observer角色。

角色介绍
Follower角色Follower角色可以用于跟zookeeper客户端进行session连接和通信,处理客户端获取Znode节点数据的请求,负责将对Znode节点数据修改的操作转发给Leader节点,同时参与zookeeper leader的选举
Leader角色Leader角色可以用于跟zookeeper客户端进行session连接和通信,处理Follower节点和Observer节点对数据更新的请求并更新数据
Observer角色Observer角色主要负责跟zookeeper客户端进行session连接和通信,处理客户端获取Znode节点数据请求,负责将对Znode节点数据修改的操作转发给Leader节点,但是不参与zookeeper leader的选举,可以通过添加 peerType=observer来设置节点为Observer角色,对于集群模式,同时需要设置server.1:localhost:2181:3181:observer

Server状态

选举状态基本介绍
LOOKINGServer的初始状态都是LOOKING
LEADINGServer参与选举成功的节点将进入LEADING状态
FOLLOWING如果没选举成功,则进入FOLLOWING状态
OBSERVING如果节点为Observer角色,则进入OBSERVING状态

Session生命周期


Session刚启动的时候处于初始状态NOT_CONNECTED, 当Zookeeper客户端初始化成功之后Session进入CONNECTING状态,然后Zookeeper客户端连接服务器成功之后进入CONNECTED状态,一旦Zookeeper客户端与服务器失去连接或者指定时间都没有收到服务器的心跳,则回到CONNECTING状态。当zookeeper client关闭session,则会进入CLOSED状态。

Zookeeper负载均衡

zooekeeper通过client对多个服务器连接的rehash来实现简单的负载均衡。