Server节点通过Leader选举过程区分出Leader和Follower后,ZkServer集群准备就绪,开始为Client提供服务:
1. Leader,Follower和Observer三者本地都有集群数据的缓存,Client的读数据请求,直接由本地缓存提供;
2. 集群数据的更新同步,由Leader负责发起,时机是任何一个Client发起更新数据的请求后;
Leader和Follower之间的通讯如下图:
1. 连接
a)Leader启动LearnerCnxAcceptor线程,监听2888
b)Follower发起连接
c)Leader接受连接,实例化LearnerHandler,持有一个Socket,表示一个Follower连接
2. 请求
a)Leader和Follower之间,主要有两种请求:ping和数据变更
i)ping的发起方是Leader
ii)数据变更的发起方可以是Leader,也可以是Follower
iii)数据变更过程的发起方是Leader
b)Leader发起的ping请求
i)同时向所有的Follower发出
ii)Leader持有Follower连接的列表,即LearnerHandler列表
iii)每个LearnerHandler发出ping请求,具体由SendPacket线程发出
iv)响应由LearnerHandler接收,再返回给Leader
3. 处理
a)ping请求
i)Follower直接处理ping请求
b)其它请求
i)分别转发给ZKS,即LeaderZooKeeperServer和FollowerZooKeeperServer
ii)递交给RequestProcessor处理