Zookeeper 集群中有哪些角色?

1 个回答

  • 美啦美啦美啦
    不要在赚钱的路上把健康丢了,要在健康的路上顺便把钱赚了。
    在 Zookeeper 集群中,节点有不同的角色,各自承担不同的职责。主要有以下三种角色: 1. **Leader(领导者)** 2. **Follower(跟随者)** 3. **Observer(观察者)** 其中,Follower 和 Observer 归类为 Learner(学习者)。 #### 1. Leader(领导者) **角色描述**: - Leader 是集群中的唯一节点,可以称为老大 No.1,是 Zookeeper 集群的中心,负责协调集群中的其他节点。 **职责**: - 接收并处理客户端的读写请求。 - 将写请求转发给所有的 Follower,并统计 Follower 写入成功的数量。 - 当超过半数的 Follower 写入成功后,Leader 会提交该写请求,并通知所有 Follower 执行 commit 操作,保证写操作不会丢失。 - 进行集群数据同步,在 ZAB 协议的崩溃恢复之后,消息广播之前,进行集群中的数据同步。 - 维持与 Learner 的心跳连接,接收 Learner 请求消息,并根据不同消息类型进行处理。 **处理的消息类型**: - PING 消息:Learner 的心跳信息。 - REQUEST 消息:Follower 发送的提议信息,包括写请求及同步请求。 - ACK 消息:Follower 对提议的回复,超过半数的 Follower 通过,则 commit 该提议。 - REVALIDATE 消息:用来延长 SESSION 有效时间。 **Leader 的工作流程**: 1. 启动并成为 Leader 后,进行数据同步。 2. 接收客户端的写请求,转发给 Follower。 3. 收集 Follower 的 ACK,超过半数后,提交请求。 4. 维持心跳连接,处理 Learner 的各种消息。 #### 2. Follower(跟随者) **角色描述**: - Follower 是集群中的多个节点,主要作用是跟随 Leader 的指示。 **职责**: - 与 Leader 保持心跳连接。 - 当 Leader 挂了时,参与 Leader 的选举,通过投票决定新的 Leader。 - 向 Leader 发送请求(如 PING 请求、REQUEST 消息、ACK 请求、REVALIDATE 消息)。 - 处理 Leader 发来的消息与请求。 - 接收客户端请求,如果是写请求,转发给 Leader 进行处理。 **处理的消息类型**: - UPTODATE 消息:表示同步完成。 - REVALIDATE 消息:根据 Leader 的 REVALIDATE 结果,决定关闭待 revalidate 的 session 还是允许其接收消息。 - SYNC 消息:返回 SYNC 结果到客户端,用于强制获取最新的数据更新。 **Follower 的工作流程**: 1. 启动并成为 Follower 后,与 Leader 保持心跳连接。 2. 接收并处理客户端的读请求,转发写请求给 Leader。 3. 参与 Leader 的选举,当 Leader 挂了时,通过投票决定新的 Leader。 4. 接收 Leader 的指示,处理各种消息。 #### 3. Observer(观察者) **角色描述**: - Observer 的作用与 Follower 相似,但不参与 Leader 选举和 Proposal 投票。 **职责**: - 提高集群的读性能,支持更多的客户端连接。 - 与 Leader 同步数据,但不参与写操作的提议过程。 - 不参与 Leader 选举,没有投票权。 **Observer 的特点**: - 只负责与 Leader 同步数据,不参与写操作的投票过程。 - 数据只加载到内存,不进行事务化到硬盘。 ### 角色总结 - **Leader**:负责协调和管理集群,处理读写请求,进行数据同步和心跳检测。 - **Follower**:处理客户端读请求,转发写请求,参与 Leader 选举和数据同步。 - **Observer**:提高读性能,不参与写操作的投票和 Leader 选举,只负责同步数据。 ### 集群管理图 - **Leader**:中心节点,协调集群中的其他节点。 - **Follower**:多个跟随节点,参与选举和数据同步。 - **Observer**:观察者节点,提高读性能,不参与选举和写操作。 通过这三种角色,Zookeeper 实现了高可用、高性能的分布式协调服务。
    发布于 2024-08-05 13:57 •IP属地 湖南
    举报
    评论
    收藏1