
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