haproxy中服务器的maxconn参数

haproxy中服务器的maxconn参数

我在生产中使用 HAProxy 将查询平衡到一系列服务器实例,这些服务器实例一次只能处理 1 个查询(由我们自己决定)。我知道我在 haproxy.cfg 文件中后端配置的服务器定义行中将 maxconn 参数设置为 1,但服务器仍然会收到查询,因为我在服务器的日志消息中看到了“查询被拒绝,正在处理”,并且在 HAProxy 日志查询中也看到了返回客户端的 502 http 状态代码。

这是 HAProxy 的配置:

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log 127.0.0.1   local6 debug
        user haproxy
        group haproxy
        daemon
        stats socket /tmp/haproxy

defaults
        log     global
        mode    http
        balance roundrobin
        option httplog
        retries 10
        option  redispatch

frontend custom 0.0.0.0:50000
        backlog 2000
        acl p5queue avg_queue(custombe) gt 200
        tcp-request content reject if p5queue
        default_backend custombe
        timeout client  15000

backend custombe
        retries 10
        option redispatch
        timeout queue   600000
        timeout connect 1000
        timeout server  120000
        server  custom-server-1 0.0.0.0:50001 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-2 0.0.0.0:50002 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-3 0.0.0.0:50003 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-4 0.0.0.0:50004 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-5 0.0.0.0:50005 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-6 0.0.0.0:50006 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-7 0.0.0.0:50007 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-8 0.0.0.0:50008 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-9 0.0.0.0:50009 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-10 0.0.0.0:50010 weight 1 maxconn 1 check inter 2000 rise 2 fall 1

有人知道为什么当 maxconn 参数设置为 1 时,服务器实例会获取查询?我读过StackOverflow 上关于 maxconn 的解释以及它的工作原理在不同的部分,这就是我现在问这个问题的原因,它不应该像这样工作。

答案1

确保没有其他进程与您的服务有开放的连接。

特别注意,在 期间haproxy reload,有两个 haproxy 进程将使用您的资源,并且每个进程都会自行执行连接限制。完成进程将不会在所有队列耗尽之前终止。因此,新进程及其客户端很有可能争用席位。

我能想到的最佳解决方法是

  1. 每个工作进程精确接受两个连接,
  2. 注意不要haproxy在整理过程仍在运行时重新加载。

相关内容