ZOOKEEPER进阶
集群个数:
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进阶的更多相关文章
- 【进阶】ZooKeeper 相关概念总结
1. 开卷有益 学习是一种习惯,只有把这种习惯保持下来,每天不学习一点就感觉浑身不自在,达到这样的境界,那么你成为大佬也就不远了买,正如我们标题所写的"开卷有益".人生匆匆,要想过 ...
- 分布式进阶(十六)Zookeeper入门基础
Zookeeper入门基础 前言 在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据.如果在创建znode时Flag设置为EPHEMERAL,那么当 ...
- 分布式系统理论进阶 - Raft、Zab
引言 <分布式系统理论进阶 - Paxos>介绍了一致性协议Paxos,今天我们来学习另外两个常见的一致性协议——Raft和Zab.通过与Paxos对比,了解Raft和Zab的核心思想.加 ...
- Zookeeper集群的安装和使用
Apache Zookeeper 由 Apache Hadoop 的 Zookeeper 子项目发展而来,现已经成为 Apache 的顶级项目,它是一个开放源码的分布式应用程序协调服务,是Google ...
- Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)
ZooKeeper是Hadoop的开源子项目(Google Chubby的开源实现),它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.命名服务.分布式同步.组服务等. Zookee ...
- zookeeper 入门系列-理论基础 – zab 协议
上一章讨论了paxos算法,把paxos推到一个很高的位置.但是,paxos有没有什么问题呢?实际上,paxos还是有其自身的缺点的: 1. 活锁问题.在base-paxos算法中,不存在leader ...
- Spark进阶之路-Spark HA配置
Spark进阶之路-Spark HA配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 集群部署完了,但是有一个很大的问题,那就是Master节点存在单点故障,要解决此问题,就要借 ...
- Scala进阶之路-Spark独立模式(Standalone)集群部署
Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...
- Java进阶资料汇总
Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...
随机推荐
- vmware 中Linux系统怎么连接外网?
VMware虚拟机有三种网络模式,分别是Bridged(桥接模式).NAT(网络地址转换模式).Host-only(主机模式). VMware workstation安装好之后会多出两个网络连接,分别 ...
- vue中解决three.js出现内存泄漏丢失上下文问题
在跳转页面时添加以上代码即可. 在spa项目中,跳转页面并不会清楚已经创建的webgl实例,需要手动清楚.
- LeetCode 20. 有效的括号(Valid Parentheses )
题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字 ...
- 如何在linux中发送邮件,使用163邮箱发信。
linux中,可以使用mail命令往外发送邮件,在使用前,只需要指定如下简单配置即可,这里演示用 163.com 邮箱发送至 qq.com 编辑 /etc/mail.rc,写入下方的参数 se ...
- tornado框架学习
tornado是一个非阻塞的web服务器框架,每秒可以处理上千个客户端连接(都是在一个线程中,不需要为每个客户端创建线程,资源消耗少),适合用来开发web长连接应用,如long polling(轮询) ...
- 慎用String.intern()作为synchronized的对象锁
https://www.cnblogs.com/yhlx/p/3498387.html
- 摘抄java基础
1.Java中Static的相关用法总结?(静态方法:静态变量:静态代码块) public static void main(String args[])执行的关键,在于有static.有了stati ...
- application节点
<application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...
- Android中常见的默认实现类
* Basexxx* Defaultxxx* Simplexxx* Baicxxx
- display:flex 布局详解(2)
1. flex设置元素垂直居中对齐 在之前的一篇文章中记载过如何垂直居中对齐,方法有很多,但是在学习了flex布局之后,垂直居中更加容易实现 HTML代码: <div class=" ...