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程序员越来越难做,一 ...
随机推荐
- 2018-2019-2 20175226王鹏雲 实验四《Android程序设计》实验报告
2018-2019-2 20175226王鹏雲 实验四<Android程序设计>实验报告 实验报告封面 课程:Java程序设计 班级:1752班 姓名:王鹏雲 学号:20175226 指导 ...
- Linux设备驱动程序 之 度量时间差
概述 内核通过定时器中断来跟踪事件流: 时钟中断由系统定时硬件以及周期性的间隔产生,这个间隔由内核根据HZ的值设定,HZ是一个细节结构有关的常数:作为一般性规则,即使知道对应平台上的确切HZ值,也不应 ...
- [go]mysql使用
mysql驱动使用 初始化 import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) DB, e ...
- LC 454. 4Sum II
Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...
- Ubuntu16.04.3安装并配置samba方法
目的:单个Linux用户可以在windows电脑上通过映射网络驱动器的方式来访问自己的工作目录. 方法如下: 1.安装smb服务器:apt-get install samba2.安装smb支持的文件系 ...
- springmvc快速入门(注解版本)
1)springmvc快速入门(传统版) 步一:创建springmvc-day02这么一个web应用 步二:导入springioc,springweb和springmvc相关的jar包 ------- ...
- Android 中更新 UI 的四种方式
runOnUiThread handler 的 post handler 的 sendMessage View 自身的 post
- 排错:Unable to create a new session key. It is likely that the cache is unavailable.
排错:Unable to create a new session key. It is likely that the cache is unavailable. 问题 登录openstack页面, ...
- SpringMVC整合SpringFox实践总结
项目中使用的swagger框架在生成api文档时存在一些问题: 1. 控制器下方法无法点击展开 2.api内容结构混乱 基于上述原因,重新整合重构了一下api文档生成的代码.在此将重整过程记录下来,方 ...
- CentOS8 缺少 libglade2 安装包的回避方法
某些gtk2应用程序需要libglade2安装包,但不知为何CentOS的yum仓库里没有此包, 经测试,可手动安装CentOS7的rpm包安装解决. 更新:使用下面一行即可.sudo yum ins ...