- 浏览: 144506 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
EclipseEye:
fair_jm 写道不错 蛮详细的 谢谢分享
SWT/JFace专题 --- SWT中Display和多线程 -
fair_jm:
不错 蛮详细的 谢谢分享
SWT/JFace专题 --- SWT中Display和多线程
zookeeper适用场景:如何竞选Master及代码实现
- 博客分类:
- Hadoop/MapReaduce
zookeeper适用场景:如何竞选Master及代码实现
http://www.aboutyun.com/thread-9277-1-1.html
【zookeeper源代码分析系列】Zookeeper的Leader选举
http://www.douban.com/note/227624842/?type=like
【选举算法】
QuorumPeer.startLeaderElection
先获取选举算法配置electionType -> config.getElectionAlg() -> electionAlg
QuorumPeer.createElectionAlgorithm根据electionAlg选择算法:
0对应的是LeaderElection算法
1对应的是AuthFastLeaderElection算法
2对应的是AuthFastLeaderElection算法
3对应的是FastLeaderElection算法.
默认使用FastLeaderElection算法
所有的选举算法都继承自Election接口,实现lookForLeader和shutdown。
【选举的网络通信】
选举算法的实现中,包含RecvWorker和SendWorker两个线程,负责选举过程中的消息的收发。
选举算法内部维护一下两个收发队列:
sendqueue = new LinkedBlockingQueue<ToSend>();
recvqueue = new LinkedBlockingQueue<Notification>();
具体的网络收发由QuorumCnxManager负责,发送通过toSend(),接受通过pollRecvQueue()。
发送:
根据ToSend结构的sid,把请求发给对应id的server。sendNotifications里会给所有配置中sid轮流发送ToSend结构。
接收:
【几个概念】
logicalclock -》逻辑时钟
Epoch -》 epoch,zxid的高32,表示leader的变动
zxid -》 事务id号,每个操作都有一个zxid, 64位
server id -》配置的myid,服务器编号
【FastLeaderElection】
中心思想:竞选阶段谁id大谁当leader
比较逻辑:FastLeaderElection.totalOrderPredicate,zxid和server id大者获胜
FastLeaderElection.sendNotifications广播出去
Fastleader选举例子,转的。
假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么.
1) 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
2) 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
3) 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
4) 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
5) 服务器5启动,同4一样,当小弟.
http://www.aboutyun.com/thread-9277-1-1.html
【zookeeper源代码分析系列】Zookeeper的Leader选举
http://www.douban.com/note/227624842/?type=like
【选举算法】
QuorumPeer.startLeaderElection
先获取选举算法配置electionType -> config.getElectionAlg() -> electionAlg
QuorumPeer.createElectionAlgorithm根据electionAlg选择算法:
0对应的是LeaderElection算法
1对应的是AuthFastLeaderElection算法
2对应的是AuthFastLeaderElection算法
3对应的是FastLeaderElection算法.
默认使用FastLeaderElection算法
所有的选举算法都继承自Election接口,实现lookForLeader和shutdown。
【选举的网络通信】
选举算法的实现中,包含RecvWorker和SendWorker两个线程,负责选举过程中的消息的收发。
选举算法内部维护一下两个收发队列:
sendqueue = new LinkedBlockingQueue<ToSend>();
recvqueue = new LinkedBlockingQueue<Notification>();
具体的网络收发由QuorumCnxManager负责,发送通过toSend(),接受通过pollRecvQueue()。
发送:
根据ToSend结构的sid,把请求发给对应id的server。sendNotifications里会给所有配置中sid轮流发送ToSend结构。
接收:
【几个概念】
logicalclock -》逻辑时钟
Epoch -》 epoch,zxid的高32,表示leader的变动
zxid -》 事务id号,每个操作都有一个zxid, 64位
server id -》配置的myid,服务器编号
【FastLeaderElection】
中心思想:竞选阶段谁id大谁当leader
比较逻辑:FastLeaderElection.totalOrderPredicate,zxid和server id大者获胜
FastLeaderElection.sendNotifications广播出去
Fastleader选举例子,转的。
假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么.
1) 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
2) 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
3) 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
4) 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
5) 服务器5启动,同4一样,当小弟.
发表评论
-
数据迁移相关(关系型数据库mysql,oracle和nosql数据库如hbase)
2015-04-01 15:15 722HBase数据迁移(1) http://www.importn ... -
MR/hive 数据去重
2015-04-01 14:43 712海量数据去重的五大策略 http://www.ciotimes ... -
面试牛x题
2015-03-18 23:50 0hive、mr(各需三道) 1.分别使用Hadoop MapR ... -
使用shell并发上传文件到hdfs
2015-03-16 21:41 1229使用shell并发上传文件到hdfs http://mos19 ... -
hadoop集群监控工具Apache Ambari
2015-03-14 17:27 0Apache Ambari官网 http://ambari.a ... -
Hadoop MapReduce优化相关
2015-03-16 21:46 451[大牛翻译系列]Hadoop 翻译文章索引 http://ww ... -
数据倾斜问题 牛逼(1)数据倾斜之MapReduce&hive
2015-03-16 21:43 776数据倾斜总结 http://www.alidata.org/a ... -
MapReduce牛逼(4)WritableComparable接口
2015-03-12 08:57 577@Public @Stable A Writable whi ... -
MapReduce牛逼(3)(继承WritableComparable)实现自定义key键,实现二重排序
2015-03-12 08:57 626package sort; import jav ... -
MapReduce牛逼(2)MR简单实现 导入数据到hbase例子
2015-03-12 08:57 1248package cmd; /** * MapRe ... -
MapReduce牛逼(1)MR单词计数例子
2015-03-11 00:44 1183package cmd; import org. ... -
InputFormat牛逼(9)FileInputFormat实现类之SequenceFileInputFormat
2015-03-11 00:24 1383一、SequenceFileInputFormat及Seque ... -
InputFormat牛逼(8)FileInputFormat实现类之TextInputFormat
2015-03-11 00:19 558/** An {@link InputFormat} for ... -
InputFormat牛逼(6)org.apache.hadoop.mapreduce.lib.db.DBRecordReader<T>
2015-03-11 00:11 649@Public @Evolving A RecordRead ... -
InputFormat牛逼(5)org.apache.hadoop.mapreduce.lib.db.DBInputFormat<T>
2015-03-10 23:10 580@Public @Stable A InputFormat ... -
InputFormat牛逼(4)org.apache.hadoop.mapreduce.RecordReader<KEYIN, VALUEIN>
2015-03-10 22:50 344@Public @Stable The record rea ... -
InputFormat牛逼(3)org.apache.hadoop.mapreduce.InputFormat<K, V>
2015-03-10 22:46 630@Public @Stable InputFormat d ... -
InputFormat牛逼(2)org.apache.hadoop.mapreduce.InputSplit & DBInputSplit
2015-03-10 22:22 507@Public @Stable InputSplit rep ... -
InputFormat牛逼(1)org.apache.hadoop.mapreduce.lib.db.DBWritable
2015-03-10 22:07 528@Public @Stable Objects that a ... -
如何把hadoop2 的job作业 提交到 yarn平台
2015-01-08 21:09 0aaa萨芬撒点
相关推荐
该代码是基于zookeeper应用场景:master选举下的代码;使用了zookeeper的集群模式,可参考博客:https://blog.csdn.net/LiaoHongHB/article/details/84951540
Zookeeper源码剖析:深入理解Leader选举机制
zookeeper-3.4.5-cdh5.4.0.jar
docker.io/dabealu/zookeeper-exporter:v0.1.13
Zookeeper使用场景及详解,优劣之分
基于对Paxos 算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得zookeeper 能够应用于很多场景。网上对zk的使用场景也有不少介绍,本文将结合作者身边的项目例子,系统的对zk 的...
阿帕奇ZooKeeper 有关Apache ZooKeeper的最新信息,请访问我们的网站: 和我们的Wiki,位于: 包装/发布文物 使用maven构建项目后,可以从下载或在zookeeper-assembly / target目录中找到。 apache-zookeeper-...
该项目通过zookeeper三个节点Node服务客户端代码,实现zookeeper集群管理与Master选举功能示例,项目结构如下图所示,其中依赖包包含:log4j-1.2.14.jar、slf4j-api-1.7.2.jar、slf4j-log4j12-1.7.2.jar、zookeeper-...
NULL 博文链接:https://425826501.iteye.com/blog/2424450
zookeeper应用场景
1、master选举:mastersel 2、数据的发布和订阅:subscribe 3、负载均衡:balance 4、分布式锁:lock 5、分布式队列:queue 6、命名服务:nameservice 演示代码下载(代码来自极客学院演示demo):
赠送源代码:zookeeper-3.3.3-sources.jar; 包含翻译后的API文档:zookeeper-3.3.3-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache.zookeeper,artifactId:zookeeper,version:3.3.3 ...
赠送源代码:zookeeper-3.4.6-sources.jar; 包含翻译后的API文档:zookeeper-3.4.6-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.apache.zookeeper,artifactId:zookeeper,version...
1、master选举:mastersel 2、数据的发布和订阅:subscribe 3、负载均衡:balance 4、分布式锁:lock 5、分布式队列:queue 6、命名服务:nameservice 资料来自极客学院
极客学院全套: 1、认识 2、客户端使用 3、实战 4、运维
赠送源代码:zookeeper-3.3.3-sources.jar 包含翻译后的API文档:zookeeper-3.3.3-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.apache.zookeeper,artifactId:zookeeper,version:...
ZooKeeper:分布式应用的协调服务 ZooKeeper是一个分布式的开源协调服务,用于分布式应用程序。它公开了一组简单的原子操作,分布式应用程序可以构建这些原子操作,以实现更高级别的服务,以实现同步,配置维护以及...
改代码主要功能能是完成通过zookeeper同步mysql数据,具体的介绍可以参考博文zookeeperMaster选举以及数据同步
arm镜像包