- Zookeeper 教程
- Zookeeper – 首页
- Zookeeper – 概述
- Zookeeper - 基础知识
- Zookeeper – 工作流程
- Zookeeper – 领导者选举
- Zookeeper – 安装
- Zookeeper – 命令行界面
- Zookeeper – API
- Zookeeper – 应用
- Zookeeper 有用资源
- Zookeeper – 快速指南
- Zookeeper – 有用资源
- Zookeeper – 讨论
Zookeeper - 工作流程
一旦 ZooKeeper 集群启动,它将等待客户端连接。客户端将连接到 ZooKeeper 集群中的一个节点。它可能是一个领导者节点或一个跟随者节点。一旦客户端连接,节点会为该特定客户端分配一个会话 ID 并向客户端发送确认。如果客户端没有收到确认,它会简单地尝试连接 ZooKeeper 集群中的另一个节点。一旦连接到一个节点,客户端将定期向该节点发送心跳,以确保连接不会丢失。
如果客户端想要读取特定的 znode,它会向节点发送一个读取请求,其中包含 znode 路径,节点通过从自己的数据库中获取请求的 znode 来返回该 znode。因此,ZooKeeper 集群中的读取速度很快。
如果客户端想要将数据存储在 ZooKeeper 集群中,它会将 znode 路径和数据发送到服务器。连接的服务器会将请求转发到领导者,然后领导者会将写入请求重新发布到所有跟随者。只有当大多数节点成功响应时,写入请求才会成功,并且会向客户端发送成功的返回码。否则,写入请求将失败。节点的严格多数称为Quorum(仲裁)。
ZooKeeper 集群中的节点
让我们分析在 ZooKeeper 集群中具有不同节点数量的影响。
如果我们有单个节点,那么当该节点发生故障时,ZooKeeper 集群就会失败。这会导致“单点故障”,因此不建议在生产环境中使用。
如果我们有两个节点并且一个节点发生故障,我们也没有多数,因为两个节点中只有一个不是多数。
如果我们有三个节点并且一个节点发生故障,我们有多数,因此这是最低要求。ZooKeeper 集群在活动生产环境中至少需要三个节点。
如果我们有四个节点并且两个节点发生故障,它也会再次失败,这类似于拥有三个节点。额外的节点没有任何作用,因此最好以奇数添加节点,例如 3、5、7。
我们知道在 ZooKeeper 集群中,写入过程比读取过程开销更大,因为所有节点都需要将其数据库中的数据写入相同的数据。因此,为了获得平衡的环境,最好拥有较少的节点(3、5 或 7),而不是拥有大量的节点。
下图描绘了 ZooKeeper 工作流程,随后的表格解释了其不同的组件。
组件 | 描述 |
---|---|
写入 | 写入过程由领导者节点处理。领导者将写入请求转发到所有 znode 并等待来自 znode 的响应。如果一半的 znode 回复,则写入过程完成。 |
读取 | 读取由特定的连接 znode 在内部执行,因此无需与集群交互。 |
复制数据库 | 它用于在 zookeeper 中存储数据。每个 znode 都有自己的数据库,并且每个 znode 在任何时候都拥有相同的数据,这得益于一致性。 |
领导者 | 领导者是负责处理写入请求的 Znode。 |
跟随者 | 跟随者接收来自客户端的写入请求并将其转发到领导者 znode。 |
请求处理器 | 仅存在于领导者节点中。它管理来自跟随者节点的写入请求。 |
原子广播 | 负责将更改从领导者节点广播到跟随者节点。 |