Zookeeper Leader选举

in 互联网技术 with 0 comment  访问: 3,203 次

1、目标

基本上,服务器集群选择领导者来订购改变ZooKeeper状态的客户端请求。虽然有一个完整的过程。因此,在这篇Zookeeper文章中,我们将详细了解ZooKeeper中Leader选举的整个过程。此外,我们将了解如何在ZooKeeper中选出领导者。

2、什么是Zookeeper Leader选举?

由服务器集群选择的服务器就是我们所说的Leader。此外,该Leader继续得到该集团的支持。基本上,订购更改ZooKeeper状态的客户端请求是Leader的主要目的。Zookeeper State包括create,setData和delete。此外,它将每个请求转换为事务。此外,它向追随者(followers)提议,整体接受并按照领导者发布的顺序应用它们。

但是,当进程启动时,它进入ELECTION状态。并且,在这种状态下,该进程试图选出新的领导者或成为领导者。因此,该进程进入FOLLOWING状态,并在找到当选领导者时开始跟随领导者。因此,我们可以说FOLLOWING状态中的进程是关注者。

此外,如果进程是选举后的领导者,则该进程进入LEADING状态并成为领导者。

3、如何在Zookeeper中选出Leader?

在创建代表客户"提议"的znode时,使用ZooKeeper进行领导者选举的一种简单方法是使用SEQUENCE|EPHEMERAL标志。它的基本概念是有一个znode,比如/election这样每个znode创建一个带有两个标志SEQUENCE|EPHEMERAL的子znode/election/n_

序列号高于之前附加到/election子节点的任何序列号,由Zookeeper自动附加序列标志。换句话说,Leader是一个创建具有最小附加序列号的znode的过程。

虽然一定要注意领导的失败。因为如果当前的领导者失败了,这就有助于新客户成为新的领导者。

还有另外一种解决方案。这是让所有应用程序流程密切关注当前最小的Znode,并且如果它们是新的领导者,还要检查当最小的Znode消失时。虽然这会导致群体效应。这是所有其他进程接收通知并在/election上执行getChildren以获得当前领导者失败时/election的子项的当前列表。此外,如果客户端数量很大,它会导致ZooKeeper服务器必须处理的操作数量激增。

ZooKeeper Leader Election的伪代码是:

让我们假设选择是应用程序的选择路径。所以,为了自愿成为领导者:

使用路径"ELECTION/n_",使用SEQUENCE和EPHEMERAL标志创建Znode z;
那么我们假设我是z的序列号,C是"ELECTION" 的children;
另外,j是最大的序列号,使得j < i和n_j是C中的Znode,注意"ELECTION/n_j"的变化;

此外,在收到Znode删除通知后:

我们假设C是ELECTION的新子集;

如果z是C中的最小节点,则执行leader过程;

否则,j是最大的序列号,使得j < i和n_j是C中的Znode,注意"ELECTION/n_j"的变化;

但是,请确保子代码列表中没有前面的znode的Znode。虽然它表示并不意味着这个znode的创建者意识到它是当前的领导者。并且,为了确认领导者已经执行了领导程序,应用程序可能会考虑创建一个单独的Znode。

所以,这一切都在Apache ZooKeeper领导人的选举中。

英文原文: http://t.cn/EzneBfE

WeZan