在 Linux 上配置 HAProxy 以接受 10K 个同时连接

在 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

答案1

据我所知,监听块 maxconn 与全局 maxconn 不同。使用全局 maxconn,您可以限制 haproxy 进程处理的最大连接数。

Listen / frontend 部分有自己的 maxconn,它限制了每个 listener 的连接数。因此,请尝试在 frontend 部分也设置 maxconn,或者至少在 default 部分设置它。

因此,要么:

 defaults
     maxconn 10000

或者根据前端进行设置。

答案2

您的 HAProxy 机器的硬件配置是什么?核心、RAM、网络接口等?

我们遇到了许多 HAProxy 性能问题。以下是一些想法:

  1. 将流量分成两个 HAProxy 服务器,每个服务器充当另一个服务器的备份。

  2. 增加nb进程来反映你的特定硬件上的核心数量。

  3. 如果您正在使用第 7 层模式,请查看是否可以降级到第 4 层模式以获得更大的吞吐量。

答案3

Haproxy 自 1.5 版本以来已经发生了变化,但管理指南请参阅“5. 文件描述符限制”一节中的要点,这些是您可能会遇到的限制:

1-文件描述符的最大数量。由 Haproxy 在启动时自动设置。

规则 maxconn 值 x 2 ~= 最大文件描述符

在conf文件上:

maxconn 500000

形成网络统计报告:

maxconn = 500.000
maxsock = 1.000.070

从系统来看:

# pidof haproxy
# cat /proc/630/limits | grep 'open files'
Limit                     Soft Limit             Hard Limit             Units 
Max open files            1.000.070              1.000.070              files

可识别的错误 -> strace accept() 或 socket() 返回“-1 EMFILE”

2- 系统范围的文件描述符。根据内存量在启动时设置

# cat /proc/sys/fs/file-max
3.074.560

可识别的错误 -> strace accept() 或 socket() 返回“-1 ENFILE”

3- 每个进程的文件描述符数量的硬限制。

# cat /proc/sys/fs/nr_open 
1.048.576

可识别的错误 -> strace accept() 或 socket() 返回“-1 ENFILE”

相关内容