|NO.Z.00007|——————————|BigDataEnd|——|Hadoop&Zookeeper.V07|——|Zookeeper.v07|内部原理|Leader选举|ZAB一致性协议.v01|

一、Zookeeper内部原理
~~~     [zookeeper内部原理之Leader选举]
~~~     [zookeeper内部原理之ZAB一致性协议]
### --- Leader选举:选举机制

~~~     # 半数机制:
~~~     集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。
~~~     # Zookeeper虽然在配置文件中并没有指定Master和Slave。
~~~     但是,Zookeeper工作时,是有一个节点为Leader,其它为Follower,
~~~     Leader是通过内部的选举机制产生的。
二、集群首次启动
### --- 集群首次启动

~~~     假设有五台服务器组成的Zookeeper集群,它们的id从1-5,
~~~     同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。
~~~     假设这些服务器依序启动,来看看会发生什么,
三、Zookeeper的选举机制
### --- Zookeeper的选举机制

~~~     # 服务器1启动,
~~~     此时只有它一台服务器启动了,它发出去的报文没有任何响应,
~~~     所以它的选举状态一直是LOOKING状态。
~~~     # 服务器2启动,
~~~     它与最开始启动的服务器1进行通信,互相交换自己的选举结果,
~~~     由于两者都没有历史数据,所以id值较大的服务器2胜出,
~~~     但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),
~~~     所以服务器1、2还是继续保持LOOKING状态。

~~~     # 服务器3启动,
~~~     根据前面的理论分析,服务器3成为服务器1、2、3中的老大,而与上面不同的是,
~~~     此时有三台服务器选举了它,所以它成为了这次选举的Leader。
~~~     # 服务器4启动,
~~~     根据前面的分析,理论上服务器4应该是服务器1、2、3、4中最大的,
~~~     但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了。

~~~     # 服务器5启动,
~~~     同4一样称为follower。
四、集群非首次启动
### --- 集群非首次启动

~~~     每个节点在选举时都会参考自身节点的zxid值(事务ID);优先选择zxid值大的节点称为Leader!!

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on 2022-04-08 15:16  yanqi_vip  阅读(9)  评论(0)    收藏  举报

导航