我在 haproxy 负载均衡器下有任何实例。我正在使用 haproxy cookies 使每个客户端在整个会话期间都连接到同一个服务器。
现在的问题是,我想将 haproxy 中的 maxconn 变量设置为我的服务器可以处理的限制,比如说 1000。
不过,我想确保,如果达到此限制,它仅适用于新连接,而不适用于已登录系统的用户。这是它的工作原理吗?如果不是,我该如何实现?
答案1
服务器 maxconn 适用于与服务器的并发 TCP 连接,以免服务器过载。但是,多余的连接不会被拒绝,它们会排队并在服务器释放另一个连接时立即转发到服务器。有两个队列,一个在后端用于任何传入连接,另一个在服务器上专用于明确针对此服务器的连接(带有 cookie 的请求)。因此,新访问者的连接会在后端排队并由任何服务器挑选,而来自已见过的访问者的连接会在服务器上排队并仅由此服务器挑选。
您似乎认为 maxconn 计算的是并发访问者数量,但实际上它计算的是并发连接数。您仅用 100 个并发 TCP 连接就可以轻松拥有 10000 个并发访问者。maxconn 类似于 Apache 的 MaxClients 设置,应将其设置为略低于服务器的限制。
您还会发现,许多服务器在 maxconn 值较低时性能更好,您可能会想降低该值来提高性能。但不要将其降低太多,因为您希望能够覆盖服务器响应缓慢的情况(例如:等待数据库服务器)。