zookeeper4==zookeeper源码阅读,FOLLOWER收到了需要LEADER执行的命令后各节点会执行什么

这篇具有很好参考价值的文章主要介绍了zookeeper4==zookeeper源码阅读,FOLLOWER收到了需要LEADER执行的命令后各节点会执行什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上面已经阅读并观察了节点确定自己的身份后会做些什么,大致就是比对双方信息然后完成同步。

本篇阅读,

FOLLOWER收到了需要LEADER执行的命令后,怎么同步给LEADER的,并且LEADER会执行什么操作。

源码启动zkCli用于测试

将原本的代码拷贝一份用IDEA打开后,找到org.apache.zookeeper.ZooKeeperMain#main,然后修改org.apache.zookeeper.ZooKeeperMain#run中监听控制台输入命令的代码,修改成本次需要执行的ls  /命令,或者create /test命令,然后启动ZooKeeperMain

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

后续的每次测试的流程是每次都将ZK1 ZK2 ZK3的data目录下除了myid之外的所有文件清空后(意味着从零启动集群)依次启动他们,然后修改ZKCLI的命令后启动。

总体上是ZK1的AcceptThread接受2181的连接,SelectorThread读取ZKCLI连接传过来的消息。(这里需要写个NIO的DEMO了解下NIO的用法)

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

1-zkCli.cmd连接上ZK1

1-1

zkCli连接上ZK1,ZK1的AcceptThread接住连接,ZKCLI然后向ZK1发送第一个request(Session establishment request),ZK1的SelectorThread接住request,

1-2

ZK1的FollowerRequestProcessor会让自己处理命令,并且将createSession request发送给LEADER,

org.apache.zookeeper.server.quorum.FollowerRequestProcessor#run

zks.getFollower().request(request);//需要转发给LEADER的要转发给LEADER

1-3

