Rhel

HAProxy 忽略 nbproc

  • June 6, 2019

在我們的測試環境中,我們發現了一個奇怪的 HAProxy 行為。我們使用的是標準 RHEL 7 提供的haproxy-1.5.18-8.el7.x86_64RPM。

根據我們的理解,接受的並行連接總數定義為maxconn*nbprocglobal.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

引用自:https://unix.stackexchange.com/questions/522591