我有一个包含 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地址。我的问题是,zk01 现在在我的 zookeeper 集群中了吗?如果是这样,为什么它给出的消息就像它没有服务请求一样。如果没有,我应该如何将其添加到集群中?
最佳答案
我遇到了完全相同的问题。
我看到新 IP 列在其他两台服务器的统计信息中,就像上面一样,但是数据目录中没有正确的快照/事务日志,所以我假设新服务器没有正确加入集群.
基于 https://issues.apache.org/jira/browse/ZOOKEEPER-338 (这是针对客户端的,但根据票证中的详细信息显然也是服务器的一个问题)听起来 zookeeper 在确定主机的 IP 后不会重新运行 DNS 解析。至少对于 3.5.0 之前的版本;听起来 3.5.0 有相反的问题,即重新解析每个调用并减慢 zookeeper 的速度。
这意味着(对于 3.5.0 之前的版本)如果您重新部署具有相同主机名但不同 IP 的节点,则运行 zookeeper 的现有实例不会将该主机更新为新 IP。
考虑到这一点,我看到的两个选项是:
- 停止 zookeeper 的所有实例(降低法定人数)然后开始 它备份并查看问题是否已解决。你会带动物园管理员 为此离线,因此在生产中并不是真正可行的选择 部署。
- 不要重复使用主机名;提供 zk04 而不是 zk01,并适本地更新新 zk04 上的 zoo.cfg 和 myid 文件。
在尝试第一个选项之前,我必须检查我的 zookeeper quorum 是否在生产中使用(这是我的偏好,因为我喜欢我的主机名保持一致)但是会更新这个线程并回答是否解决了这个问题在接下来的几天里。
更新:在所有节点上停止 zookeeper,然后一次重新启动一个节点,解决了这个问题。如果您能够停机,这是解决问题的简单途径。
关于apache-zookeeper - zookeeper节点恢复正常怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28300640/