流程分析:
1.只有启动了的zk节点才能参与投票。
(启动后才能进行投票网络通信)
2.当zk节点A启动时,它接受投票的时候,每个zk服务启动,接受一轮对自己的投票。
(会提前给每个zk节点发放票据)
3.leader角色决策条件,当启动后,如果自身接受投票后的票数超过zk集群节点个数的一半,立刻角色变为leader。
4.投票操作,需要竞争,myid编号—权重。判断竞争票的双方的myid的大小。
启动过程中选主流程:
1.启动zz21:接受投票,集群中只有zk21,有1票,投给自己。
-
zk21--得票--1票--角色follower
2.启动zz22:接受投票,自己投票给自己,zz21投票给zz22,通过myid竞争获得zz21投票。
-
zk22 -- 2票 -- 角色follower
3.启动zz23:接受投票,自己一票,zk21,zz22投票给zk23,通过myid竞争得2票。
-
zk23 --3票--票数过半--角色leader
4.启动zk24 :
-
zk集群中已存在leader,角色只能是follower。
5.启动zk25 :
-
zk集群中已存在leader,角色只能是follower。
决定最终leader因素:
myid权重+启动顺序