ZooKeeper 的读写操作 & 选举机制
0. 说明
记录 ZooKeeper 的读写操作和选举机制
1. ZooKeeper 的读写操作
- 读操作:所有 ZooKeeper 节点都可以提供读请求(包括 follower 和 leader )
- 写操作:需要先通过 leader 节点,leader 同意之后,可以向指定节点写入
2. ZooKeeper 的选举机制
2.1 说明
ZooKeeper 虽然在配置文件中并没有指定 master 和 slave,但是 ZooKeeper 工作时,只有一个节点为 leader,其他则为 follower
Leader是通过内部的选举机制临时产生的
- Zxid: ZooKeeper 的事务 id,每次处理请求(读或写),此 id 会 +1
- myid: 在配置时指定的 Zookeeper id
2.2 初始化选举
3个节点组成的 ZooKeeper 集群,myid 分别为102、103、104
- 启动 s102 ,选举状态为 looking 状态,
- 启动 s103 ,和 s102 进行通信,交换选举结果,根据 myid 的大小确认 s103 为 leader
- 启动 s104 ,和 s102 、s103 进行通信,交换选举结果,虽然 s104的 myid 的大于 s103 ,但是 s103 获得了一半以上的选票,s103 还是 leader
2.3 非全新集群选举机制
适用于 ZooKeeper 节点故障之后的重新选举
- 先比较 Zxid ,Zxid 大的胜出
- Zxid 相同的情况下, myid 大的胜出
且将新火试新茶,诗酒趁年华。