HAProxy no tiene ningún servidor disponible

HAProxy no tiene ningún servidor disponible

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 LISTENestado 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

información relacionada