zookeeper的选举机制
zookeeper是按照Paxos算法进行选举的,这个算法也称之为半数选举机制
所有节点都有投票权,当一个几点票数过半,这个节点就是leader
zookeeper机制规定,当有新的节点加入时,没有选举出leader时之前票数作废,重新投票。
leader产生后,其他节点投票给leader。
假如现在有3台zookeeper分别是zookeeper1,zookeeper2,3,4,5
(简称12345)排序是启动顺序不是本身的名字再说一遍是启动顺序,谁先来谁就是1
1启动投票给自己,票数不过半处于观望状态。
2启动投票给自己,2比1大,1投票给2,票数不过半处于观望状态。
3启动了,重新投票3比12大,1和2投票给3,3投票自己现在票数过半,3成为leader。
,4启动了,现在leader产生了,4投票给3。
5启动了,现在leader产生了,5投票给3。
半数选举机制只是针对于第一次选择leader的时候,如果leader宕机需要重新选举,这个时候就有可能发生变化了(并不是说不再遵循半数选举机制,而且会受到zxid的影响,依然遵循还是半数选举机制)
现在五台在运行,3号也就是leader宕机了,剩下四台继续选举4号为leader
但是4号出现网络波动了连接不上集群了,集群在选leader的时候就把4号给剔除,5号的zxid的低32位最小,5号就是leader。4号网络恢复时,leader已经产生。
Zxid为了保证事务的顺序一 致性zookeeper采用递增的事务id来辨识事务所有的提议都在被提出的时候加上了zxid, zxid是一个64位数字,前32位成为高三十位,是epoch用来标识1eader关系是否改变,每次一个1eader被选出来,都会有-个新的epoch (id增加),标志着是当前所有节点的leader,此时1eader的低三十位不变。
初始状态5台服务器的高低32位都一样的
当leader.产生后,所有fol1cwer的低三十二位递增。
也就是说3号的高32位增加,4512号低32位分别+1,+2,+3,+4。
zookeeper规定zxid的低三十二位越小,被操作的可能性越大,越有机会成为leader。
zookeeper选举机制(半数选举+zxid)
最新推荐文章于 2023-07-29 11:57:15 发布