我对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属性的工作方式有些困惑。
服务器上的listen块中有全局变量和maxconn。我的想法是:全局连接管理haproxy作为一项服务将同时排队或处理的连接总数。如果数字超过该数字,它要么终止连接,要么在某些Linux套接字中建立池?我不知道如果数字超过4000会怎样。
然后,将服务器的maxconn属性设置为15。首先,我将其设置为15,因为我的php-fpm正在转发到单独的服务器上,只有这么多子进程可以使用,所以我确保将请求集中在此处,而不是在php-fpm中。我认为这更快。
但是回到这个主题,我关于这个数字的理论是该块中的每个服务器一次只会发送15个连接。然后,连接将等待打开服务器。如果我有cookie,连接将等待正确的打开服务器。但是我没有。
所以问题是:
- 如果全局连接数超过4000,会发生什么?他们会死吗?还是以某种方式在Linux中合并?
- 全局连接是否与服务器连接相关,而不是您的服务器连接总数不能大于全局?
- 确定全局连接时,难道不是服务器部分中添加的连接数量加上一定比例的缓冲池吗?显然,您在连接方面还有其他限制,但实际上是要发送给代理多少个?
先感谢您。