Getting "TimeoutError: [Errno 110] Connection timed out" in py2neo when neo4j db is exposed through loadbalancer

Getting "TimeoutError: [Errno 110] Connection timed out" in py2neo when neo4j db is exposed through loadbalancer

我已经在 k8s 中部署了 neo4j 社区版(版本 4.0.0),并且它已经通过 nginx-ingress 和负载均衡器公开(bolt 和浏览器)。

现在,当尝试使用 py2neo(最新版本)连接到此数据库时,它工作正常。但是我在闲置 20 或 25 分钟后收到 异常消息:损坏

请注意,AWS 负载均衡器中的空闲超时时间已更改为 3600 秒,并且 Nginx 入口的空闲超时时间也已更改。

exeption message: broken.

完整日志:

Traceback (most recent call last):
  File "/tmp/test/py2neo/wiring.py", line 270, in send
    n = self.__socket.send(self.__output)
TimeoutError: [Errno 110] Connection timed out
During handling of the above exception, another exception occurred:
in query
    return self.graph.run(query).data()
  File "/tmp/test/py2neo/database.py", line 579, in run
    return self.auto().run(cypher, parameters, **kwparameters)
  File "/tmp/test/py2neo/database.py", line 918, in run
    result = self._connector.auto_run(self.graph.name, cypher, parameters, hydrant)
  File "/tmp/test/py2neo/client/__init__.py", line 996, in auto_run
    cx.sync(result)
  File "/tmp/tes/py2neo/client/bolt.py", line 318, in sync
    self._send()
  File "/tmp/test/py2neo/client/bolt.py", line 354, in _send
    sent = self._writer.send()
  File "/tmp/test/py2neo/client/packstream.py", line 652, in send
    return self._tx.send()
  File "/tmp/test/py2neo/wiring.py", line 273, in send
    raise WireError("Broken")
py2neo.wiring.WireError: Broken

流量是这样的:

py2neo client ---> botl address(record in route53 against loadbalancer) ---> loadbalancer ---> nginx-ingress--->neo4j service---> neo4j docker container(standalone)

谁能帮我解决这个问题?

您对这里的期望是什么?因为 py2neo 不包含对抗恶意网络环境的工具,在这些环境中,连接被第三方网络组件意外关闭。

另外,我不明白你的整体拓扑结构。你说你正在使用社区版,因此你不能 运行 集群,但你提到了负载平衡器。您在哪些服务器上进行负载平衡?社区版只能 运行 个单实例。还有,为什么要把nginx也放在那里?

对我来说,你已经回答了你自己的问题。您已插入使连接超时的网络组件,而 py2neo 正在报告这一点。如果您想在此类连接失败后恢复,您将需要构建客户端代码来检测并重试。

如果您使用的是临时集群(因此是企业版),我建议您改用官方 Python 驱动程序。但我不确定在这种情况下这对你有多大帮助。