Linux 中的 RabbitMQ、SCP 断开连接

Linux 中的 RabbitMQ、SCP 断开连接

在 GNU/Linux 中,我制作的应用程序存在问题。它在我的开发环境中工作,大部分组件在docker中或本机运行,但在需要部署的服务器环境中随机(经常但并非总是)失败。

基础设施:

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

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

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

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

很多时候 Rabbit 连接都会启动,但最终我会收到 Rabbit 错误消息:

  • AMQPConnector - reporting failure: AMQPConnectorAMQPHandshakeError: ProbableAuthenticationError[..]("ConnectionClosedByBroker: (403) 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.'"

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

重试连接,但没有成功。

来自兔子日志:

[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的阻塞连接超时......

对我来说,有时似乎没有收到心跳。

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

答案1

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

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

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

这是我停止研究 Rabbit 配置/参数等的时候。

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

这最终确认是网络问题,并将问题转移给网络工程师。

相关内容