테스트 환경에서 이상한 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개뿐입니다. 따라서 다른 프로세스에서는 통계를 얻을 수 없습니다. 불행하게도 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