Zookeeper一致性及leader选举

zookeeper之所以能够:1.读写速度非常快,并且读的速度要比写的更快。2.在进行操作的时候,依然能够为旧的数据提供服务。这些完全都是由zk所提供的一致性所保证的。zk的一致性具有如下特点:

   (1)顺序一致性

 客户端的更新顺序与他们被发送的顺序一致。

   (2)原子性

 更新操作要么成功要么失败,没有第三种结果

  (3)单系统镜像

 无论客户端连接到哪一个服务器,他将看到相同的zk视图。

  (4)可靠性

  一旦一个更新操作被应用,那么在客户端再次更新前,其值不会发生改变。

  (5)实时性

  在特定的一段时间内,客户端看到的系统需要被保证是实时的。在此时间段内,任何系统的改变将被客户端看到,或者被客户端侦测到。

zookeeper的leader选举

     zk需要在所有的服务中选举出一个leader,然后让这个leader来负责管理集群。此时,集群中的其他服务器则成为此leader的follower。并且,当leader出现故障后,zk能够快速在follower中选举下一个leader。这就是zk的leader机制。

    leader选举的核心思想是:先创建一个EPHEMERAL 目录节点,例如“/election”。然后每个zk服务器在此目录下创建一个SEQUENCE|EPHEMEAL类型的节点,例如“election/n_”。在SEQUENCE标志下,zk将自动为每个zk服务器分配一个比前面所分配序号大的序号。此时,创建节点的zk服务器中拥有最小编号的服务器成为leader。

   在实际操作中,还应保证:当leader服务器发生故障后,系统能够快速选取下个zk服务器作为leader。为了实现这样的方案,zk是这样做的,每一个follower为follower集群中的对应着比自己节点序号小的节点中序号最大的节点设置一个watch。只有当follower设置的watch被触发时,它才进行leader选举操作,一般情况下他将成为集群中下个leader。很明显,这样的选举方式是很快的,因为每次leader选举几乎只涉及单个follower操作。

猜你喜欢

转载自blog.csdn.net/sujins5288/article/details/87370736