使用 Zookeeper API,是否可以知道当前服务器是否是 Zookeeper 集群的领导者?
文档提到领导者已经看到了所有追随者中最高的 zxid。. 有可能以某种方式检查吗?
使用 Zookeeper API,是否可以知道当前服务器是否是 Zookeeper 集群的领导者?
文档提到领导者已经看到了所有追随者中最高的 zxid。. 有可能以某种方式检查吗?
您可以从不同的位置找到此信息。最简单的方法是从每个 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
脚本使用。
您必须向每个实例发送一个 stat/srvr 4 字母单词,然后解析结果。领导者将是具有“模式:领导者”的那个。但是,这不是非常有用的信息。领导者可以随时更换。为什么需要这些信息?
不,这是明确隐藏的。您可以使用 JMX 或四个字母词之一,但这在客户端 API 之外。