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 驱动程序。但我不确定在这种情况下这对你有多大帮助。
我已经在 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 驱动程序。但我不确定在这种情况下这对你有多大帮助。