| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 分布式系统必学之Zookeeper -> 正文阅读 |
|
[大数据]分布式系统必学之Zookeeper |
10. Zookeeper篇文章目录Zookeeper集群:一个领导者(Leader),多个跟随者(Follower)组成的集群。 他的目标是可以提供高性能、高可用和顺序访问控制的能力,同时也是为了解决分布式环境下数据一致性的问题。 ![]() 10.1 Zookeeper介绍10.1.1 集群首先,Zookeeper集群中有几个关键的概念,Leader、Follower和Observer,Zookeeper中通常只有Leader节点可以写入,Follower和Observer都只是负责读,但是Follower会参与节点的选举和过半写成功,Observer则不会,他只是单纯的提供读取数据的功能。 通常这样设置的话,是为了避免太多的从节点参与过半写的过程,导致影响性能,这样Zookeeper只要使用一个几台机器的小集群就可以实现高性能了,如果要横向扩展的话,只需要增加Observer节点即可。 Zookeeper建议集群节点个数为奇数,只要超过一半的机器能够正常提供服务,那么整个集群都是可用的状态。 10.1.2 数据节点ZnodeZookeeper中数据存储于内存之中,这个数据节点就叫做Znode,他是一个树形结构,比如/a/b/c类似。 而Znode又分为持久节点、临时节点、顺序节点三大类。 持久节点是指只要被创建,除非主动移除,否则都应该一直保存在Zookeeper中。 临时节点不同的是,他的生命周期和客户端Session会话一样,会话失效,那么临时节点就会被移除。 还有就是临时顺序节点和持久顺序节点,除了基本的特性之外,子节点的名称还具有有序性。 10.1.3 会话Session会话自然就是指Zookeeper客户端和服务端之间的通信,他们使用TCP长连接的方式保持通信,通常,肯定会有心跳检测的机制,同时他可以接受来自服务器的Watch事件通知。 10.1.4 事件监听器Wather用户可以在指定的节点上注册Wather,这样在事件触发的时候,客户端就会收到来自服务端的通知。 10.1.5 权限控制ACLZookeeper使用ACL来进行权限的控制,包含以下5种:
所以,Zookeeper通过集群的方式来做到高可用,通过内存数据节点Znode来达到高性能,但是存储的数据量不能太大,通常适用于读多写少的场景。 10.2 Zookeeper的应用场景
10.3 Zookeeper的选举机制半数机制(paxos协议) 10.3.1 内部选举步骤(Zab 的四个阶段)1. 选举阶段 Leader election 节点在一开始都处于选举节点,只要有一个节点得到超过半数节点的票数,它就可以当选准 Leader,只有到达第三个阶段(也就是同步阶段),这个准 Leader 才会成为真正的 Leader。 2. 发现阶段 Discovery 3. 同步阶段 Synchronization 4、广播阶段(Broadcast) 10.4 Zookeeper的写数据流程预提交过程
10.5 Zookeeper监听器原理
10.6 ZAB协议Zab协议是为分布式协调服务Zookeeper专门设计的一种 支持崩溃恢复 的 原子广播协议,Zab协议要求每个 Leader 都要经历三个阶段:发现,同步,广播。 作用
Zab协议内容 (崩溃恢复 和 消息广播) 通过 Zab 协议(原子广播协议)来保证分布式事务的最终一致性。 在 ZooKeeper 集群中,所有客户端的请求都是写入到 Leader 进程中的,然后,由 Leader 同步到其他节点,称为 Follower。在集群数据同步的过程中,如果出现 Follower 节点崩溃或者 Leader 进程崩溃时,都会通过 Zab 协议来保证数据一致性。 消息广播
崩溃恢复 Zab 协议崩溃恢复要求满足以下两个要求:
leader选举
数据恢复
10.7 Zookeeper 节点宕机如何处理?Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。Zookeeper 自身也要保证当一个节点宕机时,其他节点会继续提供服务。如果是一个 Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上的数据是有多个副本的,数据并不会丢失;如果是一个 Leader 宕机,Zookeeper 会选举出新的 Leader。ZK 集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在 ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。 10.8 如何实现分布式一致性利用ZAB协议保证分布式的一致性,然后通过ZAB展开说明zookeeper的选举机制、崩溃恢复机制、数据恢复机制等。 10.9 有可能会出现数据不一致的问题吗?还是会存在的,我们可以分成3个场景来描述这个问题。 1. 查询不一致 因为Zookeeper是过半成功即代表成功,假设我们有5个节点,如果123节点写入成功,如果这时候请求访问到4或者5节点,那么有可能读取不到数据,因为可能数据还没有同步到4、5节点中,也可以认为这算是数据不一致的问题。 解决方案可以在读取前使用sync命令。 2. leader未发送proposal宕机 这也就是数据同步说过的问题。 leader刚生成一个proposal,还没有来得及发送出去,此时leader宕机,重新选举之后作为follower,但是新的leader没有这个proposal。 这种场景下的日志将会被丢弃。 3. leader发送proposal成功,发送commit前宕机 如果发送proposal成功了,但是在将要发送commit命令前宕机了,如果重新进行选举,还是会选择zxid最大的节点作为leader,因此,这个日志并不会被丢弃,会在选举出leader之后重新同步到其他节点当中。 10.10 如何理解CAP理论?CAP是一个分布式系统设计的定理,他包含3个部分,并且最多只能同时满足其中两个。
为什么只能同时满足CAP中的两个呢? 以A\B两个节点同步数据举例,由于P的存在,那么可能AB同步数据出现问题。 如果选择AP,由于A的数据未能正确同步到B,所以AB数据不一致,无法满足C。 如果选择CP,那么B就不能提供服务,就无法满足A。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/22 3:23:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |