今天一个rd反映连接haproxy集群报错,查看应用服务器进程大量的端口连接处于colse_wait状态。
这个haproxy的redis集群类似配置已经好几组了,配置都相同问啥别的都好好的这个却有问题。
自己尝试使用redis-cli连接(haproxy做的redis分片集群),确实能够正常连接操作,但是连接状态马上就会变成
close_wait状态,重新执行命令这个close_wait状态会恢复ESTABLISHED,但是细心看端口号已经变化,也就是redis-cli
发生了重新连接。
于是问题清晰了:用户客户端工具建立链接后,没有自动重连来保持连接,导致超时,服务器主动断开连接,客户端再次
链接的时候socket已经损坏不可用了,导致报错
解决办法:调整haproxy的超时参数:
timeout connect 5s
timeout queue 5s
timeout client 30s
timeout server 30s
timeout client-fin 30s
timeout server-fin 30s
timeout tunnel 1h
参数解释:
timeout connect 连接尝试成功连接到server的超时时间
timeout queue 在队列等待连接槽释放的超时时间
timeout server server端非活动状态超时时间
timeout client 客户端非活动状态超时时间
这个haproxy的redis集群类似配置已经好几组了,配置都相同问啥别的都好好的这个却有问题。
自己尝试使用redis-cli连接(haproxy做的redis分片集群),确实能够正常连接操作,但是连接状态马上就会变成
close_wait状态,重新执行命令这个close_wait状态会恢复ESTABLISHED,但是细心看端口号已经变化,也就是redis-cli
发生了重新连接。
于是问题清晰了:用户客户端工具建立链接后,没有自动重连来保持连接,导致超时,服务器主动断开连接,客户端再次
链接的时候socket已经损坏不可用了,导致报错
解决办法:调整haproxy的超时参数:
timeout connect 5s
timeout queue 5s
timeout client 30s
timeout server 30s
timeout client-fin 30s
timeout server-fin 30s
timeout tunnel 1h
参数解释:
timeout connect 连接尝试成功连接到server的超时时间
timeout queue 在队列等待连接槽释放的超时时间
timeout server server端非活动状态超时时间
timeout client 客户端非活动状态超时时间