集群个数:

  2n+1,因为集群当宕机大于等于二分之一的机子时,集群选举会失败。故 2n+1台机器和3n台机器可靠性相同

Leader的作用:

  为了实现各个节点数据的一致性,需要一个负责协调数据同步的操作,从而减小数据同步的复杂性

2PC(俩阶段提交):

ZAB协议(支持崩溃恢复的原子广播协议):

俩种基本模式:1. 崩溃恢复  2. 原子广播

当leader出现网络中断,宕机等情况时,ZAB协议就会进入恢复模式选取新leader,当 leader 服务器选举出来后,并且集群中有过半的机器和该 leader 节点完成数据同步后(同步指的是数据同步,用来保证集群中过半的机器能够和 leader 服务器的数据状态保持一致),ZAB 协议就会退出恢复模式,进入广播模式,此时leader正常工作,当启动新的机器时,该机器即进入数据恢复模式,与leader同步数据

消息广播的实现原理:

集群收到客户端的事务操作,将事务转发给leader,leader将消息赋予全局唯一的64位自增ID(ZXID),Leader将消息放入FIFO(First Input First Output)队列中,将带有zxid的消息作为一个Proposal(提议)发送给Follower,当 follower 接收到 proposal,先把 proposal 写到磁盘,写入成功以后再向 leader 回复一个 ack,只要超过半数节点反馈写入成功,leader发送commit消息,则这次事务操作提交(类似2PC)

崩溃恢复(数据恢复):

当Leader发送无法连接,宕机等情况时导致leader失去了与过半follower的联系时,则会进入崩溃恢复模式。同时需要满足俩点:

1. 已被处理的消息不可以丢失

  当leader在处理事务,且已经有节点收到了commit事务时,leader失去与其他follower的联系导致其他节点没有commit事务,此部分数据视为已处理消息,不可以丢失

2. 被丢弃的消息不可以再出现

  当leader在处理事务,且再发送commit提交事务前,leader宕机,此消息视为被丢弃消息。在重新选取leader后,原leader被重启,重新加入集群,原leader中未被体提交的数据需要被删除

为了满足上述俩个要求,需要设计一个leader选举算法

leader需要拥有最大zxid(事务id),这使得leader保存了所有已经被commit的事务。

  ZXID是一个64位自增的事务id,它包括前32位epoch编号,后32位消息计数器。每当zookeeper重新选举leader时,epoch就会+1,同时消息计数器重置为0。通过epoch编号,当老的leader重新接入时,可以通过epoch清楚旧的未commit得事务。

Leader选举:

结果,投票时,优先投票zxid最大,相同则投票myid最大的节点

过程:当节点启动时,节点进入LOOKING状态,处于观望状态,接下来就开始进行选主流程。起初每个节点会将自己作为leader投票,将自己的 zxid,myid,epoch发送给其他节点。当节点接受到其他节点的投票时,会判断其他节点投票的有效性(epoch是否为本轮编号,是否为LOOKING状态等),如有效,则通过比较 ZXID,MYID与自己的投票PK,将ZXID,MYID最大的重新投票。当leader选取好后,后加入的节点则作为follower(不考虑observer)

例:

1,2,3三台机子,epoch相等。按1,2,3启动,当1,2启动时,通过上述方式,选取2为leader,当3启动时,因leader已选取好,故自己作为follower

ZOOKEEPER进阶的更多相关文章

  1. 【进阶】ZooKeeper 相关概念总结

    1. 开卷有益 学习是一种习惯,只有把这种习惯保持下来,每天不学习一点就感觉浑身不自在,达到这样的境界,那么你成为大佬也就不远了买,正如我们标题所写的"开卷有益".人生匆匆,要想过 ...

  2. 分布式进阶(十六)Zookeeper入门基础

    Zookeeper入门基础 前言 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据.如果在创建znode时Flag设置为EPHEMERAL,那么当 ...

  3. 分布式系统理论进阶 - Raft、Zab

    引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab.通过与Paxos对比,了解Raft和Zab的核心思想.加 ...

  4. Zookeeper集群的安装和使用

    Apache Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,现已经成为 Apache 的顶级项目,它是一个开放源码的分布式应用程序协调服务,是Google ...

  5. Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)

    ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...

  6. zookeeper 入门系列-理论基础 – zab 协议

    上一章讨论了paxos算法,把paxos推到一个很高的位置.但是,paxos有没有什么问题呢?实际上,paxos还是有其自身的缺点的: 1. 活锁问题.在base-paxos算法中,不存在leader ...

  7. Spark进阶之路-Spark HA配置

    Spark进阶之路-Spark HA配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 集群部署完了,但是有一个很大的问题,那就是Master节点存在单点故障,要解决此问题,就要借 ...

  8. Scala进阶之路-Spark独立模式(Standalone)集群部署

    Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...

  9. Java进阶资料汇总

    Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...

随机推荐

  1. vmware 中Linux系统怎么连接外网?

    VMware虚拟机有三种网络模式,分别是Bridged(桥接模式).NAT(网络地址转换模式).Host-only(主机模式). VMware workstation安装好之后会多出两个网络连接,分别 ...

  2. vue中解决three.js出现内存泄漏丢失上下文问题

    在跳转页面时添加以上代码即可. 在spa项目中,跳转页面并不会清楚已经创建的webgl实例,需要手动清楚.

  3. LeetCode 20. 有效的括号(Valid Parentheses )

    题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字 ...

  4. 如何在linux中发送邮件,使用163邮箱发信。

    linux中,可以使用mail命令往外发送邮件,在使用前,只需要指定如下简单配置即可,这里演示用  163.com    邮箱发送至 qq.com 编辑 /etc/mail.rc,写入下方的参数 se ...

  5. tornado框架学习

    tornado是一个非阻塞的web服务器框架,每秒可以处理上千个客户端连接(都是在一个线程中,不需要为每个客户端创建线程,资源消耗少),适合用来开发web长连接应用,如long polling(轮询) ...

  6. 慎用String.intern()作为synchronized的对象锁

    https://www.cnblogs.com/yhlx/p/3498387.html

  7. 摘抄java基础

    1.Java中Static的相关用法总结?(静态方法:静态变量:静态代码块) public static void main(String args[])执行的关键,在于有static.有了stati ...

  8. application节点

    <application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...

  9. Android中常见的默认实现类

    * Basexxx* Defaultxxx* Simplexxx* Baicxxx

  10. display:flex 布局详解(2)

    1.  flex设置元素垂直居中对齐 在之前的一篇文章中记载过如何垂直居中对齐,方法有很多,但是在学习了flex布局之后,垂直居中更加容易实现 HTML代码: <div class=" ...