要全面了解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状态
选举状态 | 基本介绍 |
---|---|
LOOKING | Server的初始状态都是LOOKING |
LEADING | Server参与选举成功的节点将进入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来实现简单的负载均衡。