zookeeper集群搭建及ZAB协议
zookeeper集群搭建非常简单,准备三台安装好zookeeper服务器,在其zoo.cfg配置中分表添加如下配置
initLimit 10 集群中的follower与leader之间完成初始化同步连接时能容忍的最多心跳数(tickTime的数量)。如果zk集群环境数据量很大,同步数据时间会变长,这种情况下可以适当调大改参数
syncLimit 2 集群中的follower与leader的请求应答时间之间最多能容忍的心跳数
server.1=node1:2881:3881
server.2=node2:2881:3881
server.3=node3:2881:3881
其中1、2、3是服务id,通过在各自的dataDir目录下创建一个名为myid的文件为每一台服务器赋予一个服务器id,myid文件,一行只包含机器id的文本,id必须唯一,数值在1-255之间,
两个端口号 第一个是follower连接leader的端口号 第二个是选举leader的端口号,node1、node2、node3对应三台服务器的ip
配置好后,分别启动三台机器上的zookeeper,一个最小版的集群便搭建完成,可以通过日志看到相关leader和follower的信息,集群中的所有节点都可以提供服务,客户端连接时,连接串可以可以指定多个或者集群全部节点的连接地址,当一个节点不通时,客户端将自动切换到另一个节点。
凡是涉及到集群就必然会出现数据一致性问题,ZAB协议 (原子消息广播协议)就是专门为zookeeper设计的数据一致性协议。为了保证数据一致性,客户端所有的读取在任何节点都可以,写操作只能转发给lead节点去执行。zookeeper集群中写操作流程如下
leader服务器出现崩溃或者网络原因导致与过半的follower失去连接,zk集群就会进入崩溃修复模式,此时集群不可用,所以zookeeper集群是一个CP服务。ZAB协议规定如果一个事物proposal(提议)在一台机器上处理成功,那么所有的机器上都应该被处理成功,确保那些在leader服务器上提交的事物最终被所有服务器都提交,确保丢弃那些只在lead服务器被提出的proposal。
为了满足ZAB的要求,在zookeeper leader选举时就必须保证选举出来的leader服务器拥有集群中所有机器的最高ZXID的事物proposal。
ZXID(事务编号)是一个64位数字,低32位单调递增的计数器,leader每产生一个事物proposal,都会对计数器加1操作,高32位是leader纪元周期的编号,每当选举一个新leader,就会从这个leader服务器中取出最大的事物proposal的zxid,并从zxid中提取出对应的纪元值,在此基础上加1,之后此编号作为新的纪元,并将低32位从0开始重新计数。基于这样的规则可以解决事物proposal丢弃的问题,当一个包含了上一个leader周期内尚未提交的事物proposal的服务器重新加入集群,发现集群中已经存在leader,则follower的身份加入集群,此时leader服务器会根据自己服务器最后提交的事务proposal和follower上proposal比较,发现follower中有上一个leader周期内的事务proposal,leader会要求follower进行一个回退操作,回退到一个已经确实被集群中过半机器提交的最新的事务proposal
zookeeper leader选举时确保选出的leader符合两个要求:选出的leader上有最高的zxid以及过半节点同意,内置算法有:LeaderElection FastLeaderElection AuthFastLeaderElection
选举中的概念:服务器id,事务id,逻辑时钟(发起的投票轮数技术),选举状态 looking(竞选)、following、observing(观察,只同步不选举)、leading。
选举算法的具体步骤:
1、每个服务器都发起投票选举自己位lead,选举信息中包含上面的4个信息
2、其它服务器收到投票邀请后,比较发起者的zxid是否比自己大,大则投一票,相同的话则比较服务器id,比自己大则投一票
3、发起者收到投票反馈后,看投票数是否大于集群半数,大于则胜出称为lead,否则发起下一轮投票
leader选举出来后 需完成follower与新leader的同步,当半数的follower同步完成后,则可以提供服务。同步过程如下:
leader服务器会为每一个follower都准备一个队列,并将那些没有被各follower同步的事物以proposal消息的形式发送到各个follower,并在每一个proposal后跟一个comiit,follower收到消息后将其在本地应用,与leader同步后leader就会真正将该follower加入可用列表,超过半数后就可以提供服务。
zookeeper集群搭建及ZAB协议的更多相关文章
- Zookeeper集群搭建以及python操作zk
一.Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper设计目 ...
- zookeeper集群搭建及Leader选举算法源码解析
第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...
- java 学习笔记(三)ZooKeeper集群搭建实例,以及集成dubbo时的配置 (转)
ZooKeeper集群搭建实例,以及集成dubbo时的配置 zookeeper是什么: Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式 ...
- Zookeeper集群搭建及原理
1 概述 1.1 简介 ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分 ...
- 分布式架构中一致性解决方案——Zookeeper集群搭建
当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...
- kafka学习(二)-zookeeper集群搭建
zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...
- 分布式协调服务Zookeeper集群搭建
分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...
- Zookeeper 集群搭建--单机伪分布式集群
一. zk集群,主从节点,心跳机制(选举模式) 二.Zookeeper集群搭建注意点 1.配置数据文件 myid 1/2/3 对应 server.1/2/3 2.通过./zkCli.sh -serve ...
- Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...
随机推荐
- 算法:贪心、回溯(su)、分治、动态规划,思想简要
贪心算法: 只做出当前看来最好的选择,而不从整体考虑最优,他所作出的是局部最优解.使用该算法的前提是必须具备无后效性,即某个状态以前的选择不会影响以后的状态的选择,只与当前状态有关. 回溯算法: 本质 ...
- [xms]西软xms试算平衡报表-穿透明细报表-增加储值卡卡号列
只能呵呵哒 [xms]西软xms试算平衡报表-穿透明细报表-增加储值卡卡号列 pospay ' and hotelid='${hotelid}'; hhaccount ' and hotelid='$ ...
- Tkinter 之爬虫框架项目实战
一.效果图 二.源码 ''' 测试内容页爬取''' def test_content_url(self): try: url = self.test_url_var.get().strip() ite ...
- koa art-template模板引擎的使用
art-template 模板引擎介绍 art-template 是一个简约.超快的模板引擎. 它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行 性能,并且同 ...
- EMQ 与 mqtt 与 IOT设备
1.IOT设备的特性 IOT(物联网things of internet)设备和传统的智能设备有什么区别,笔者总结下的IOT设备有如下特点: 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HT ...
- oracle远程连接服务器
一.需要下载的工具 1.PLSQL Developer 下载及安装地址如下: http://www.zdfans.com/html/18196.html 2.下载instantclient-basic ...
- react ui 参考网站
react.semantic-ui.com react官方中文网址 https://zh-hans.reactjs.org/ es6标准入门 nodejs官网文档 nodejs.org https:/ ...
- WebGL学习笔记(七):输入和动画
目前为止,我们绘制出来的3D物体都是静止的,接下来我们需要让桌面上的小盒子可以根据我们按键(上下键)前进后退: 输入方面,监听按键和鼠标消息直接在document上添加对应的监听就行了: 动画这块,我 ...
- what's the RTP协议
what's the RTP RTP全名是Real-time Transport Protocol(实时传输协议).它是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC1889为其过期 ...
- python-机器学习-深度学习-算法-面试题
GitHub 地址: https://github.com/taizilongxu/interview_python https://github.com/imhuay/Algorithm_Inter ...