当zookeeper节点恢复正常时,我该怎么办?

时间:2015-02-03 13:54:08

标签: 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地址。我的问题是,我的zookeeper集群中的zk01现在呢?如果是这样,为什么它给出了消息,就像它没有提供请求一样。如果没有,我该怎么办才能将它添加到集群?

2 个答案:

答案 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实例(降低法定人数)然后启动 它备份并查看问题是否已修复。你会带动物管家 离线这个,所以在生产中不是真正可行的选择 部署。
  • 不要重复使用主机名;提供zk04而不是zk01并适当更新新zk04上的zoo.cfg和myid文件。

我必须在尝试第一个选项之前检查我的zookeeper仲裁是否在生产中使用(这是我的偏好,因为我喜欢我的主机名一致)但是会更新这个帖子,并回答是否修复了问题在接下来的几天里。

更新:在所有节点上停止zookeeper,然后一次启动一个修复此问题。如果您能够停机,那么解决问题的方法很简单。

答案 1 :(得分:1)

需要按照配置文件中列出的顺序启动动物园管理员。 因此,关闭所有服务器,然后启动

server.1
server.2
server.3