Bru*_*tos 6 load-balancing apache-zookeeper
我正在尝试创建一个负载均衡器,以便在Zookeeper 3.4.6集群前面.当我这样做时,群集运行良好,但抛出异常:
WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn @ 357] - 捕获流末尾异常EndOfStreamException:无法从客户端sessionid 0x0读取其他数据,可能客户端已关闭
org.apache.zookeeper的套接字 . server.NIOServerCnxn.doIO
(NIOServerCnxn.java:228)atg.apache.zookeeper.server.NIOServerCnxnFactory.run (NIOServerCnxnFactory.java:208)
at java.lang.Thread.run(Thread.java:745)
这意味着Zookeeper将Load Balancer理解为客户端,并尝试与其建立连接.但负载均衡器只是ping TCP 2181并且出来了.
您是否尝试在ZooKeeper集群和客户端之间使用负载均衡器?
当您为客户端提供多个端点形式的ZooKeeper连接字符串时,如:"server1,server2,server3 ...",客户端将选择其中一个服务器并在发生故障时切换.这样,如果所有客户端都具有相同的ZooKeeper端点字符串,则最终会得到一个平衡池.
如果在客户端和服务器之间放置标准负载平衡器,则可能导致此类故障.负载均衡器与ZooKeeper期望其客户端的行为方式不相符.客户端需要维护与其具有会话的特定服务器的开放TCP连接,并发送定期心跳.
ZooKeeper客户端自身负载均衡的方式存在一定的局限性(例如,在服务器重启时连接不会重新平衡),但修复这些限制需要ZooKeeper协议识别负载均衡逻辑,可能是客户端实现的一部分.