目录
- 一、ZooKeeper集群中哪些情况会进入Leader选举
- 二、当一台机器进入Leader选举流程时,当前集群的两种状态
- 2.1、集群中本来就已经存在一个Leader
- 2.2、集群中确实不存在Leader
- 三、Zookeeper中的一些概念了解
- 3.1、SID
- 3.2、ZXID
- 3.3、Epoch
一、ZooKeeper集群中哪些情况会进入Leader选举
-
ZooKeeper集群服务器初始化启动时,进入Leader选举。
-
ZooKeeper集群服务器运行期间无法和Leader保持连接时,进入Leader选举。例如:下图中服务器5挂掉之后,无法与Leader保持连接时。
二、当一台机器进入Leader选举流程时,当前集群的两种状态
2.1、集群中本来就已经存在一个Leader
- 对于已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器(即服务器5)来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。
2.2、集群中确实不存在Leader
-
假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为8、8、8、7、7,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。
-
SID为1、2、4的机器投票情况
服务器 EPOCH ZXID SID 服务器1 1 8 1 服务器2 1 8 2 服务器3 1 7 4 -
选举Leader规则
①EPOCH(即每个Leader任期的代号)大的直接胜出
②EPOCH相同,事务id(即ZXID)大的胜出
③事务id相同,服务器id(即SID)大的胜出
三、Zookeeper中的一些概念了解
3.1、SID
- SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。
3.2、ZXID
- ZXID:事务ID。用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。
3.3、Epoch
- Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加