Linux

在 Linux 上配置 HAProxy 以接受 10K 並發連接

  • March 2, 2021

我在 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 性能問題。這裡有一些想法:

  1. 將流量分成兩個 HAProxy 伺服器,每個伺服器充當另一個伺服器的備份。
  2. 提高nbproc以反映特定硬體上的核心數量。
  3. 如果您使用的是第 7 層模式,請查看是否可以下拉到第 4 層模式以獲得更多吞吐量。

引用自:https://serverfault.com/questions/669596