我正在使用Apache Curator框架创建一个由ZK管理的集群。
如果群集中的某个节点突然失去与ZK的连接,它会每隔5秒尝试重新连接一次。我使用RetryForever
政策并指定了相应的时间。
虽然 sessionTimeout / connectionTimeouts 尚未完全消失,但我们仍在尝试重新连接。
但即使我们在这段时间内提出了ZK并获得了与它的联系,我们仍然在日志中收到奇怪的消息:
11月30日星期四20:47:51.574 GMT 2017 |信息| org.apache.zookeeper.ClientCnxn $ SendThread |建立到zk_1.default / 138.122.177.23:2181的套接字连接,启动会话|客户端详细信息{sessionTag:{}} |本地主机 - startStop -1- SendThread(zk_1.default:2181)
11月30日星期四20:47:51.592 GMT 2017 |信息| org.apache.zookeeper.ClientCnxn $ SendThread |无法阅读其他内容 来自服务器sessionid 0x1600ea13dcd0000的数据,可能服务器已关闭 套接字,关闭套接字连接并尝试重新连接|客户端 详情{sessionTag:{}} | 本地主机 - startStop -1- SendThread(zk_1.default:2181)
为什么我们仍然收到这些消息并且无法完全连接到新出现的ZK节点?
P.S。:
1)稍后我发现这个error意味着ZK已经耗尽了 maxClientCnxns (与ZK的最大连接数)参数,但我还没有找到使用Curator进行配置...仅在测试中...
2)在ZK服务器端,我看到以下错误:
2017-12-04 15:48:29,972 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0 / 0.0.0.0:2181:NIOServerCnxnFactory @ 192] - 来自/192.168.107.4:37130的接受套接字连接 2017-12-04 15:48:29,974 [myid:] - INFO [NIOServerCxn.Factory:0.0.0.0 / 0.0.0.0:2181:ZooKeeperServer @ 915] - 拒绝客户端/138.122.177.23:37130的会话请求看到zxid 0xd我们的最后一个zxid是0x0,客户端必须尝试另一台服务器
答案 0 :(得分:2)
这意味着客户端正在与ZK服务器通话并且最后看到了事务 ID 0x11be4(或十进制的72676)。它正在尝试的当前服务器 连接当前有事务ID 0x3f82(或十进制16258) 是(很)低。假设客户端看到的数据比后者多 服务器可以提供什么,可能导致冲突 信息。它没有给客户提供不好的(过时的)信息,而是拒绝 假设客户端将重新连接到的连接 仲裁中的另一台服务器,包含更多最新数据或当前数据 过期的服务器最终将从另一个法定数量级收到快照 成员赶上来。