3.选举机制
通过 ./bin/zkServer.sh status <zoo配置文件> 命令可以查看到节点状态
./bin/zkServer.sh status conf/zoo1.cfg
Mode: follower
./bin/zkServer.sh status conf/zoo2.cfg
Mode: leader
./bin/zkServer.sh status conf/zoo3.cfg
Mode: follower
可以发现中间的2182 是leader状态.其选举机制如下图:
zookeeper的投票机制说明:
- 第一轮投票全部投给自己
- 第二轮投票给myid比自己大的相邻节点
- 如果得票超过半数,选举结束。
- 如果存在observer,则不参与投票(也不算入总的票数中)
选举触发:
zookeeper何时会进行选举?
当集群中的服务器出现已下两种情况时会进行Leader的选举
1. 服务节点初始化启动
2. 半数以上的节点无法和Leader建立连接
- 当节点初始起动时会在集群中寻找Leader节点,如果找到则与Leader建立连接,其自身状态变化follower或observer。
- 如果没有找到Leader,当前节点状态将变化LOOKING,进入选举流程。
- 在集群运行其间如果有follower或observer节点宕机只要不超过半数并不会影响整个集群服务的正常运行。
- 但如果leader宕机,将暂停对外服务,所有follower将进入LOOKING 状态,进入选举流程。