-
zk集群中的三种角色:
- leader: 作为整个zk集群写请求的唯一处理者,并负责投票的发起和决议,更新系统的状态
- follower: 接受客户端请求,处理读请求,并向客户端返回结果;将写请求转发给leader
- observer: 可以理解为无选举投票权的follower,其主要是为了协助follower处理更多的读请求。如果zk集群的读请求负载很高,或者客户端非常多,多到跨机房,则可以设置一些Observer服务器,可以提高读取的吞吐量。
-
zookeeper的核心机制是广播机制,该机制保证了各个zk之间的数据同步(数据一致性)。zk实现的机制为ZAB协议。
- 恢复模式:如果leader崩溃了,这时候会进入恢复模式,使整个zk集群恢复到正常的工作状态(重新选举)。
- 同步模式:重新选举出leader之后,就会进入到同步模式(各个follower同步新的leader上的数据),当大多数zkServer完成了与leader的状态同步之后,恢复模式就结束了。
- 广播模式:当客户端想写入数据,这时候leader会发起提议,当leader的提议被大多数zkServer统一之后,leader就会去修改自身的数据,并且将修改后的数据广播给其他的follower。
-
zk选举核心概念
- myid:zk集群中服务器的唯一标识,例如有三台服务器,那么编号分别是1,2,3
- zxid:为Long类型,其中高32位标识epoch,低32位表示xid。及zxid由两部分组成:epoch和xid。每个leader都会具有一个不同的epoch值,表示一个时期、时代。当新的leader产生的时候,会更新所有的zkServer中zxid中的epoch的值。而xid则为zk的事务id,每一个写操作都是一个事务,都会有一个xid。每一个写操作都需要由leader发起一个提议,由所有的follower表决是否同意本次写操作。
-
逻辑时钟:逻辑时钟,Logicalclock,是一个整形数,该概念在选举时称为logicalclock,而在zxid中则为epoch的值。即Logicalclock与epoch是同一个值,在不同情况下的不同名称。
-
zk的选举状态:
- LOOKING:选举状态(选举leader的状态)
- LEADING:领导者状态,处于该状态的服务器称为Leader
- FOLLOWING:随从状态,同步leader状态。处于该状态的服务器称为Follower
- OBSERVING:观察状态,同步leader状态。处于该状态的服务器称为Observer
-
zk集群选举发生的时机:整个集群群龙无首的时候(1、服务启动;2、当leader发生了宕机)
-
选举机制:集群中半数的zkServer同意的时候就会产生新的leader(在搭建zk集群的时候一般都是奇数个)
-
选举的算法:
-
在服务启动的时候:
第一台server在启动的时候,给自己投票,发布投票结果(myid和zxid);
第二台server在启动的时候,同样给自己投票,发布投票结果(myid和zxid),跟第一台服务器交互投票结果,zxid与第一台zxid是一样的,但是myid比第一台服务器大,所以第二台胜出;
第三台服务器在启动的时候,只能会称为follower,因为之前的leader已经选举产生了。
-
在leader宕机的时候
当leader节点宕机后,另外的follower将处于looking状态,进入选举的状态,在zxid不一致的时候,zxid大的server表示数据比较新,就会选举zxid大的server为新的leader;当zxid相同的时候,有限选择myid大的为新的leader。
-
zookeeper的选举机制
最新推荐文章于 2024-04-04 15:05:52 发布