要全面了解zookeeper,首先我们得知道什么是zookeeper,能做什么。zookeeper是一个开源的分布式协调服务,主要用于数据订阅/发布,集群管理,配置管理,分布式锁。
基本架构
zookeeper基本架构如下,zookeeper client连接zookeeper集群中的任一节点进行api操作,同时zookeeper节点中的Following节点连接zookeeper Leader节点进行数据同步跟将对zookeeper节点修改操作的请求转发到zookeeper leader节点进行操作。
![在这里插入图片描述](https://img-blog.csdnimg.cn/81f0c2c3d0a5439db28b48a7f2b611b7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATWFyeSBMaW5n,size_20,color_FFFFFF,t_70,g_se,x_16)
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生命周期
![在这里插入图片描述](https://img-blog.csdnimg.cn/0aea7b998c7f4a1aaf8362959d5ab65f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATWFyeSBMaW5n,size_20,color_FFFFFF,t_70,g_se,x_16)
Session刚启动的时候处于初始状态NOT_CONNECTED, 当Zookeeper客户端初始化成功之后Session进入CONNECTING状态,然后Zookeeper客户端连接服务器成功之后进入CONNECTED状态,一旦Zookeeper客户端与服务器失去连接或者指定时间都没有收到服务器的心跳,则回到CONNECTING状态。当zookeeper client关闭session,则会进入CLOSED状态。
Zookeeper负载均衡
zooekeeper通过client对多个服务器连接的rehash来实现简单的负载均衡。