Rhel
HAProxy 忽略 nbproc
在我們的測試環境中,我們發現了一個奇怪的 HAProxy 行為。我們使用的是標準 RHEL 7 提供的
haproxy-1.5.18-8.el7.x86_64
RPM。根據我們的理解,接受的並行連接總數定義為
maxconn*nbproc
從global
.haproxy.cfg
但是,如果我們定義:
maxconn 5 nbproc 2
我們預計並行連接的總數為 10。但我們不能超過
maxconn
定義的 5。為什麼忽略 nbproc?
這是完整的 haproxy.cfg:
# Global settings global log 127.0.0.1 local2 warning log 10.229.253.86 local2 warning chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 5 user haproxy group haproxy daemon nbproc 2 # turn on stats unix socket stats socket /var/lib/haproxy/stats stats socket /var/run/haproxy.sock mode 600 level admin stats socket /var/run/haproxy_hamonit.sock uid 2033 gid 2033 mode 600 level admin stats timeout 2m defaults mode tcp log global option tcplog option dontlognull option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 30s timeout server 30s timeout http-keep-alive 10s timeout check 10s bind-process all frontend ha01 bind 10.229.253.89:80 mode http option httplog option http-server-close option forwardfor except 127.0.0.0/8 default_backend ha01 backend ha01 balance roundrobin mode http option httplog option http-server-close option forwardfor except 127.0.0.0/8 server server1 10.230.11.252:4240 check server server2 10.230.11.252:4242 check listen stats 10.229.253.89:1936 mode http stats enable stats hide-version stats realm Haproxy\ Statistics stats uri / stats auth admin:foo
我找到了罪魁禍首。我們正在從套接字介面讀取統計資訊。但是在我們的配置中,只有 1 個套接字介面只綁定到一個程序。因此我們無法從其他程序中獲取統計資訊。不幸的是,HAProxy 不支持通過套接字介面聚合統計資訊(如果支持,請分享方法)。
因此,當我更改為精確綁定時:
stats socket /var/run/haproxy.sock mode 600 level admin process 1 stats socket /var/run/haproxy2.sock mode 600 level admin process 2
在以下情況下,我可以從兩個套接字獲取統計資訊
nbproc=2
:echo "show sess" | socat /var/run/haproxy.sock stdio echo "show sess" | socat /var/run/haproxy2.sock stdio