ZooKeeper 基础知识总结

ZooKeeper 知识总结

1. 什么是 ZooKeeper?

ZooKeeper 是一个开源的分布式协调服务,由Apache软件基金会开发和维护。它提供了一个简单而健壮的分布式协调系统,用于构建分布式应用和服务。
ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 Zookeeper顾名思义就是动物园管理员。 因为Hadoop生态各个项目都是动物得图标。 所以很符合管理员得形象。

2. ZooKeeper 的特性

2.1 一致性

ZooKeeper 提供了强一致性的数据模型,确保分布式系统中的所有节点都能够看到相同的数据。

2.2 主从架构

ZooKeeper 使用主从架构,其中一个节点是主节点,负责处理客户端请求,而其他节点是从节点,用于备份主节点的数据。

2.3 数据节点

ZooKeeper 组织数据以树形结构的形式存在,类似文件系统的目录结构。每个节点称为“znode”,可以存储数据和元信息。在ZooKeeper中节点分为两类 :

第一类同样是指构成集群的机器,我们称之为机器节点
第二类则是指数据模型中的数据单元,我们称之为数据节点——ZNode。
ZooKeeper将所有数据存储在内存中,数据模型是一棵树。

2.4 顺序一致性

ZooKeeper 提供了顺序一致性的特性,即客户端发出的更新请求会按照它们的顺序被应用到 ZooKeeper 中。

2.5 临时节点

ZooKeeper 支持创建临时节点,这些节点在客户端断开连接后会被自动删除,适用于一些短暂的任务。

2.6 监听器机制

ZooKeeper 提供了监听器机制,允许客户端注册对 znode 数据变化的监听器,从而及时感知分布式环境中的变化。

2.7ACL权限控制

  • CREATE:创建子节点的权限
  • READ:获取节点数据和子节点列表的权限
  • WRITE:更新节点数据的权限
  • DELETE:删除子节点的权限
  • ADMIN:设置节点ACL的权限

注意: create和delete这两种权限都是针对子节点的权限控制。

3. ZooKeeper 的应用场景

3.1 分布式锁

ZooKeeper 可以用于实现分布式锁,确保在多个节点上对共享资源的互斥访问。实现步骤如下:
1. 创建一个目录mylock;
2. 线程A想获取锁就在mylock目录下创建临时顺序节点;
3. 获取mylock目录下所有的子节点,然后获取比自己小的兄弟节点,如果不存在,则说明当前线程顺序号最小,获得锁;
4. 线程B获取所有节点,判断自己不是最小节点,设置监听比自己小的节点;
5. 线程A处理完,删除自己的节点,线程B监听到变更事件,判断自己是不是最小的节点,如果是则获得锁。

3.2 配置管理

ZooKeeper 可以作为配置中心,集中管理分布式系统的配置信息,实现动态配置更新。

3.3 选主机制

ZooKeeper 的主从架构可以用于实现选主机制,确保在分布式系统中只有一个节点充当主节点。
核心原则:

  • Zookeeper集群中只有超过半数以上的服务器启动,集群才能正常工作;
  • 在集群正常工作之前,myid小的服务器给myid大的服务器投票,直到集群正常工作,选出Leader;
  • 半数机制;

选举流程:

  • 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息, 服务器1的状态一直属于Looking(选举状态)。
  • 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
  • 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。
  • 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。
  • 服务器5启动,后面的逻辑同服务器4成为小弟。

3.4 分布式队列

ZooKeeper 可以用于构建分布式队列,实现任务的排队和分发。

4. ZooKeeper 的基本操作

4.1 连接 ZooKeeper

使用 ZooKeeper 客户端库连接到 ZooKeeper 服务器:

ZooKeeper zk = new ZooKeeper("localhost:2181", 3000, watcher);

4.2 创建 znode

zk.create("/path", data, acl, createMode);

4.3 读取 znode 数据

byte[] data = zk.getData(“/path”, watcher, stat);

4.4 更新 znode 数据

zk.setData("/path", newData, version);

4.5 删除 znode

zk.delete("/path", version);

5. ZooKeeper 的实现原理

ZooKeeper 的实现原理基于**Zab(ZooKeeper Atomic Broadcast)**协议,该协议确保了一致性和可靠性。

5.1 Zab 协议

Zab 协议定义了如何在 ZooKeeper 集群中保持一致性,它包含两种模式:领导者选举和广播。

5.2 选主机制

ZooKeeper 使用 Zab 协议实现了选主机制,确保集群中只有一个节点充当主节点。

5.3 事务处理

Zab 协议保证了事务的顺序一致性,即事务按照它们的提交顺序被应用到 ZooKeeper 中。

6. ZooKeeper 的部署和集群搭建

6.1 单机部署

可以通过下载 ZooKeeper 的二进制包,简单配置后即可在单机上运行。

6.2 集群搭建

在生产环境中,为了提高可用性,通常会部署 ZooKeeper 集群。集群中的每个节点都运行 ZooKeeper 服务,并通过配置文件中的参数进行连接和同步。

7. 性能调优和监控

7.1 性能调优

通过调整 ZooKeeper 的参数,如会话超时、最小同步延迟等,可以优化性能。

7.2 监控

ZooKeeper 提供了一些内置的监控工具,如四字命令(stat、mntr等),也可以使用 JMX 监控。

8. 安全性配置

ZooKeeper 支持访问控制列表(ACL)来限制对 znode 的访问,确保数据的安全性。

9. 适用场景和注意事项

9.1 适用场景

需要分布式锁的场景。
配置中心的实现。
选主机制的应用。
分布式队列的构建。

9.2 注意事项

ZooKeeper 的集群规模要谨慎选择,不宜过大。
在配置中要注意调整合适的超时和同步参数。
合理设置 ACL,保障数据的访问安全性。

10. 总结

ZooKeeper 是一个强大的分布式协调服务,广泛应用于分布式系统中。深入理解 ZooKeeper 的原理、操作和部署,对于构建稳定、可靠的分布式应用具有重要的意义。本博客简要介绍了 ZooKeeper 的基本概念、特性、应用场景以及实现
以上就是全部内容,如果你有任何问题、意见或建议,都欢迎在评论中分享。让我们继续分享知识,共同成长,一起走向更加美好的未来。感谢你们的阅读,祝愿你们在未来的道路上一帆风顺!

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值