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

本文由 空心菜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Oct 21, 2018 at 02:54 pm