私たちのテスト環境では、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
原因が分かりました。ソケット インターフェイスから統計情報を読み取っていました。ただし、この構成では、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