debuggingHAProxy

我已经在本地testing/testing了一个服务器集群,而且没有任何问题。 我最近将服务器集群设置为进行实时testing,并且发现了问题,并且认为集群中的HAProxy可能会遇到一些问题。

首先,我将介绍一下集群的结构,也许我的设置有问题,也许我需要多个代理。

我有两个HAProxy平衡的服务器群集。 我们将它们称为SC1和SC2。 主集群是SC1,HAProxy的端口80上的任何内容都将被发送到SC1。 SC1会处理请求,并通过端口8080上的代理发送另一个请求到SC2。我不认为这会是一个问题,但我注意到我的服务器上我的日志往往说SC1无法连接到SC2,我相信这是因为我的HAProxy被超载。

我认为HAProxy被超载的原因是因为当我查看我的统计信息页面时,通常需要1秒才能做出响应。 因此,我决定看看HAProxy日志。 我注意到日志中有exception,我相信这可能与我的问题有关。 每隔一分钟左右(有时更多时候会less一些),我会得到以下消息:

Oct 8 15:58:52 haproxy rsyslogd-2177: imuxsock begins to drop messages from pid 3922 due to rate-limiting Oct 8 15:58:52 haproxy kernel: [66958.500434] net_ratelimit: 2997 callbacks suppressed Oct 8 15:58:52 haproxy kernel: [66958.500436] nf_conntrack: table full, dropping packet 

我想知道这是什么影响。 这是否会导致丢包,或者这也可能导致延迟? 我该如何解决这个问题? 我在Ubuntu 12.04LTS服务器上运行。

这是我的sysctl修改:

 fs.file-max = 1000000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 

这是我的configuration文件:

 global log /dev/log local0 info log /dev/log local0 notice maxconn 50000 user u1 group g1 #debug defaults log global mode http option httplog option dontlognull option forwardfor retries 3 option redispatch option http-server-close maxconn 50000 contimeout 10000 clitimeout 50000 srvtimeout 50000 balance roundrobin listen sc1 255.255.255.1:80 maxconn 20000 server sc1-1 10.101.13.68:80 maxconn 10000 server sc1-2 10.101.13.66:80 maxconn 10000 listen sc1-1_Update 255.255.255.1:8181 maxconn 20000 server sc1-1 10.101.13.66:80 maxconn 20000 listen sc1-2_Update 255.255.255.1:8282 maxconn 20000 server sc1-2 10.101.13.68:80 maxconn 20000 listen sc2 255.255.255.1:8080 maxconn 30000 server sc2-1 10.101.13.74:80 maxconn 10000 server sc2-2 10.101.13.78:80 maxconn 10000 server sc2-3 10.101.13.82:80 maxconn 10000 listen sc2-1_Update 255.255.255.1:8383 maxconn 30000 server sc2-2 10.101.13.78:80 maxconn 15000 server sc2-3 10.101.13.82:80 maxconn 15000 listen sc2-2_Update 255.255.255.1:8484 maxconn 30000 server sc2-1 10.101.13.74:80 maxconn 15000 server sc2-3 10.101.13.82:80 maxconn 15000 listen sc2-3_Update 255.255.255.1:8585 maxconn 30000 server sc2-1 10.101.13.74:80 maxconn 15000 server sc2-2 10.101.13.78:80 maxconn 15000 listen stats :8888 mode http stats enable stats hide-version stats uri / stats auth user:pass 

sc1和sc2是主要的集群。 我必须更新服务器时使用的其他所有服务器(haproxy上的端口80到8181,例如更新服务器sc1-1)。

任何帮助这个问题将不胜感激。

谢谢

它看起来像你的连接跟踪表正在填补。 删除使用连接跟踪的iptables规则将解决问题。

如果这不是一个选项,你有RAM可用,你可以增加表的大小:

 cat /proc/sys/net/netfilter/nf_conntrack_max echo 131072 > /proc/sys/net/netfilter/nf_conntrack_max 

你也应该增加hashsize:

 cat /sys/module/nf_conntrack/parameters/hashsize echo 32768 > /sys/module/nf_conntrack/parameters/hashsize 

这些数字是我的桌面上的默认设置的两倍,我不知道你到底需要什么。 你也想把它添加到sysctl.conf中。

我会非常小心使用net.ipv4.tcp_tw_recycle它可以导致严重的NAT问题。