什么时候开始进行选举

1.服务器初始化启动的时候
2.服务器运行期间连接不上leader的时候

初始化选举过程

进行leader选举至少需要两台服务器,我们这里举例为5台服务器(1,2,3,4,5)
1.启动服务器1,第一次投票都先投给自己[1,0]。投票内容[myid,zxid],myid为服务器的唯一标识,zxid
是事物请求的唯一标识,从0开始,选举出leader之后由leader分配,zxid由两部分组成,高32位记录事物请求所属的轮次
,低32位是请求次数。此时服务器1的支持率没有达到半数以上,保持Looking状态。
2.启动服务器2,投第一票[2,0],然后与服务器1交换投票结果。
3.服务器1收到服务器2的投票结果以后首先检查轮询次数是否一致,然后检查服务器状态是否为Looking状态。
4.检查通过开始PK,首先比较zxid,都为0,(如果不同, 大的胜出),然后比较myid,大的胜出。
5.服务器1更新投票结果为[2,0],服务2pk之后胜出,无需更新投票结果,服务器2拿到两票支持,支持率没有达到半数以上,继续Looking。
6.启动服务器3,投第一票[3,0],然后与服务器1和2交换投票结果,pk完成后,服务器1投票结果[3,0],服务器2投票结果[3,0],服务器3投票结果[3,0],此时,支持率达到半数以上,服务器3当选为leader。状态为Leading,服务器1和2分别为Following
7.启动服务器4和5,虽然myid大于3,但是由于3已经成为leader,他们就自动跟随了。

服务器运行时选举过程

1.leader挂了之后,follower更新状态为Looking,开始进行选举leader
2.开始第一轮投票,跟启动时一样,都投给自己
3.接收其他服务器的投票,检查有效性进行pk,与启动时一样。运行时服务器的zxid可能不同,还是大的胜出
4.统计投票
5.选出leader,更新状态(Leading和Following)

服务器状态

LOOKING:寻找leader的状态
LEADING:leader领导者状态
FOLLOWING:跟随着状态
OBSERVING:观察者状态

posted on 2018-03-09 15:37  Smilence^^  阅读(179)  评论(0编辑  收藏  举报