我有一个包含3个节点的zookeeper集群:zk01,zk02和zk03。要执行维护工作,我关闭zk01并将其替换为新节点,该节点仍称为zk01。但是,当我运行“echo stat | nc zk01 2181”时,我收到错误消息“此ZooKeeper实例当前没有服务请求”。所以我为zk02和zk03尝试了这个命令:
root@zk01.gf-tokyo ~ # echo stat | nc zk02 2181
Zookeeper version: 3.3.5-cdh3u6--1, built on 03/20/2013 20:28 GMT
Clients:
/10.18.5.187:36772[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/1/67
Received: 23938
Sent: 23937
Outstanding: 0
Zxid: 0x3000f68e2
Mode: follower
Node count: 1453
root@zk01.gf-tokyo ~ # echo stat | nc zk02 2181
Zookeeper version: 3.3.5-cdh3u6--1, built on 03/20/2013 20:28 GMT
Clients:
/10.18.5.187:36773[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/1/67
Received: 23939
Sent: 23938
Outstanding: 0
Zxid: 0x3000f68e2
Mode: follower
Node count: 1453
root@zk01.gf-tokyo ~ # echo stat | nc zk03 2181
Zookeeper version: 3.3.5-cdh3u6--1, built on 03/20/2013 20:28 GMT
Clients:
/10.18.5.224:35190[1](queued=0,recved=19246695,sent=19255810)
/10.18.5.225:51732[1](queued=0,recved=1902803,sent=1911886)
/10.18.5.187:44885[0](queued=0,recved=1,sent=0)
/10.18.8.125:53937[1](queued=0,recved=1529,sent=1532)
Latency min/avg/max: 0/0/105
Received: 21223069
Sent: 21241269
Outstanding: 0
Zxid: 0x3000f68e2
Mode: leader
Node count: 1453
'10 .18.5.187'是zk01的IP地址。我的问题是,我的zookeeper集群中的zk01现在呢?如果是这样,为什么它给出了消息,就像它没有提供请求一样。如果没有,我该怎么办才能将它添加到集群?
答案 0 :(得分:2)
我遇到了同样的问题。
我看到其他两台服务器的统计信息中列出的新IP如上所述,但数据目录中没有正确的快照/事务日志,所以我假设新服务器未正确加入集群
基于https://issues.apache.org/jira/browse/ZOOKEEPER-338(适用于客户端,但基于故障单中的详细信息显然也是服务器的问题),听起来像zookeeper不会重新运行DNS解析。确定了主机的IP。至少对于3.5.0之前的版本;听起来像3.5.0有相反的问题,即重新解决每一个电话并放慢动物园管理员的速度。
这意味着(对于3.5.0之前的版本)如果重新部署具有相同主机名但IP不同的节点,则运行zookeeper的现有实例将不会将该主机更新为新IP。
考虑到这一点,我看到的两个选项是:
我必须在尝试第一个选项之前检查我的zookeeper仲裁是否在生产中使用(这是我的偏好,因为我喜欢我的主机名一致)但是会更新这个帖子,并回答是否修复了问题在接下来的几天里。
更新:在所有节点上停止zookeeper,然后一次启动一个修复此问题。如果您能够停机,那么解决问题的方法很简单。
答案 1 :(得分:1)
需要按照配置文件中列出的顺序启动动物园管理员。 因此,关闭所有服务器,然后启动
server.1
server.2
server.3