gpt4 book ai didi

haproxy - 全局 maxconn 和服务器 maxconn haproxy 的区别

转载 作者:行者123 更新时间:2023-12-03 05:05:26 26 4
gpt4 key购买 nike

我有一个关于 haproxy 配置的问题:

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 syslog emerg
maxconn 4000
quiet
user haproxy
group haproxy
daemon
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option abortonclose
option dontlognull
option httpclose
option httplog
option forwardfor
option redispatch
timeout connect 10000 # default 10 second time out if a backend is not found
timeout client 300000 # 5 min timeout for client
timeout server 300000 # 5 min timeout for server
stats enable

listen http_proxy localhost:81

balance roundrobin
option httpchk GET /empty.html
server server1 myip:80 maxconn 15 check inter 10000
server server2 myip:80 maxconn 15 check inter 10000

如您所见,它很简单,但我对 maxconn 属性的工作方式有些困惑。

在服务器上的监听块中有全局一个和 maxconn。我的想法是:全局连接管理 haproxy 作为一项服务,将一次排队或处理的连接总数。如果数字超过该数字,它要么终止连接,要么在某些 linux 套接字中池化?我不知道如果数字高于 4000 会发生什么。

然后你将服务器 maxconn 属性设置为 15。首先,我将它设置为 15,因为我的 php-fpm,这是转发到一个单独的服务器上,只有这么多子进程可以使用,所以我确定我是在这里汇集请求,而不是在 php-fpm 中。我认为哪个更快。

但是回到这个主题,我关于这个数字的理论是这个块中的每个服务器一次只会发送 15 个连接。然后连接将等待打开的服务器。如果我打开了 cookie,连接将等待正确的打开服务器。但我没有。

所以问题是:
  • 如果全局连接超过 4000 会发生什么?他们会死吗?或者在 Linux 中以某种方式池?
  • 除了服务器连接总数不能大于全局这一事实之外,全局连接是否与服务器连接有关?
  • 在计算全局连接时,不应该是服务器部分的连接数加起来,加上一定的池化百分比吗?显然,您对连接还有其他限制,但实际上您想发送多少个给代理?

  • 提前谢谢你。

    最佳答案

    威利通过电子邮件给我答复。我以为我会分享它。他的回答是粗体的。

    我有一个关于 haproxy 配置的问题:

       #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
    log 127.0.0.1 syslog emerg
    maxconn 4000
    quiet
    user haproxy
    group haproxy
    daemon
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
    mode http
    log global
    option abortonclose
    option dontlognull
    option httpclose
    option httplog
    option forwardfor
    option redispatch
    timeout connect 10000 # default 10 second time out if a backend is not found
    timeout client 300000 # 5 min timeout for client
    timeout server 300000 # 5 min timeout for server
    stats enable

    listen http_proxy localhost:81

    balance roundrobin
    option httpchk GET /empty.html
    server server1 myip:80 maxconn 15 check inter 10000
    server server2 myip:80 maxconn 15 check inter 10000

    正如你所看到的,它是直截了当的,但我对如何
    maxconn 属性有效。

    在服务器上的监听块中有全局一个和 maxconn。

    并且在监听块中还有另一个默认为某些内容
    像 2000 年。


    我的想法是这样的:全局一个管理连接总数
    作为一种服务,haproxy 将在一次查询或处理。

    正确。这是每个进程的最大并发连接数。

    如果数
    超过它,它要么终止连接,要么在某些 linux 中池
    socket ?

    后来,它只是停止接受新的连接,它们留在
    内核中的套接字队列。确定可排队套接字的数量
    由 (net.core.somaxconn, net.ipv4.tcp_max_syn_backlog, 和
    听块的 maxconn)。


    我不知道如果数字高于 4000 会发生什么。

    多余的连接等待另一个连接完成
    接受。但是,只要内核的队列没有饱和,
    客户端甚至没有注意到这一点,因为连接在
    TCP 级别,但未处理。所以客户端只注意到一些延迟
    来处理请求。
    但在实践中,listen 块的 maxconn 更为重要,
    因为默认情况下它比全局小。听的最大康
    限制每个监听器的连接数。一般来说,明智的做法是
    将其配置为您想要的服务连接数,
    并将全局 maxconn 配置为最大连接数
    你让 haproxy 进程处理。当您只有一项服务时,
    两者都可以设置为相同的值。但是当你有很多服务时,
    你可以很容易地理解它会产生巨大的不同,因为你没有
    想要一个服务来获取所有连接并防止
    其他的工作。


    然后您将服务器 maxconn 属性设置为 15。首先,我将其设置为
    15 因为我的 php-fpm,这是转发到一个单独的服务器上,只有
    它可以使用这么多子进程,所以我确保我正在汇集请求
    在这里,而不是在 php-fpm 中。我认为哪个更快。

    是的,它不仅应该更快,而且还允许 haproxy 找到另一个
    尽可能使用可用的服务器,并且它允许它杀死
    如果客户端在连接之前点击“停止”,则请求在队列中
    转发到服务器。


    但是回到这个主题,我关于这个数字的理论是这个数字中的每个服务器
    块一次只会发送 15 个连接。然后是连接
    将等待打开的服务器。如果我有 cookie,连接会等待
    对于正确的开放服务器。但我没有。

    这正是原理。有一个每个代理队列和一个每个服务器
    队列。带有持久性 cookie 的连接进入服务器队列并
    其他连接进入代理队列。但是因为在你的情况下没有
    cookie 被配置,所有连接都进入代理队列。你可以看看
    如果需要,可以在 haproxy 源中的图表 doc/queuing.fig 中进行说明
    如何/在何处做出决定。


    所以问题是:
  • 如果全局连接超过 4000 会发生什么?他们会死吗?或者
    不知何故在Linux池?

    他们在linux中排队。一旦你压倒了内核的队列,他们就会
    掉进内核。
  • 全局连接是否与服务器连接相关,除了
    事实上,您的服务器连接总数不能超过
    全局?

    不,全局和服务器连接设置是独立的。
  • 在弄清楚全局连接时,不应该是数量
    服务器部分中的连接数加起来,加上一定的百分比
    汇集?显然你对连接还有其他限制,但是
    真的是多少你想发送给代理?

    你做对了。如果你的服务器响应时间很短,那就什么都没有了
    将数千个连接排队以一次只服务几个连接是错误的,
    因为它大大减少了请求处理时间。实际上,
    如今,在千兆位上建立连接大约需要 5 微秒
    局域网。所以让 haproxy 分配连接很有意义
    尽可能快地从其队列到具有非常小的 maxconn 的服务器。
    我记得有一个游戏网站排队超过30000个并发连接
    并以每台服务器 30 个队列运行!这是一个 apache 服务器,并且
    apache 使用少量连接比使用大连接要快得多
    数字。但是为此你真的需要一个快速的服务器,因为你不需要
    想让所有客户端排队等待连接槽,因为
    例如,服务器正在等待数据库。
    另外一个非常有效的方法是专用服务器。如果您的网站
    有很多静态,您可以将静态请求定向到服务器池
    (或缓存),这样您就不会在它们上排队静态请求,并且
    静态请求不会占用昂贵的连接槽。
    希望这有帮助,
    威利
  • 关于haproxy - 全局 maxconn 和服务器 maxconn haproxy 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750518/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com