HAProxyはnbprocを無視する

HAProxyはnbprocを無視する

私たちのテスト環境では、HAProxy の異常な動作が確認されました。私たちは、RHEL 7 が提供する標準のhaproxy-1.5.18-8.el7.x86_64RPM を使用しています。

私たちの理解によれば、許容される並列接続の総数は、のセクションmaxconn*nbprocからと定義されます。globalhaproxy.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

原因が分かりました。ソケット インターフェイスから統計情報を読み取っていました。ただし、この構成では、1 つのプロセスにのみバインドされるソケット インターフェイスは 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

関連情報