Zookeeper如何检查特定服务器是否为leader?

3
使用Zookeeper API,能否知道当前服务器是否是Zookeeper集群的领导者?
文档提到:“领导者已经看到所有追随者中最高的zxid。” 有没有办法进行检查?

你为什么想知道自己是否连接到了领导者? - sbridges
没有特别的原因。我可以以一种不需要知道这个的方式编写我的逻辑。只是想知道是否可能。 - arahant
2
你可以查看ServerFault上的这篇文章 - 030
3个回答

7
您可以从不同的位置找到此信息。 最简单的方法是从每个Zookeeper机器运行脚本./bin/zkServer.sh status。您将得到以下形式的答案:

ZooKeeper JMX默认启用
使用配置:/path/to/conf/zoo.cfg
模式:follower

对于领导节点,最后一行将相应地显示。
如果您想从导入了ZK客户端库的Java代码中实现此目标,则可以像这样使用类FourLetterWordMain
String zkAnswer = FourLetterWordMain.send4LetterWord ("<zk-address>", <zk-port>, "srvr");

答案字符串如下所示:

zookeeper版本:3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f,构建于2017年3月23日10:13 GMT
延迟最小值/平均值/最大值:0/0/6
接收数量:18893
发送数量:18957
连接数:2
未完成的请求数:0 Zxid:0x280000016d
模式:领导者
节点计数:337

这段代码基本上也被zkServer.sh脚本使用。


1
你需要向每个实例发送stat/srvr 4-letter单词,然后解析结果。领导者将是带有“Mode:Leader”的实例。但这并不是非常有用的信息,领导者可以随时更改。你为什么需要这个信息?

1

不,那是明确隐藏的。您可以使用JMX或其中一个四个字母的单词,但这超出了客户端API的范围。


四个字母的单词之一? - arahant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接