我想在我的 java 应用程序中获取成员服务器列表及其类型(领导者或观察者)。并且还想得到死服务器。
他们有什么办法吗?我阅读了文档,但没有找到。
如果有一个内置的答案而不诉诸 JMX,那就太好了。如果您在其中一个 zookeeper 节点上,您可以读取 zoo.cfg 文件以获取服务器列表(死亡和活着的),然后分别“统计”每个服务器以查看它是否活着以及它的状态是什么(注意成功响应的“模式”属性)。例如:
$ echo stat | nc 127.0.0.1 2181
Zookeeper version: 3.4.5--1, built on 06/10/2013 17:26 GMT
Clients:
/127.0.0.1:54752[1](queued=0,recved=215524,sent=215524)
/127.0.0.1:59298[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/6
Received: 5596
Sent: 5596
Connections: 2
Outstanding: 0
Zxid: 0x10000010f
Mode: leader
Node count: 54
请注意,“stat”不会向您显示 zookeeper 合奏的其他成员——它只会向您显示连接的客户端。
Zookeeper 通过jmx公开此信息。
也可以通过直接连接到端口 2181 来查询发送“stat”命令。
有关如何从 python 执行此操作的示例,请参见: https ://github.com/apache/zookeeper/blob/765cedb5c65526384011ea958e59938fc7493168/src/contrib/huebrowser/zkui/src/zkui/stats.py