HAProxy não tem servidor disponível

HAProxy não tem servidor disponível

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

informação relacionada