apache-zookeeper - zookeeper节点恢复正常怎么办?

标签 apache-zookeeper

我有一个包含 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/

相关文章:

java - Zookeeper中的生产者消费者队列

docker - 如何恢复kafka数据

design-patterns - 设计 MapReduce 作业以找到低于给定阈值的最大值

hadoop - Stratio 设置 : connection refused error

java - Netflix Curator 交易错误

hadoop - 伪分布式配置hbase

hadoop - 不能 ssh 权限被拒绝。 HBase Hadoop

java - KafkaSpout 没有收到来自 Kafka 的任何信息

python - 如何在Mac OS X 10.7 Lion中以32位模式构建zookeeper/zkpython?

java - 服务器 mk-worker 初始化时出错