ZooKeeper 集群中的角色简介:
- Leader: 负责发起投票和决议,更新系统状态
- Follower:用于接收客户端请求并向客户端返回结果,在选主过程中参与投票
- Observer: 可以接收客户端连接,将写请求转发给 Leader 节点,但不会参与 Leader 发起的投票,也不会被选举为 Leader,Observer 的目的是为了扩展系统,提高读取速度
一个 ZooKeeper 集群中同一时间只有一个 Leader,其他的都是 Follower 或 Observer
一、Leader 的工作流程
Leader 的主要功能有三个:
- 恢复数据
- 维持与 Learner(Follower 和 Observer) 的心跳,接收 Learner 的请求并判断 Learner 的请求消息类型
Learner 的消息类型:
- PING 消息:Leaner 的心跳信息
- REQUEST 消息:Follower 发送的提议信息,包括读写请求
- ACK 消息:Follower 对提议的回复,超过半数的 Follower 通过,则 Commit 该提议
- REVALIDATE 消息:用来延长 SESSION 有效时间
- 根据不同的消息类型,进行不同的处理
二、Follower 的工作流程
Follower 的主要功能有四个:
- 向 Leader 发送请求(PING 消息、REQUEST 消息、ACK 消息、REVALIDATE 消息)
- 接收 Leader 消息并进行处理
- 接收 Client 的请求,如果为写请求,则转发给 Leader
- 返回 Client 结果
Follower 循环处理如下几种来自 Leader 的消息:
- PING 消息:心跳消息
- PROPOSAL 消息:Leader 发起的提案,要求 Follower 投票
- COMMIT 消息:服务器端最新一次提案的信息
- UPTODATE 消息:表明此 Follower 同步已完成
- REVALDATA 消息:根据 Leader 的 REVALDATE 结果,确定关闭等待 revalidate 的 session 还是允许其接收消息
- SYNC 消息:返回 SYNC 结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新
三、Observer 的工作流程
Observer 的工作流程和 Follower 的唯一不同就是 Observer 不会参加 Leader 发起的投票,也不会被选举为 Leader,此处不再赘述。