当前位置: 首页 > 知识库问答 >
问题:

HAProxy关闭长期存在的TCP连接,忽略TCP keepalive

符风畔
2023-03-14

我已经配置了HAProxy(1.5.4,但我也尝试了1.5.14),以便在TCP模式下平衡5672端口上公开AMQP协议(WSO2 Message Broker)的两台服务器。客户端通过Haproxy创建并使用到AMQP服务器的永久连接。

我更改了客户端和服务器TCP keepalive超时,设置net.ipv4.tcp_keepAlive_time=120(CentOS 7)。

在HAProxy中,我将timeout Client/Server设置为200秒(>120秒的keepalive数据包),并使用了clitcpka选项。

haproxy.conf

global
    log 127.0.0.1   local3
    maxconn 4096
    user haproxy
    group haproxy
    daemon
    debug

listen messagebroker_balancer 172.19.19.91:5672
    mode tcp
    log global
    retries 3
    timeout connect 5000ms
    option redispatch
    timeout client 200000ms
    timeout server 200000ms
    option tcplog
    option clitcpka 
    balance leastconn
    server s1 172.19.19.79:5672 check inter 5s rise 2 fall 3
    server s2 172.19.19.80:5672 check inter 5s rise 2 fall 3

共有1个答案

赖杰
2023-03-14

TCP keep alive位于传输层,仅用于处理连接上的某些流量,因此中间系统(如数据包过滤器)不会松动任何状态,并且终端系统可以注意到与另一端的连接是否中断(可能是因为某些东西崩溃或网络电缆中断)。

TCP保持活动状态与您已显式设置为200s的应用程序级空闲超时无关:

timeout client 200000ms
timeout server 200000ms

如果连接空闲,即没有传输数据,则触发此超时。TCP keep alive不传输任何数据,这些数据包的有效负载为空。

 类似资料:
  • 提前致谢

  • 我创建了一个使用标记框下拉列表的web应用程序。这在除Chrome浏览器(版本21.0.1180.89)之外的所有浏览器中都非常有效。 尽管字段和字段都具有属性,但Chrome坚持显示该字段以前输入项的下拉历史记录,这将删除标记框列表。

  • 我试图使用Akka和Scala编写一个TCP服务器,它将实例化参与者,并在客户端分别连接和断开连接时停止参与者。我有一个TCP绑定执行器, 上面实例化上的TCP侦听器,并将处理程序参与者注册到每个连接。 我没有在附近配置的非Windows机器上进行测试,因为我认为这与我在Windows上运行有关,因为在搜索之后,我发现了一个仍然打开的bug--https://github.com/akka/akk

  • 我有一个作为字符串接收的HTML文档,然后使用jSoup解析它。此HTML文档(字符串形式)包含

  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)

  • 在Mac OS X 10.8机器上,我有一台Tomcat 7.0.40服务器和一台客户端,都在本地运行。通过三方握手建立TCP连接,然后立即从服务器发送FIN、ACK和RST。客户端收到“来自服务器的文件结束”或“连接重置”。 TCP序列: 客户端SYN 服务器SYN,确认 客户端确认 服务器[TCP窗口更新]确认字符 服务器FIN,确认字符 客户端确认字符 服务器[TCP Dup确认字符]确认字