ZooKeeper尝试连接到AWS上已删除的堆栈

时间:2019-04-09 20:00:59

标签: amazon-web-services apache-zookeeper

我经常观察非常奇怪的情况,试图在Amazon Cloud上启动Zookeeper(ZK)集群。 如果网络中没有现有的群集ZK,则一切都很好,也就是说,所有新实例都合并到了新群集中(“冷”启动)。如果我需要启动另一个云堆栈(3或5台计算机,没关系),将它们加入现有的ZK群集,然后删除旧堆栈,则会出现问题。

典型数据流如下所述。

  1. 云堆栈1从头开始,构成一个ZK群集。该群集包含主机1.1、1.2和1.3(假名)。
  2. 一段时间之后,云堆栈2启动并加入到现有集群中。现在,群集包含主机1.1、1.2、1.3、2.1、2.2、2.3。
  3. 堆栈1中的所有主机都切换为“观察者”。
  4. 堆栈1已删除。
  5. 通过“ reconfig -remove XXX”将堆栈1中的所有主机从ZK config中删除。 问题从这里开始
  6. 堆栈3启动。主机3.1、3.2和3.3需要加入到当前群集中,该群集仅包含来自堆栈2 的主机。堆栈1中没有主机处于群集配置中。
  7. 来自堆栈3的主机尝试严格顺序依次连接到群集,而不是同时连接。

  8. 主机3.1以“观察者”身份加入群集。仍然没有发现问题。

  9. 当新主机3.1试图通过“ reconfig -add XXX ”切换到参与者时,
  10. 问题大约在70%的时间内开始(并非每次!)。日志表明它尝试从不再存在的堆栈 1 连接到主机:
    2019-04-02 17:37:27,960 [myid:2557] - WARN  [QuorumPeer[myid=2557] 
    (plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):QuorumCnxManager@660] - 
    Cannot open channel to 2336 at election address /XX.XX.XX.11:3888
    java.net.NoRouteToHostException: No route to host (Host unreachable)

此处的IP“ XX.XX.XX.11 ”是堆栈1中的主机1.1。 在第一个错误消息的正下方显示了另一个错误消息:

2019-04-02 17:37:32,968 [myid:2557] - WARN  [QuorumPeer[myid=2557]
(plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):QuorumCnxManager@660] - 
Cannot open channel to 1270 at election address /XX.XX.XX.12:3888
java.net.SocketTimeoutException: connect timed out

此处的IP“ XX.XX.XX.12 ”是堆栈1中的主机1.2。

需要说这种情况并非每次都发生。有时,一切正常。正如我上面提到的,麻烦从3发生2次。

典型配置文件之前,尝试将主机 3.1 切换为“ 参与者”(如下所示(“ zoo.cfg.dynamic 。[version] “:

server.2584=XX.XX.XX.21:2888:3888:participant;0.0.0.0:2181
server.2601=XX.XX.XX.22:2888:3888:participant;0.0.0.0:2181
server.2828=XX.XX.XX.23:2888:3888:participant;0.0.0.0:2181
server.2844=XX.XX.XX.31:2888:3888:observer;0.0.0.0:2181

21、22、23来自堆栈2,而31来自堆栈3,无法将其转换为“ 参与者”。

请帮忙。 感谢您的建议。

0 个答案:

没有答案