HAProxy에는 사용 가능한 서버가 없습니다.

HAProxy에는 사용 가능한 서버가 없습니다.

CentOS 7에서 node.js 백엔드로 매우 간단한 HTTP 로드 밸런서를 설정하려고 합니다. 백엔드는 모두 HTTP 서버입니다.

포트 80에서 수신하도록 백엔드를 설정하고 포트 80에서 수신하도록 HAProxy를 설정하고 백엔드에서 포트 80을 사용하면 모든 것이 잘 작동합니다. 이러한 구성에서 구성 파일은 다음과 같습니다.

global
    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     256
    user        haproxy
    group       haproxy
    daemon

defaults
    mode               http
    log                global
    option             httplog
    timeout connect    10s
    timeout client     30s
    timeout server     30s

frontend http-in
    bind               :80
    default_backend    backend_servers
    option             forwardfor

backend backend_servers
    balance            roundrobin
    server             backend1 10.0.4.51:80 check
#    server             backend2 10.0.4.52:80 check
#    server             backend3 10.0.4.53:80 check
#    server             backend4 10.0.4.54:80 check
#    server             backend5 10.0.4.55:80 check
#    server             backend6 10.0.4.56:80 check

그러나 모든 포트를 8124로 변경하면 HAProxy는 시작 시 다음 오류를 표시합니다.

haproxy[3324]: backend backend_servers has no server available!

새로운 구성은 이렇게 생겼습니다

global
    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     256
    user        haproxy
    group       haproxy
    daemon

defaults
    mode               http
    log                global
    option             httplog
    timeout connect    10s
    timeout client     30s
    timeout server     30s

frontend http-in
    bind               :8124
    default_backend    backend_servers
    option             forwardfor

backend backend_servers
    balance            roundrobin
    server             backend1 10.0.4.51:8124 check
#    server             backend2 10.0.4.52:8124 check
#    server             backend3 10.0.4.53:8124 check
#    server             backend4 10.0.4.54:8124 check
#    server             backend5 10.0.4.55:8124 check
#    server             backend6 10.0.4.56:8124 check

확실히 백엔드 node.js 프로그램은 이제 포트 8124에서 수신 대기하고 있습니다.

방화벽은 백엔드의 포트 8124에 대해 열려 있으며 다음 명령을 실행합니다.

wget http://10.0.4.51:8124/action

이는 로드 밸런서에서 완벽하게 작동하며 이는 로드 밸런서가 실제로 백엔드에 액세스할 수 있음을 나타냅니다.

이러한 상황 LISTEN에서 netstat -an.

HAProxy를 처음 사용하는 것이므로 정말 사소한 부분이 누락되었을 수 있습니다.

그 밖에 확인해야 할 사항이 있나요?

답변1

방금 알아 냈어요.

문제는 HAProxy 구성에 있는 것이 아니라 CentOS 7에서 기본적으로 활성화되어 적용 모드로 설정된 SELinux에 있습니다. SELinux의 기본 구성에서는 포트 80에서만 HAProxy를 허용하는 것 같습니다.

SELinux를 허용 모드로 설정하거나 완전히 비활성화하거나 SELinux에서 HAProxy가 다른 포트를 사용할 수 있도록 허용하면 문제가 해결됩니다.

semanage를 사용하여 포트를 사용하여 HAProxy를 허용할 수 있습니다.

sudo semanage port -a -p tcp -t http_port_t 8124

관련 정보