ZooKeeper教程
什么是分布式系统?
分布式应用程序是一种可以在网络中的多个系统上运行的应用程序。它通过相互协调同时运行,以完成某个特定任务。这些任务如果由任何非分布式应用程序来完成,可能会花费数小时。
什么是Zookeeper?
Apache Zookeeper 是一个开源的分布式协调服务,有助于管理大量主机。在分布式环境中进行管理和协调非常棘手。Zookeeper 自动化了这一过程,让开发人员可以专注于构建软件功能,而不用担心其分布式特性。
Zookeeper 帮助您为分布式应用程序维护配置信息、命名和组服务。它在集群上实现了不同的协议,这样应用程序就不必自己实现。它提供了对多台机器的单一一致视图。
为什么选择 Apache Zookeeper?
以下是 Zookeeper 广受欢迎的重要原因
- 它允许服务器进程之间的互斥和协作
- 它确保您的应用程序运行一致。
- 事务过程永远不会部分完成。它的状态要么是成功,要么是失败。分布式状态可能会被挂起,但永远不会出错。
- 无论客户端连接到哪个服务器,它都能看到相同的服务视图。
- 帮助您根据特定的规则集对数据进行编码。
- 它有助于维护一个类似于文件和目录的标准层级命名空间。
- 计算机作为单一系统运行,这些计算机可以在本地或地理上连接。
- 它允许节点实时加入/离开集群以及查看节点状态。
- 您可以通过部署更多机器来提高性能。
- 它允许您选举一个节点作为领导者,以实现更好的协调。
- 当数据读取比写入更常见时,ZooKeeper 在这种工作负载下运行得很快。
ZooKeeper 架构:它是如何工作的?
以下是关于 Apache Zookeeper 架构的简要说明。
- Zookeeper 遵循客户端-服务器架构
- 所有系统都存储一份数据副本
- 领导者在启动时被选举出来
服务器:当任何客户端连接时,服务器会发送一个确认。如果在连接的服务器没有响应的情况下,客户端会自动将消息重定向到另一个服务器。
客户端:客户端是分布式应用程序集群中的一个节点。它帮助您从服务器访问信息。每个客户端会定期向服务器发送消息,这有助于服务器知道该客户端是活动的。
领导者:其中一台服务器被指定为领导者。它向客户端提供所有信息以及服务器活动的确认。如果任何连接的节点发生故障,它会执行自动恢复。
跟随者:遵循领导者指令的服务器节点称为跟随者。
- 客户端的读请求由相应连接的 Zookeeper 服务器处理。
- 客户端的写请求由 Zookeeper 领导者处理。
集合/集群:一组 Zookeeper 服务器被称为一个集合或一个集群。当您运行 Apache 时,您可以在集群模式下使用 ZooKeeper 基础设施,以使系统处于最佳值。
ZooKeeper WebUI:如果您想使用 ZooKeeper 进行资源管理,则需要使用 WebUI。它允许您通过 Web 用户界面与 ZooKeeper 交互,而不是使用命令行。它提供了与 ZooKeeper 应用程序快速有效的通信。
Zookeeper 数据模型 (ZDM)
现在,在这个 ZooKeeper 教程中,让我们来了解一下 Zookeeper 数据模型。下图解释了 Apache Zookeeper 数据模型。
- Zookeeper 数据模型遵循一个层级命名空间,其中每个节点被称为一个 ZNode。一个节点是运行集群的系统。
- 每个 ZNode 都有数据。它可能有也可能没有子节点。
- ZNode 路径
- 规范的、斜杠分隔的绝对路径
- 不使用任何相对引用
- 名称可以包含 Unicode 字符
- ZNode 维护一个 stat 结构和用于数据更改的版本号。
Zookeeper 节点的类型
Znode 有三种类型
持久性 znode:即使创建该特定 znode 的客户端断开连接后,这种类型的 znode 仍然存在。默认情况下,在 zookeeper 中,如果没有特别指定,所有节点都是持久性的。
临时性 znode:这种类型的 zookeeper znode 仅在客户端活动时存在。因此,当客户端与 zookeeper 断开连接时,它也会被删除。此外,临时节点不允许有子节点。
顺序性 znode:顺序性 znode 可以是临时的也可以是持久的。所以当一个新的 znode 被创建为顺序性 znode 时,您可以通过在原始名称后附加一个10位的序列号来指定 znode 的路径。
ZDM - 监视 (Watches)
Zookeeper 中,一个 watch 事件是一次性的触发器,发送给设置了 watch 的客户端。当该 watch 的数据发生变化时,它就会发生。ZDM watch 允许客户端在 znode 变化时收到通知。ZDM 的读操作,如 getData()、getChidleren()、exist() 都有设置 watch 的选项。
Watches 是有序的,watch 事件的顺序与更新的顺序相对应。客户端将会在看到与该 znode 对应的新数据之前,先看到该 znode 的 watch 事件。
ZDM - 访问控制列表
Zookeeper 使用 ACL 来控制对其 znode 的访问。ACL 由一对(方案: id, 权限)组成。
内置 ACL 方案
world:有一个单一的 id,anyone
auth:不使用任何 id,它代表任何经过身份验证的用户
digest:使用 用户名:密码
host:允许您使用客户端的主机名作为 ACL id 标识
IP:使用客户端主机的 IP 地址作为 ACL id 标识
ACL 权限
- CREATE
- READ
- WRITE
- DELETE
- ADMIN
例如: (IP: 192.168.0.0/16, READ)
ZKS – 会话状态和生命周期
- 在执行任何请求之前,客户端必须与服务建立一个会话。
- 客户端发送给服务的所有操作都自动与一个会话相关联。
- 客户端可以连接到集群中的任何服务器。但它只会连接到单个服务器。
- 会话提供“顺序保证”。会话中的请求按 FIFO(先进先出)顺序执行。
- 会话的主要状态有:1) 连接中 (Connecting), 2) 已连接 (Connected) 3) 已关闭 (Closed) 4) 未连接 (Not Connected)。
如何安装 ZooKeeper
第一步) 点击“继续订阅”
访问此链接并点击“继续订阅”
第二步) 接受条款和条件
在下一页,接受许可协议
第三步) 显示感谢信息
您将看到以下信息
第四步) 点击“继续配置”
5分钟后刷新页面,然后继续配置
第五步) 点击“继续启动”
在下一个屏幕中,启动 ZooKeeper
第六步) 恭喜!
您已完成!
Apache ZooKeeper 应用
Apache Zookeeper 用于以下目的
- 管理配置
- 命名服务
- 选择领导者
- 消息排队
- 管理通知系统
- 同步
- 分布式集群管理
使用 Zookeeper 的公司
- Yahoo
- eBay
- Netflix
- Zynga
- Nutanix
使用 Zookeeper 的缺点
- 如果添加新的 Zookeeper 服务器,可能会发生数据丢失。
- 不允许用户迁移
- 不支持机架放置和感知
- Zookeeper 不允许您减少 pod 的数量以防止意外数据丢失。
- 当服务部署在虚拟网络上时,不进行完全重新安装就无法将服务切换到主机网络。
- 一旦初始部署完成,服务不支持更改卷需求。
- 由于涉及大量节点,可能会有多个故障点。
- 消息可能在通信网络中丢失,需要特殊的软件才能再次恢复。
摘要
- 分布式应用程序是一种可以在网络中的多个系统上运行的应用程序。
- Apache Zookeeper 是一个开源的分布式协调服务,可以帮助您管理大量主机。
- 它允许服务器进程之间的互斥和协作
- 服务器、客户端、领导者、跟随者、集合/集群、ZooKeeper WebUI 是重要的 zookeeper 组件。
- Znodes 的三种类型是持久性、临时性和顺序性。
- ZDM watch 是一个一次性的触发器,发送给设置了 watch 的客户端。当该 watch 的数据发生变化时,它就会发生。
- Zookeeper Hadoop 使用 ACL 来控制对其 znode 的访问。
- 管理配置、命名服务、选择领导者、消息排队、管理通知系统、同步、分布式集群管理等。
- Yahoo、Facebook、eBay、Twitter、Netflix 是一些使用 zookeeper 的知名公司。
- 该工具的主要缺点是,如果添加新的 Zookeeper 服务器,可能会发生数据丢失。