我们正在努力为haproxy找到来自客户端的get和post请求的最佳调优选项(不是用户浏览网络类型的交易)。
使用30k个线程运行jmeter测试,该线程包括5次调用服务器,1个用户注册和一些更新调用。这些通过管道推送json数据。
这里是我们当前的haproxy配置
global
log /dev/log local0 #notice
maxconn 14000
tune.bufsize 128000
user netcom
group netcom
pidfile /tmp/haproxy.pid
daemon
nbproc 7
#debug
#quiet
defaults
log global
mode http
### Options ###
option httplog
#option logasap
option dontlog-normal
#option dontlognull
option redispatch
option httpchk GET /?method=echo HTTP/1.1
option tcp-smart-accept
option tcp-smart-connect
option http-server-close
#option httpclose
#option forceclose
### load balance strategy ###
balance leastconn
#balance roundrobin
### Other ###
retries 5
maxconn 14000
backlog 100000
### Timeouts ###
#timeout client 25s
timeout client 60s
#timeout connect 5s
timeout connect 60s
#timeout server 25s
timeout server 60s
timeout tunnel 3600s
timeout http-keep-alive 1s
#timeout http-request 15s
timeout http-request 60s
#timeout queue 30s
timeout queue 30s
timeout tarpit 60s
listen stats *:1212
stats enable
stats show-node
stats show-desc xxxxProxy
stats realm xxxxProxy\ Statistics
stats auth xxxx:xxxx
stats refresh 5s
stats uri /
frontend http-in
bind *:1111
bind *:2222 ssl crt /home/netcom/nas/haproxy/xxxx.co.pem verify optional
acl user_request url_reg method=user.register
use_backend user_group if user_request
default_backend other_group
backend user_group
server n15 xxxx:8080 maxconn 3500 check port 8097 inter 2000
server n2 xxxx:8080 maxconn 3500 check port 8097 inter 2000
server n9 xxxx:8080 maxconn 3500 check port 8097 inter 2000
server n14 xxxx:8080 maxconn 3500 check port 8097 inter 2000
server n22 xxxx:8080 maxconn 3500 check port 8097 inter 2000
server n24 xxxx:8080 maxconn 3500 check port 8097 inter 2000
server n25 xxxx:8080 maxconn 3500 check port 8097 inter 2000
和我们在centOS 6上的sysctl
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_recycle = 1
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 20480 174760 25165824
net.ipv4.tcp_wmem = 20480 174760 25165824
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_no_metrics_save = 1
net.core.netdev_max_backlog = 10000
# Syn flood
net.ipv4.tcp_max_syn_backlog = 8096
net.core.somaxconn = 8096
任何人都会指出他们可以从头顶看到的任何明显问题。不幸的是,我没有haproxy的专业知识,所以寻求社区的帮助。
我还需要弄清楚的是如何找到盒子可以处理的最大连接,它在1 gig网络上,所有后端也在一个演出中。这是haproxy管理员http://grab.by/r12c的屏幕截图,请注意我们运行它有多个核心,所以这是一个核心的快照..因为我可以告诉网络管理员不能显示所有内容..任何想法如何获得haproxy从cmd线获得的最大conn?
无论如何只是努力工作,并希望任何人都可以给出一些提示或指示。
答案 0 :(得分:3)
首先,你似乎不应该运行多个haproxy进程。通常你不会这样做,特别是因为你正忙着测试并试图看到maxconn的。在单核上haproxy可以超越你所拥有的maxconn设置。
我经历了Snapt的系统,你拥有大部分的;我注意到它也添加了这些 -
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
另外,minimalconn不值得我建议roundrobin。因为您正在进行HTTP流量,其中包含许多小请求(我猜这本身就是诚实的)。这些都是很小的事情。