Postgresql docker swarm-从wildfly到postgres的连接随机挂起

Postgresql docker swarm-从wildfly到postgres的连接随机挂起,postgresql,docker,wildfly,docker-swarm,Postgresql,Docker,Wildfly,Docker Swarm,我在部署docker堆栈(撰写文件)时遇到了一个奇怪的问题 我有一个三节点docker swarm-master和两个工人。 所有机器都是CentOS 7.5,内核3.10.0和docker 18.03.1-ce 大多数东西都在主服务器上运行,其中之一是wildfly(v9.x)应用服务器。 其中一个工人的电脑上有一个postgres数据库。 部署堆栈后,一切正常,但一段时间后(或web应用程序中的特定操作后)请求开始挂起。 在wildfly容器内运行netstat-ntp时,Send-q中会出

我在部署docker堆栈(撰写文件)时遇到了一个奇怪的问题

我有一个三节点docker swarm-master和两个工人。 所有机器都是CentOS 7.5,内核3.10.0和docker 18.03.1-ce

大多数东西都在主服务器上运行,其中之一是wildfly(v9.x)应用服务器。 其中一个工人的电脑上有一个postgres数据库。 部署堆栈后,一切正常,但一段时间后(或web应用程序中的特定操作后)请求开始挂起。 在wildfly容器内运行
netstat-ntp
时,Send-q中会出现52个字节:

tcp        0     52 10.0.0.72:59338         10.0.0.37:5432          ESTABLISHED -
在postgres端,连接也处于
已建立
状态,但发送和接收队列为0。 它总是正好是52个字节。我在某处读到,带有时间戳的
ACK
数据包也是52字节。我有什么办法可以证实吗? 我们设置了以下sysctl可调参数:

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_timestamps = 0
前三个是需要的,因为

堆栈中的所有服务都连接到docker创建的同一
默认
网络。
现在,如果我将postgres服务移动到与wildfly服务位于同一主机上,那么问题似乎不会出现,或者如果我为postgres声明一个单独的网络,并将其仅添加到需要数据库(当然还有数据库)的服务中,那么问题似乎也不会出现


有没有人遇到过类似的问题?有人能提供一些关于我如何进一步调试问题的建议吗?

事实证明,这是swarm中的池连接存在的一个已知问题,不同节点上有服务

基本上,解决方法是在套接字上设置上述可调项+启用tcp keepalive。有关更多详细信息,请参阅和