3

使用 Zookeeper API,是否可以知道当前服务器是否是 Zookeeper 集群的领导者?

文档提到领导者已经看到了所有追随者中最高的 zxid。. 有可能以某种方式检查吗?

4

3 回答 3

6

您可以从不同的位置找到此信息。最简单的方法是从每个 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:0x280000016
领导者
节点数:337

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

于 2018-11-01T10:12:06.940 回答
1

您必须向每个实例发送一个 stat/srvr 4 字母单词,然后解析结果。领导者将是具有“模式:领导者”的那个。但是,这不是非常有用的信息。领导者可以随时更换。为什么需要这些信息?

于 2013-02-11T03:31:05.207 回答
1

不,这是明确隐藏的。您可以使用 JMX 或四个字母词之一,但这在客户端 API 之外。

于 2012-11-25T07:57:54.783 回答