zk集群选举核心概念及选举时状态 选举发生的时机及选举算法
手动搭建zk集群的时候就会接触到myid。
myid :这是 zk集群中服务器的唯一标识,称为myid。这个存在于文件里面,例如,有三个zk服务器,那么编号分别是1,2,3。在搭建zk集群的时候可以给到myid是1,2,3这种。这个是集群当中服务器的唯一标识。
zxid
ReentranReadWriteLock 32位
高位 低位
0000000000000000 0000000000000000
epoch xid
00000000000000000000000000000000 00000000000000000000000000000000
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的值。 即 epoch与logicalclock是同一个值,在不同情况下的不同名称。
zk的选举状态
- LOOKING,选举状态(查找Leader的状态)。如果某个时刻,leader发生了宕机,这台服务器挂了,那么整个集群就会进行一个重新的选举。那么集群中的server都是looking的状态。这个状态表示在寻找leader的状态。
- LEADING,领导者状态。处于该状态的服务器称为 Leader。
- FOLLOWING,随从状态,同步 leader 状态。处于该状态的服务器称为Follower。一旦选举产生了leader,那么其他机器就处于following状态。处于随从的server就会去同步leader的状态。
- OBSERVING,观察状态,同步 leader状态。处于该状态的服务器称为Observer。
简介:zk集群选举发生的时机及选举算法
发生时机:整个集群群龙无首的时候(1.服务启动2.leader宕机之后)
选举机制:集群中,半数zkServer同意,则产生新的leader(搭建集群时,一般都是奇数个)
三台服务器,最多允许一台宕机,四台服务器,也是最多允许一台宕机。如果宕机超过2台,那么集群就会陷入宕机的状态。选择3台相对于四台来说可以节省资源,因为3个效果和4个的效果是一样的。
选举算法: 对比(myid,zxid),先对比zxid,zxid大者(大表示数据越新)胜出,成为leader,如果zxid一致,则myid大者成为leader。
myid3去启动的时候,同样给自己进行投票,和之前两台去交换信息。尽管这个时候,第三台服务器myid大,但是之前在选举的时候,第二台已经胜出了,所以这个时候也会成为follower。1,3这两台是follower,myid2成为集群的leader。
还有一种情况是leader宕机的时候,那么集群就无法对外提供服务了,因为写入操作只有leader可以处理。
选举会根据投票的结果,根据投票结果再去看zxid。
端口的作用 2181 对client端提供服务2888集群内及其通讯使用的端口3888集群选举leader。
