• 解析ZooKeeper底层维护主从数据一致


    整个主从数据同步的过程,我们称之为二阶段提交。

    总结出七步:

    (1) 由于主从机制[就算Client连接从机,向从机写数据 从机也会把数据交给主机,让主机一并把数据发送给所有从机。从而保证主从一致],所以无论Client客户端

    向主机还是从机传输数据都相当于向主机进行传输数据

    (2)主节点会先把数据写到自己的数据文件当中,并给自己返回一个ACK

    (3)Leader会把数据发送给所有Follower

    (4)所有Follower从节点会把接收到Leader传输的数据写到本地的数据文件中(第一阶段提交)

    此时如果一个Client客户端连接到Follower这个从节点,但是无法读取到对应传输的数据,因为数据并没有保存到内存中 !

    (5) 所有Follower从节点在完成(4)之后,都进行返回一个ACK给Leader主节点

    (6)Leader如果收到半数以上的ACK后,那么就向所有的Follower进行发送Commit。

    对于这个半数以上我们进行解释:

    首先这个半数以上,是针对于从节点数的半数以上。

    其次为什么要执行(2)这个步骤,主节点也返回一个ACK给自己的呢?

    假设说从节点有偶数个,如果一个从节点在将数据写到本地数据文件中时发生故障,那么就失败了,该节点就不会返回ACK了。只有一个节点返回一个ACk:你怎

    么确定在半数以上?所以为了保证即使在一个从节点出现故障时,其他节点仍然保证与主机数据同步,我们就必须执行(2)来上一层保险

    (7)当Follower从节点接收到Leader发送的Commit后,把数据文件中的数据写到内存中。

  • 相关阅读:
    Next.js 13.5 正式发布,速度大幅提升!
    图片速览 Deep Clustering for Unsupervised Learning of Visual Features
    大语言模型:Large Language Models Are Human-Level Prompt Engineers概述
    JUC系列(九) CAS 与锁的理解
    RabbitMQ快速入门(详解)
    Python之json模块
    C++17一个很冷门很有意思的新特性
    Linux命令系列之ls——原来最简单的ls这么复杂
    操作系统八股文背诵版
    spark jdbc操作
  • 原文地址:https://blog.csdn.net/m0_61784000/article/details/126155040