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程序员越来越难做,一 ...
随机推荐
- Fiddler主界面图标简单说明
Fiddler主界面图标简单说明: 名称 含义 # 抓取HTTP Request的顺序,从1开始,以此递增 Result HTTP状态码 Protocol 请求使用的协议,如HTTP/HTTPS/FT ...
- js实现回到顶部功能
js实现回到顶部功能 一.总结 一句话总结: 可以通过js或者jquery可以很快的控制页面的属性,比如高度等等 //设置当前视口的顶端数值 var setScrollTop = function(t ...
- python获得坐标系信息
# -*- coding: cp936 -*- ############################################################# import arcpy i ...
- mongodb 的云数据库产品 mlab 的使用
mongodb的云数据库产品mlab,新用户注册,提供500m免费的空间,对于创建测试的网站数据库来说,足够使用.虽然是服务器是在美国,但是链接稳定.下面就介绍注册和使用的流程. 浏览器中,输入网址h ...
- LC 975. Odd Even Jump
You are given an integer array A. From some starting index, you can make a series of jumps. The (1 ...
- LC 265. Paint House II
There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...
- LC 957. Prison Cells After N Days
There are 8 prison cells in a row, and each cell is either occupied or vacant. Each day, whether the ...
- mybatis映射文件祥解(StudentMapper.xml)
1)以下是StudentMapper.xml文件,提倡放在与实体同目录下,文件名任意 <?xml version="1.0" encoding="UTF-8&quo ...
- SEO中常用的301永久重定向代码大全
301是永久重定向的意思,表示请求的网页已永久移动到新位置,服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置.其实301重定向在SEO中被广泛应用,也是被广泛认为比 ...
- xiaopiu产品原型设计与团队实时协作平台
PRD文档创作 全新的文档创作模式,让交互原型与产品文档完美结合: 四大专业模板,满足多场景使用,快速输出专业规范的文档 PRD文档搜索 更专业.更精准的PRD文档垂直搜索服务,包含功能流程.协议条款 ...