AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 669596
Accepted
lexsys
lexsys
Asked: 2015-02-19 06:16:50 +0800 CST2015-02-19 06:16:50 +0800 CST 2015-02-19 06:16:50 +0800 CST

在 Linux 上配置 HAProxy 以接受 10K 并发连接

  • 772

我在 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
linux
  • 3 3 个回答
  • 12326 Views

3 个回答

  • Voted
  1. Best Answer
    Jakov Sosic
    2015-02-19T07:59:33+08:002015-02-19T07:59:33+08:00

    据我所知,listen block maxconn 与 global maxconn 不同。使用 global maxconn,您可以限制让 haproxy 进程处理的最大连接数。

    Listen / frontend 部分有自己的 maxconn,它限制了每个侦听器的连接数。所以,试着在你的前端部分设置 maxconn,或者至少在默认部分设置它。

    所以要么:

     defaults
         maxconn 10000
    

    或按前端设置。

    • 2
  2. dmourati
    2015-02-19T07:55:41+08:002015-02-19T07:55:41+08:00

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

    我们遇到了许多 HAProxy 性能问题。这里有一些想法:

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

    2. 提高nbproc以反映特定硬件上的内核数量。

    3. 如果您使用的是第 7 层模式,请查看是否可以下拉到第 4 层模式以获得更多吞吐量。

    • 0
  3. rfmoz
    2021-03-03T06:08:37+08:002021-03-03T06:08:37+08:00

    自 1.5 版本以来,Haproxy 发生了变化,但正如管理指南在“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”

    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve