Nameko/RabbitMQ: OSError: 服务器意外关闭连接

3
我有两个使用RabbitMQ通过RPC通信的nameko服务。在本地使用docker-compose一切正常。然后我将所有内容部署到DigitalOcean上的Kubernetes/Istio集群中,并开始出现以下错误。它每隔10/20/60分钟重复一次。服务之间的通信正常(我想是在重新连接之前和之后),但日志混乱,出现了不应该发生的意外重新连接。 Helm RabbitMQ配置文件 我尝试增加RAM和CPU配置(值为上述配置文件中的512MB和400m),但仍然有相同的行为。
注意:我在部署后没有触摸服务,没有发送任何消息或进行任何请求,而且我在大约60分钟内第一次遇到这个错误。当我进行请求时,它们成功了,但最终我们仍然会在日志中看到这些错误。
Nameko服务日志:
"Connection to broker lost, trying to re-establish connection...",
"exc_info": "Traceback (most recent call last):
File \"/usr/local/lib/python3.6/site-packages/kombu/mixins.py\", line 175, in run for _ in self.consume(limit=None, **kwargs):
File \"/usr/local/lib/python3.6/site-packages/kombu/mixins.py\", line 197, in consume   conn.drain_events(timeout=safety_interval)
File \"/usr/local/lib/python3.6/site-packages/kombu/connection.py\", line 323, in drain_events
return self.transport.drain_events(self.connection, **kwargs)
File \"/usr/local/lib/python3.6/site-packages/kombu/transport/pyamqp.py\", line 103, in drain_events
return connection.drain_events(**kwargs)
File \"/usr/local/lib/python3.6/site-packages/amqp/connection.py\", line 505, in drain_events
while not self.blocking_read(timeout):
File \"/usr/local/lib/python3.6/site-packages/amqp/connection.py\", line 510, in blocking_read\n    frame = self.transport.read_frame()
File \"/usr/local/lib/python3.6/site-packages/amqp/transport.py\", line 252, in read_frame
frame_header = read(7, True)
File \"/usr/local/lib/python3.6/site-packages/amqp/transport.py\", line 446, in _read
raise IOError('Server unexpectedly closed connection')
OSError: Server unexpectedly closed connection"}
{"name": "kombu.mixins", "asctime": "29/12/2019 20:22:54", "levelname": "INFO", "message": "Connected to amqp://user:**@rabbit-rabbitmq:5672//"}

RabbitMQ日志

2019-12-29 20:22:54.563 [warning] <0.718.0> closing AMQP connection <0.718.0> (127.0.0.1:46504 -> 127.0.0.1:5672, vhost: '/', user: 'user'):
client unexpectedly closed TCP connection
2019-12-29 20:22:54.563 [warning] <0.705.0> closing AMQP connection <0.705.0> (127.0.0.1:46502 -> 127.0.0.1:5672, vhost: '/', user: 'user'):
client unexpectedly closed TCP connection
2019-12-29 20:22:54.681 [info] <0.3424.0> accepting AMQP connection <0.3424.0> (127.0.0.1:43466 -> 127.0.0.1:5672)
2019-12-29 20:22:54.689 [info] <0.3424.0> connection <0.3424.0> (127.0.0.1:43466 -> 127.0.0.1:5672): user 'user' authenticated and granted access to vhost '/'
2019-12-29 20:22:54.690 [info] <0.3431.0> accepting AMQP connection <0.3431.0> (127.0.0.1:43468 -> 127.0.0.1:5672)
2019-12-29 20:22:54.696 [info] <0.3431.0> connection <0.3431.0> (127.0.0.1:43468 -> 127.0.0.1:5672): user 'user' authenticated and granted access to vhost '/'

UPD:

兔子pod yaml


分享 Kubernetes 节点上的 RabbitMQ Pod YAML。 - P Ekambaram
@PEkambaram 我已经更新了问题,并附上了使用 kubectl get po rabbit-rabbitmq-0 -o yaml 生成的yaml文件。 - Max
2个回答

3

问题出在Istio代理作为侧车容器注入到RabbitMQ pod中。您需要从RabbitMQ中排除Istio代理,然后它应该正常工作。


12个小时没有任何问题,看起来问题已经解决了!谢谢! - Max
很高兴知道问题已经解决。感谢您的慷慨奖励。 - P Ekambaram

0

你尝试过增加连接的心跳吗?很可能是由于不活动而导致连接在较低级别上终止。

还要确保您有足够的资源来运行主机上的所有容器。

我遇到了类似的问题,但我不确定以下哪个解决了我的问题:

  1. 适当的资源管理
  2. 在DockerFile中创建一个入口点,运行带有应该在无限循环中执行的代码文件的bash脚本。(我知道这个解决了内存泄漏 - bash脚本执行带有您的代码的文件,您的代码侦听消息,获取消息并执行,退出代码,bash脚本再次加载它....)。 我的工作人员在每个消息后重新启动(整个工作人员退出并启动新的工作人员 - 不好的想法)。

希望这能帮助到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接