
Estoy intentando configurar un equilibrador de carga HTTP muy simple con backends de node.js en CentOS 7. Todos los backends son servidores HTTP.
Si configuro el backend para que escuche en el puerto 80 y HAProxy para que escuche en el puerto 80 y use el puerto 80 en el backend, todo funciona bien. Así es como se ve el archivo de configuración en dicha configuración:
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
Pero, si cambio todos los puertos para que digan 8124, HAProxy muestra el siguiente error al iniciar:
haproxy[3324]: backend backend_servers has no server available!
Así es como se ve la nueva configuración
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
Ciertamente, el programa backend node.js ahora está escuchando en el puerto 8124.
El firewall está abierto para el puerto 8124 en el backend y el siguiente comando:
wget http://10.0.4.51:8124/action
funciona perfectamente desde el balanceador de carga, lo que indica que el balanceador de carga efectivamente puede acceder al backend.
En estas circunstancias, HAProxy parece no haber podido iniciarse, ya que no puedo ver el puerto 8124 en el LISTEN
estado en el que uso netstat -an
.
Esta es la primera vez que uso HAProxy, por lo que es posible que me esté perdiendo algo realmente trivial.
¿Hay algo más que deba comprobar?
Respuesta1
Me lo imaginé.
El problema no está en la configuración de HAProxy, sino en SELinux, que está habilitado y configurado en modo obligatorio de forma predeterminada en CentOS 7. Parece que la configuración predeterminada de SELinux permite HAProxy solo en el puerto 80.
Configurar SELinux en modo permisivo, deshabilitarlo por completo o permitir que SELinux permita que HAProxy use otros puertos resolvió el problema.
Puede usar semanage para permitir que HAProxy use el puerto:
sudo semanage port -a -p tcp -t http_port_t 8124