LEADER收到createSession request (org.apache.zookeeper.server.quorum.Learner#request  case Leader.REQUEST)后,

LADER会将该请求做成个proposal发给各个FOLLOWER,并等待他们的ACK,比如发给ZK3如下

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

1-4

ZK3收到proposal后,写入日志后给LEADER返回ACK消息

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

1-5

LEADER收到来自FOLLOWER的ACK消息后,判断是否超过半数的已经ACK,如果已经超过半数的FOLLOWER进行了ACK,就对所有FOLLOWER发出COMMIT命令

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

1-6

FOLLOWER收到来自LEADER的COMMIT命令后,进行提交,不需要再对LEADER进行ACK回复。

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

整个流程的日志体现:

ZKCLI连接上ZK1,创建连接并通知给LEADER(ZK2),LEADER通知给ZK3。整个流程在日志中体现如下:

ZK1 9279085697300接收到客户端请求需要转发给leader: sessionid:0x100008d4de80000 type:createSession cxid:0x0 zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a

ZK2 9279087048900收到了客户端转发的请求Processing request:: sessionid:0x100008d4de80000 type:createSession cxid:0x0 zxid:0x200000001

ZK2 将客户端请求封装成PROPOSAL Proposing:: sessionid:0x100008d4de80000 type:createSession cxid:0x0 zxid:0x200000001 txntype:-10 reqpath:n/a

ZK2 9279087198100往FOLLOWER1发送消息。消息类型是Leader.2
ZK2 9279087239700往FOLLOWER3发送消息。消息类型是Leader.2

ZK1 9279087377600收到了来自LEADER的消息,消息类型是2
ZK1 9279087474600收到了来自LEADER的PROPOSAL消息72058200935366656,0,8589934593,1702784374368,-10
ZK1 9279089191900 给LEADER返回ACK消息,该ACK针对的ZXID是 8589934593

ZK3 9279087412300收到了来自LEADER的消息,消息类型是2
ZK3 9279087569300收到了来自LEADER的PROPOSAL消息72058200935366656,0,8589934593,1702784374368,-10
ZK3 9279089655500 给LEADER返回ACK消息,该ACK针对的ZXID是 8589934593

ZK2 9279088663200收到了2对于Proposal的ACK2, 8589934593, sessionid:0x100008d4de80000 type:createSession cxid:0x0
ZK2 9279088831800关于该Proposal的ACK数量还不够
ZK2 9279089581300收到了1对于Proposal的ACK2, 8589934593, sessionid:0x100008d4de80000 type:createSession cxid:0x0 zxid:0x200000001 
ZK2 9279089865700关于该Proposal的ACK数量够了,开始要求commit,该Proposal的ZXID是8589934593
ZK2 9279089933300告知FOLLOWER们,可以进行COMMIT了 8589934593

ZK2 9279089997000往FOLLOWER3发送消息。消息类型是Leader.4
ZK2 9279090025600往FOLLOWER1发送消息。消息类型是Leader.4

ZK2 9279090080900收到了3对于Proposal的ACK,但是之前已经收到了超过半数的ACK了

ZK1 9279090224600收到了来自LEADER的消息,消息类型是4
ZK3 9279090135900收到了来自LEADER的消息,消息类型是4

2-zkCli.cmd连接上ZK1后执行ls /命令

zxid:0xfffffffffffffffe txntype:unknown reqpath:n/a,zookeeper,zookeeper,分布式,云原生

2-zkCli.cmd连接上ZK1后执行create /test命令

这个是1中createSession request一样的步骤,只是生成的proposal的内容变了,不是createSession而是create

总结:

如上,已经阅读了客户端连接上ZK集群中某一个节点,并执行命令,该命令要么需要发给LEADER同步给其他节点的命令,要么只需要当前节点执行。其中核心就是需要同步的命令,而这种命令的执行就是ZAB的主要内容:

客户端将请求(如果creat /test)发给某个节点,

该节点发给LEADER,

LEADER创建个PROPOSAL发给所有FOLLOWER,

FOLLOWER给LEADER返回ACK,

LEADER收到过半数的ACK后,向所有FOLLOWER发送COMMIT命令,

FOLLOWER进行COMMIT,不需要再给LEADER汇报。文章来源地址https://www.toymoban.com/news/detail-780604.html

到了这里,关于zookeeper4==zookeeper源码阅读,FOLLOWER收到了需要LEADER执行的命令后各节点会执行什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • zookeeper源码(04)leader选举流程

    在\\\"zookeeper源码(03)集群启动流程\\\"中介绍了leader选举的入口,本文将详细分析leader选举组件和流程。 quorumPeer的start阶段使用startLeaderElection()方法启动选举 LOOKING状态,投自己一票 createElectionAlgorithm - 创建选举核心组件:QuorumCnxManager(管理连接)、FastLeaderElection(选举)等 quorumPeer的

    2024年02月05日
    浏览(40)
  • 【项目实战】Kafka 集群分区的 leader 和 follower

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月12日
    浏览(40)
  • 浅谈Zookeeper集群选举Leader节点源码

    写在前面: zookeeper源码比较复杂,本文讲解的重点为各个zookeeper服务节点之间的state选举。至于各个节点之间的数据同步,不在文本的侧重讲解范围内。 在没有对zookeeper组件有一个整体架构认识的基础上,不建议直接死磕细节。本文写作的目的也是基于此,阅读本文,希望读

    2024年02月07日
    浏览(44)
  • 分布式 - 消息队列Kafka:Kafka 副本|AR|ISR|OSR|Leader|Follower|HW|LEO

    01. Kafka 复制 1. kafka 副本的分类 Kafka经常被描述成“一个分布式、分区、可复制的提交日志服务”。复制之所以这么重要,是因为它可以在个别节点失效时仍能保证Kafka的可用性和持久性。Kafka的数据保存在主题中,每个主题被分成若干个分区,每个分区可以有多个副本。副本

    2024年02月09日
    浏览(45)
  • zookeeper1==zookeeper源码阅读,源码启动ZK集群

    下载源码 Tags · apache/zookeeper · GitHub https://codeload.github.com/apache/zookeeper/zip/refs/tags/release-3.9.1 JDK8 MAVEN3.8.6 mvn -DskipTests=true package 配置ZK1 zkServer.cmd中指出了启动类是 QuorumPeerMain QuorumPeer翻译成集群成员比较合理,Quorum集群Peer成员 在代码目录下新建data文件夹和log文件夹 并在dat

    2024年02月05日
    浏览(47)
  • 面试官:说一说Zookeeper中Leader选举机制

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 今天又是

    2023年04月08日
    浏览(49)
  • 一文通吃:从 ZooKeeper 一致性,Leader选举讲到 ZAB 协议与 PAXOS 算法(上)

    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注\\\"慕课网\\\"或慕课网公众号! 作者:大能 | 慕课网讲师 本文将从ZooKeeper集群如何保证一致性,讲到zookeeper保证数据一致性的协议,然后展开讲Zookeeper集群Leader选举,包括集群三种节点的类型,ZAB协议中

    2024年02月07日
    浏览(58)
  • 如何保证分布式系统中服务的高可用性:应对 ZooKeeper Leader 节点故障的注册处理策略

    作者:zhaokk 在现代分布式系统中,高可用性是一个至关重要的。分布式系统中的各个组件需要保证在各种异常情况下仍然能够正常工作,确保系统的稳定性和可靠性。ZooKeeper(以下简称为zk)作为一种常用的分布式协调服务,为分布式系统中的各种任务提供了基础支持

    2024年02月11日
    浏览(67)
  • 【亲测有效,超详细】收到微信小程序限期完成微信认证通知怎么处理?微信小程序年审认证都需要哪些资料?

    背景:近期部分微信小程序管理员最近收到了年审认证通知如下图 网址:微信公众平台 年审流程第一步:点击同意协议 年审流程第二步:填写资料(详细认证资料见文章最底部) 年审流程第三步:填写发票 年审流程第四步:支付300元,支付后等待审核即可 ps:如选法人扫脸

    2024年02月04日
    浏览(51)
  • ClickHouse 集群部署(不需要 Zookeeper)

    目录 一、单节点设置 1. 下载 2. 安装 3. 启动 4. 验证 二、导入示例数据集 1. 下载并提取表数据 2. 创建库表 3. 导入数据 4. 优化表 5. 查询示例 三、集群部署 0. 安装前准备 1. 安装配置 ClickHouse Keeper (1)安装 ClickHouse Server 和 ClickHouse Client (3)重启 ClickHouse (4)验证 Keeper 实例

    2024年04月25日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包