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 / 问题 / 1082781
Accepted
Janez Kuhar
Janez Kuhar
Asked: 2021-11-07 09:35:53 +0800 CST2021-11-07 09:35:53 +0800 CST 2021-11-07 09:35:53 +0800 CST

如何为 Linux 主机上的 Docker 容器内运行的超过 500,000 个连接设置 HAProxy?

  • 772

我希望我的 HAProxy 负载均衡器能够处理至少 1M 的连接。我需要这个来部署压力测试。

我尝试设置:

maxconn 1000000

在我haproxy.cfg但 HAProxy 未能开始:

[haproxy.main()] Cannot raise FD limit to 2000029, limit is 1048576.

我在 Ubuntu Linux 20.04 LTS 上的 Docker 容器中运行 HAProxy,它是一个 Amazon AWS Lightsail VPS 实例。

我查看了互联网上有关如何手动增加open files限制(ulimit -n)并将粘贴的大量配置复制到我的主机中的各种问题。没有任何效果 - 我无法将此限制增加到高于 1048576 的任何值。

我发现以下有关打开文件数量硬限制的相关帖子:

  • 修复ulimit:打开文件:无法修改限制:不允许操作
  • 在 Linux 上 - 将最大打开文件数设置为无限制。可能的?

这个问题似乎与我的几乎相同:

  • 负载测试 HaProxy

我是否从错误的角度处理问题?是否有另一种方法来配置 HAProxy 以便它可以处理一百万个连接(即,不增加ulimit -n)?

linux ulimit docker haproxy
  • 1 1 个回答
  • 482 Views

1 个回答

  • Voted
  1. Best Answer
    Janez Kuhar
    2021-11-08T05:33:02+08:002021-11-08T05:33:02+08:00

    解决方案

    open files限制可以增加。

    ... 每个进程的硬限制默认设置为 1048576,但可以使用“fs.nr_open”sysctl 进行更改。 来自:HAProxy 管理指南 | 5. 文件描述符限制

    我偶然发现了一个关于如何增加的有用资源fs.nr_open。这就是我最终做的事情(在我的主机上):

    # 0. ssh into my cloud instance
    
    # 1. change to root
    sudo su -
    # 2. increase the limit
    sysctl -w fs.nr_open=2010000
    # 3. save changes and exit
    sysctl -p
    exit
    # 4. now you are back in the user shell; you need to re-log
    # from this shell as well for the changes to take effect
    exit
    

    请注意,所做的更改在重新启动后不会保留。如果有人知道该怎么做,请告诉我,我会编辑我的答案。

    我还需要告诉 Docker,在容器中打开超过 1,048,576 个文件是可以的。我使用 Docker Compose 文件来定义我的服务。我只是将以下代码段添加到我的docker-compose.yml:

    services:
      proxy:
        image: haproxy
        # Begin snippet
        ulimits:
          nofile:
            soft: 2005000
            hard: 2005000
        # End snippet
        # ...
    # ...
    

    最后但并非最不重要的一点是,确保主机实例至少有 2GB 的 RAM,否则当您尝试运行代理时,您将耗尽内存。如果你想用你的代理实际处理 100 万个请求,你需要更多的内存——20 到 30 GB 之间——你可以自己测试。如果您知道如何计算限制,请随时编辑我的答案或在下面发表评论!

    打开文件数量的基本原理

    如果我们需要为 100 万个连接打开 2,000,029 个文件,那么让我们:

    • 将代理容器限制设置为略高于:2,000,029 + 4971 = 2,005,000
      • 将主机操作系统限制设置为略高于:2,005,000 + 5000 = 2,010,000
    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

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