`

zookeeper学习(三)

阅读更多

      我想了想,还是决定将那篇讲ZAB协议的文章转载过来,ZK中提交事务采用的就是ZAB协议。

      转自:http://blog.csdn.net/m_vptr/article/details/9325405

建议还是看原文,我转载到这里利于我查看。向原作者致敬。

ps:个人感觉原博客的一张图画错了,就是那张Leader和Follower的通信图。个人感觉Commit应该是从Leader指向Follower的。

 

******************************原文如下************************************

      ZooKeeper内部有一个in-memory DB,表示为一个树形结构。每个树节点称为Znode(相关的代码在DataTree.java和DataNode.java中)

 

客户端可以连接到zookeeper集群中的任意一台。

 

      对于读请求,直接返回本地znode数据。写操作则转换为一个事务,并转发到集群的Leader处理。Zookeeper提交事务保证写操作(更新)对于zookeeper集群所有机器都是一致的。

 

   ZooKeeper中提交事务的协议并不是Paxos,而是由二阶段提交协议改编的ZAB协议。

 

Zab可以满足以下特性

   Reliable delivery:如果消息m被一个server递交(commit)了,那么m也将最终被所有server递交。

   Total order:如果server在递交b之前递交了a,那么所有递交了a、b的server也会在递交b之前递交a。

   Casual order:对于两个递交了的消息a、b,如果a因果关系优先于(causally precedes)b,那么a将在b之前递交。

 

   第三条的因果优先指的是同一个发送者发送的两个消息a先于b发送,或者上一个leader发送的消息a先于当前leader发送的消息。

  

   Zab协议中Server有两个模式:broadcast模式、recovery模式(Leader宕机或follower不构成quorum)

 

   Leader在开始broadcast之前,必须有一个同步更新过的follower的quorum(多数派)。 

   Server在Leader服务期间恢复在线时,将进入recovery模式,与Leader进行同步。

 
   Broadcast模式使用二阶段提交,但是简化了协议,不需要abort。follower要么ack,要么抛弃Leader,因为zookeeper保证了每次只有一个Leader。另外也不需要等待所有Server的ACK,只需要一个quorum应答就可以了。
 

 

 

   Follower收到proposal后,写到磁盘(尽可能批处理),返回ACK。

   Leader收到大多数ACK后,广播COMMIT消息,自己也deliver该消息。

   Follower收到COMMIT之后,deliver该消息

 

   然而,这个简化的二阶段提交不能处理Leader失效的情况,所以增加了recovery模式。切换Leader时,需要解决下面两个问题。

 

Never forget delivered messages

   Leader在COMMIT投递到任何一台follower之前宕机,只有它自己commit了。新Leader必须保证这个事务也必须commit。

 

Let go of messages that are skipped

   Leader产生某个proposal,但是在宕机之前,没有follower看到这个proposal。该server恢复时,必须丢弃这个proposal。

 

   新Leader在propose新消息之前,必须保证事务日志中的所有消息都proposed并且committed。

    为了保证follower看到有proposal,以及递交的消息,Leader向follower发送follower没有见过的PROPOSAL,以及最后提交的消息的编号之前的COMMIT。

 

   因为Proposal是保存在follower的事务日志中,并且顺序有保证,因此COMMIT的顺序也是确定的。解决的第一个问题。

 

   上个没有把proposal发送出去的Leader重启后,新Leader将告诉它截断事务日志,一直截断到follower的epoch对应的最后一个commit位置。

 

 

   关于ZAB的详细证明可以参考Zab - High-performance broadcast for primary-backup systems

分享到:
评论

相关推荐

    Zookeeper学习笔记.pdf

    Zookeeper是一种重要的分布式协调服务,尤其在处理高可用性、高性能的应用场景中。它最初设计的核心功能是提供分布式锁服务,但随着社区的发展,Zookeeper的功能得到了扩展,现在还用于配置维护、组服务、分布式消息...

    zookeeper学习之三(Curator客户端)

    在IT行业中,ZooKeeper是一个广泛使用的分布式协调服务,它为分布式应用提供了高效且可靠的命名服务、配置管理、集群同步等。本篇文章将专注于ZooKeeper的客户端——Curator,这是一个由Apache提供的Java库,旨在...

    zookeeper 学习资料 中篇

    《Zookeeper学习资料 中篇》 Zookeeper,作为Apache Hadoop的一个子项目,是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作...

    zookeeper学习笔记

    #### 三、Zookeeper 基本操作 Zookeeper 提供了一系列命令行工具,用于进行节点管理。 1. **节点创建** - `create [-s] [-e] path acl` - `path` 表示节点路径。 - `acl` 定义节点的访问控制列表。 - 参数 `-s...

    Zookeeper学习中的疑难问题总结,很受用!

    ### Zookeeper 学习中的疑难问题总结 #### 一、Zookeeper 概念与特性 Zookeeper 是一个分布式的、开放源码的应用程序协调服务,它最初是 Google 的 Chubby 项目的开源版本。Zookeeper 在分布式系统中扮演了一个至...

    netty-redis-zookeeper高并发实战学习-netty-redis-zookeeper.zip

    在IT行业中,Netty、Redis和ZooKeeper是三个非常重要的技术组件,它们分别在不同的领域发挥着关键作用。Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。Redis则是...

    zookeeper 系列整理总结

    在第三部分中,我们学习了ZooKeeper的安装步骤,包括单机模式、集群模式和集群伪分布模式。单机模式适合初学者进行测试和学习,而集群模式则提供了高可用性和容错能力。 ZooKeeper的配置部分(系列之四)通常涉及...

    zookeeper学习入门-搞懂这些就够了

    ### Zookeeper 学习入门知识点 #### 一、Zookeeper 概述与核心价值 - **定义**: Zookeeper 是一个高度可靠的关键值存储系统,它主要用于解决分布式环境中的一致性问题,例如配置管理、命名服务、分布式同步以及...

    zookeeper学习文档

    Zookeeper学习文档中包含了大量关于Zookeeper分布式协调服务的关键知识点。Zookeeper是一个开源的分布式服务协调框架,最初是为了管理分布式应用而设计的。它被广泛用于实现诸如同步、配置管理、分组和命名服务等...

    zookeeper客户端 图形化界面

    三、常用的Zookeeper图形化工具 1. ZooInspector:Zookeeper自带的一个简单图形化工具,用于查看Zookeeper的数据树和配置信息。 2. ZKBrowser:一款开源的Zookeeper管理工具,提供了更丰富的功能,如集群监控、节点...

    apache-zookeeper-3.8.4-bin.tar

    1. **独立模式(Standalone)**:单个Zookeeper Server运行,适用于测试和学习,不适合生产环境。 2. **集群模式(Cluster)**:多个Zookeeper Server组成集群,提供高可用性和容错性。 3. **镜像模式(Mirror)**...

    zookeeper 入门学习(PPT)

    这意味着至少需要三个服务器才能构成一个有效的Zookeeper集群。 #### 五、Zookeeper 配置文件详解 配置文件对于Zookeeper的正确运行至关重要,主要包括以下几个关键参数: - `tickTime`:定义了每个时间单位(tick...

    华为-微服务服务中心-zookeeper-课程学习

    在微服务架构中,服务注册与发现是一种重要的机制,允许服务之间动态...华为微服务服务中心提供的课程学习材料,正是帮助IT专业人士深入理解和应用Zookeeper这一重要组件,以更好地服务于现代分布式应用的开发和维护。

    zookeeper-3.4.8

    三、Zookeeper在实际应用中的关键知识点 1. **安装部署**:包括单机模式、伪集群模式和集群模式的搭建,以及配置文件详解,如`zoo.cfg`。 2. **命令操作**:学习使用`zkCli.sh`客户端进行ZNode的创建、删除、更新...

    zookeeper入门练习demo

    **Zookeeper入门练习Demo** Zookeeper是一个分布式协调服务,由Apache Hadoop...这将为后续深入学习和应用Zookeeper打下坚实的基础。在实践中遇到问题,不要忘记查阅官方文档和社区资源,它们会提供详细的解答和指导。

    从Paxos到Zookeeper分布式一致性原理与实践 + ZooKeeper-分布式过程协同技术详解 pdf

    它包括提案者(Proposer)、接受者(Acceptor)和学习者(Learner)三个角色,通过一系列消息交互达成一致。Paxos算法的复杂性和理解难度较高,但其设计理念对后来的分布式一致性协议产生了深远影响。 接着,...

    zookeeper教程资料.zip

    三、Zookeeper的应用场景 1. HBase:HBase依赖Zookeeper进行元数据管理,如RegionServer的注册和监控,以及Region的分配和迁移。 2. Kafka:Kafka利用Zookeeper进行Broker的注册与发现,以及Partition的分配。 3....

    2021尚硅谷技术之Zookeeper笔记

    ZooKeeper集群通常由三个或五个节点组成,以确保高可用性和容错性。配置文件中需要指定集群中的所有节点地址,并通过选举算法确定领导者节点。每个节点都需要启动ZooKeeper服务,节点间通过 zab 协议进行通信和数据...

    zookeeper测试例子.rar

    【标题】:“Zookeeper...通过以上分析,我们可以看出这个压缩包包含了对Zookeeper的实践操作,特别是针对Windows环境下的应用,以及在学习过程中的代码测试案例,对于学习和掌握Zookeeper的使用具有很高的参考价值。

    zookeeper-3.4.8源码包

    《深入剖析Zookeeper 3.4.8源码》 Zookeeper作为一个分布式协调服务,是Apache Hadoop项目的重要组成部分,广泛应用于...通过学习源码,开发者可以更好地利用Zookeeper解决实际问题,并为未来的系统设计提供灵感。

Global site tag (gtag.js) - Google Analytics