Linux
在 Linux 上配置 HAProxy 以接受 10K 並發連接
我在 Ubuntu 14.04(修改)上執行了 HAProxy 1.5。它接受 http 和 https 埠上的連接。兩個後端應用程序使用持久連接處理請求。
當我創建大約 2200 個客戶端連接時,haproxy 停止接受其他連接。但我希望這個系統能夠接受至少 10K 的同時連接。
這是連接統計資訊:
# ss -s TCP: 4119 (estab 4098, closed 6, orphaned 0, synrecv 0, timewait 6/0), ports 0 Transport Total IP IPv6 TCP 4113 4106 7 INET 4128 4117 11
我已經調整了程序的最大打開文件數:
# cat /proc/1012/limits Limit Soft Limit Hard Limit Units Max open files 240017 240017 files
我的 haproxy.config 文件:
global log /dev/log syslog debug daemon user haproxy group haproxy maxconn 120000 spread-checks 4 defaults log global timeout connect 30000ms timeout client 300000ms timeout server 300000ms frontend http-in mode http bind :80 option httplog option forwardfor reqadd X-Forwarded-Proto:\ http default_backend http-routers frontend https-in mode http bind :443 ssl crt /opt/haproxy/cert.pem no-sslv3 option httplog option forwardfor option http-server-close reqadd X-Forwarded-Proto:\ https default_backend http-routers frontend ssl-in mode tcp bind :4443 ssl crt /opt/haproxy/cert.pem no-sslv3 default_backend tcp-routers backend http-routers mode http balance roundrobin server node0 192.168.10.2:80 check inter 1000 server node1 192.168.10.2:80 check inter 1000 backend tcp-routers mode tcp balance roundrobin server node0 192.168.10.2:80 check inter 1000 server node1 192.168.10.2:80 check inter 1000
據我所知,listen block maxconn 與 global maxconn 不同。使用 global maxconn,您可以限制讓 haproxy 程序處理的最大連接數。
Listen / frontend 部分有自己的 maxconn,它限制了每個偵聽器的連接數。所以,試著在你的前端部分設置 maxconn,或者至少在預設部分設置它。
所以要麼:
defaults maxconn 10000
或按前端設置。
您的 HAProxy 機器的硬體配置是什麼?核心、RAM、網路介面等?
我們遇到了許多 HAProxy 性能問題。這裡有一些想法:
- 將流量分成兩個 HAProxy 伺服器,每個伺服器充當另一個伺服器的備份。
- 提高nbproc以反映特定硬體上的核心數量。
- 如果您使用的是第 7 層模式,請查看是否可以下拉到第 4 層模式以獲得更多吞吐量。