HAProxy는 nbproc를 무시합니다.

HAProxy는 nbproc를 무시합니다.

테스트 환경에서 HAProxy의 이상한 동작을 발견했습니다. 우리는 RHEL 7에서 제공하는 표준 RPM을 사용합니다 haproxy-1.5.18-8.el7.x86_64.

우리의 이해에 따르면 허용되는 총 병렬 연결 수는 maxconn*nbprocfrom 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

관련 정보