Zookeeper
选举机制
Zookeeper
的选举机制是半数机制(Paxos
协议):集群中半数以上机器存活,集群就可用。所以Zookeeper
适合装在奇数台机器上。Zookeeper
在配置文件没有指定master
和slave
,但是在Zookeeper
工作时,是有一个节点为leader,其它为followrer,这个leader就是通过内部的选举机制临时产生的。- 集群中每台机器在选举过程中有这几种状态:
LOOKING
,FOLLOWING
,OBSERVING
,LEADING
。
以一个简单的例子来说明整个选举的过程:
假设有五台服务器组成的 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
一样当小弟。