我经常观察非常奇怪的情况,试图在Amazon Cloud上启动Zookeeper(ZK)集群。 如果网络中没有现有的群集ZK,则一切都很好,也就是说,所有新实例都合并到了新群集中(“冷”启动)。如果我需要启动另一个云堆栈(3或5台计算机,没关系),将它们加入现有的ZK群集,然后删除旧堆栈,则会出现问题。
典型数据流如下所述。
来自堆栈3的主机尝试严格顺序依次连接到群集,而不是同时连接。
主机3.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,无法将其转换为“ 参与者”。
请帮忙。 感谢您的建议。