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 错误消息:
AMQPConnector - reporting failure: AMQPConnectorAMQPHandshakeError: ProbableAuthenticationError
[..]("ConnectionClosedByBroker: (403) 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.'"
这不是真的,因为我 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 等的时间
最后,强制使用另一个网络进行云部署,并且成功了。
这终于确定是网络问题,问题转给了网络工程师
在 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 错误消息:
AMQPConnector - reporting failure: AMQPConnectorAMQPHandshakeError: ProbableAuthenticationError
[..]("ConnectionClosedByBroker: (403) 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.'"
这不是真的,因为我 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 等的时间
最后,强制使用另一个网络进行云部署,并且成功了。
这终于确定是网络问题,问题转给了网络工程师