Linux 中的 RabbitMQ 在某些部署中随机丢弃连接

RabbitMQ in Linux randomly dropping connections in some deployment

在 GNU/Linux 我的申请有问题。 它在我的开发环境中工作,大多数组件 运行 在 docker 或本机中,但它在需要部署它的服务器环境中随机(经常,但不总是)失败。

基础设施:

[App in Ubuntu Server 20.04 host-1]   <--->[router+firewall]<--->   [Ubuntu Server 20.04 host-2]

两台服务器似乎都有足够的资源 -4 个 CPU,4 GB RAM。

机器 运行 应用程序必须连接到主机 2 中的 RabbitMQ 运行,并且发布(我在这里没有看到失败)和订阅(往往会失败)那里有不同的队列。

问题:有时它可以工作(有一个路由器 + 防火墙,但问题似乎不存在),但很多时候,由于某种原因,两个连接随机失败。 我检查了 MTU(1500,它在其他部署中工作)、ulimit 似乎没问题等等,但我没有发现问题...

多次启动 Rabbit 连接,但最终我收到 Rabbit 错误消息:

这不是真的,因为我 100% 确定凭据没问题,事实上,它们有时会起作用。

重试连接,但没有成功。

来自 Rabbit 日志:

[info] <0.16188.30> Closing all channels from connection 
   'xxx.yyy.zzz.kkk:41426 -> yyy.zzz.kkk.zzz:5672' because it has been
   closed 
[info] <0.16192.30> accepting AMQP
   connection <0.16192.30> (xxx.yyy.zzz.kkk:41430 ->
   yyy.zzz.kkk.zzz:5672) 
[error] <0.16192.30>
   Error on AMQP connection <0.16192.30> (xxx.yyy.zzz.kkk:41430 ->
   yyy.zzz.kkk.zzz:5672, state: starting): PLAIN login refused: user
   'someuser' - invalid credentials

我尝试了 500 和 90 的心跳,以及 300 的阻塞连接超时...

对我来说,好像有时收不到心跳。

我很迷茫,我想这可能是性能或网络问题,因为在其他受控环境中这是可行的,那么,我可以检查什么?

好吧,令人惊讶的是,最明显的原因似乎是实际原因:云计算平台中的虚拟网络已损坏。

调试过程是如何完成的(为了说服网络工程师检查):

  • 应用来自不同网络的网络分析工具(traceroute、nmap)。在客户端和服务器之间的连接完成的地方,一些端口出现故障。
  • SSH 和 SCP 从不同的 VM 到相同的目的地...从某些网络,它工作,但在客户端和服务器之间的连接完成的那个,它失败了 - 登录失败,可能是在握手协商中, 登录时管道断开,连接建立,但是一旦输入任何内容管道就断开...
  • [大量日志和屏幕截图证明这一点并指导网络工程师]

这是我停止研究 Rabbit config/parameters 等的时间

最后,强制使用另一个网络进行云部署,并且成功了。

这终于确定是网络问题,问题转给了网络工程师