【Hadoop】简单说下Zookeeper选举过程?

选票的时候,当一个服务器收到超过半数服务器以上的选票的时候,该服务器就被选举为Leader。

首先需要知道在选举的过程中,服务器投票的时候会交换选票信息,这个选票信息就包括三个值:

  • Epoch:每个Leader任期的代号。也就是一个逻辑时钟值。每投完一次票这个数据就会增加。所以每一轮选举的Epoch都不一样,如果Epoch值不是最大的,说明这次选票信息是过期的,也就不能参加本次选举
  • ZXID:事务ID。用来标识这个服务器最近一次状态变化的事务ID。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。ZXID越大,说明和Leader越近
  • SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,SID是在搭建ZK集群时在myid文件里指定的服务器唯一编号

选举的时候,服务器之间交换(Epoch,ZXID,SID)选票信息,服务器将收到的选票信息与自己的信息进行比较,比较顺序依次是Epoch、ZXID、SID,值较大的一方将获得投票,最后当某个服务器获得半数以上的投票的时候,它就成为了Leader。

Q:为什么是按照这样的值的排序来投票呢?

A:我是这么理解的,第一个是Epoch,因为选举投票过程中可能存在网络通信延迟,那就可能造成在新一轮投票中,获得上一轮的选票信息,那上一轮的选票信息不应该影响到本次投票。第二个是ZXID,它是事务ID,它的值越大,就说明当前服务器的数据越接近Leader,所以选择ZXID作为投票的一个依据可以避免数据丢失的问题。myid是服务器id,这个是避免投票时间过长的情况,
所以直接使用ID最大值终止投票。

你可能感兴趣的:(hadoop,zookeeper,大数据)