获得;TimeoutError:[Errno 110]连接超时”;在py2neo中,当neo4j db通过负载平衡器暴露时

获得;TimeoutError:[Errno 110]连接超时”;在py2neo中,当neo4j db通过负载平衡器暴露时,neo4j,nginx-ingress,py2neo,Neo4j,Nginx Ingress,Py2neo,我已经在k8s中部署了neo4j社区版(4.0.0版),它已经通过nginx入口和负载平衡器公开(螺栓和浏览器) 现在,当尝试使用py2neo(最新版本)连接到此数据库时,其工作正常。但我得到了异常信息:在空闲20或25分钟后,我被打破了 请注意,AWS负载平衡器中的空闲超时时间已更改为3600秒,Nginx入口也将更改为3600秒 exeption message: broken. 完整日志: Traceback (most recent call last): File "/

我已经在k8s中部署了neo4j社区版(4.0.0版),它已经通过nginx入口和负载平衡器公开(螺栓和浏览器)

现在,当尝试使用py2neo(最新版本)连接到此数据库时,其工作正常。但我得到了异常信息:在空闲20或25分钟后,我被打破了

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

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不包含对抗恶意网络环境的设施,在这种环境中,第三方网络组件突发奇想而意外关闭连接

另外,我不了解您的总体拓扑结构。您说您使用的是Community Edition,因此您不能运行集群,但您提到了负载平衡器。您在哪些服务器上进行负载平衡?Community Edition只能运行单个实例。还有,为什么还要把nginx放进去呢

对我来说,你已经回答了你自己的问题。您已经插入了连接超时的网络组件,py2neo正在报告这一情况。如果您想在这种连接失败后恢复,则需要生成客户端代码来检测这种情况并重试


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

谢谢你的回答。是的,你是对的,我有一个独立的neo4j社区版数据库运行在k8s集群(私有拓扑)中。为了向世界公开neo4j服务,我们必须使用负载平衡器或节点端口。我们选择使用aws负载平衡器。我们还可以使用相同的负载平衡器,使用nginx入口控制器将基于url的流量转发到多个服务。这就是为什么我一直在使用这个loadbalancer和nginx入口将流量转发到k8s集群中运行的neo4j服务。我已经用流量跟踪编辑了这个问题。请检查这个。拓扑的清晰性很有趣,但它并没有改变任何东西。您看到此问题的原因是因为您的第三方网络组件正在超时连接,而py2neo不包含缓解此问题的工具。您有两种选择:将错误处理和重试逻辑添加到应用程序中,或者改用官方驱动程序,看看连接生存期设置或类似设置是否对您有帮助。谢谢您的回答