
Estou tentando configurar um balanceador de carga HTTP muito simples com back-ends node.js no CentOS 7. Os back-ends são todos servidores HTTP.
Se eu definir o backend para escutar na porta 80 e o HAProxy para escutar na porta 80 e usar a porta 80 no backend, tudo funcionará bem. Esta é a aparência do arquivo de configuração em tal configuração:
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
Mas, se eu alterar todas as portas para 8124, o HAProxy mostrará o seguinte erro na inicialização:
haproxy[3324]: backend backend_servers has no server available!
Esta é a aparência da nova configuração
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
Certamente o programa backend node.js agora está escutando na porta 8124.
O firewall está aberto para a porta 8124 no backend e o seguinte comando:
wget http://10.0.4.51:8124/action
funciona perfeitamente no balanceador de carga, o que indica que o balanceador de carga pode realmente acessar o back-end.
Nessas circunstâncias, o HAProxy parece ter falhado ao iniciar, pois não consigo ver a porta 8124 no LISTEN
estado quando uso o netstat -an
.
Esta é a primeira vez que uso o HAProxy, então posso estar perdendo algo realmente trivial.
Há mais alguma coisa que devo verificar?
Responder1
Eu acabei de descobrir.
O problema não está na configuração do HAProxy, mas no SELinux, que está habilitado e configurado para modo de aplicação por padrão no CentOS 7. Parece que a configuração padrão do SELinux permite o HAProxy apenas na porta 80.
Definir o SELinux para o modo permissivo, desativá-lo completamente ou permitir que o SELinux permitisse que o HAProxy usasse outras portas resolveu o problema.
Você pode usar semanage para permitir o HAProxy usando a porta:
sudo semanage port -a -p tcp -t http_port_t 8124