HAProxy não tem servidor disponível

6

Estou tentando configurar um balanceador de carga HTTP muito simples com backends 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 funciona bem. É assim que o arquivo de configuração aparece 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 dizer 8124, o HAProxy mostrará o seguinte erro na inicialização:

haproxy[3324]: backend backend_servers has no server available!

É assim que a nova configuração se parece

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 com o balanceador de carga, o que indica que o balanceador de carga pode, de fato, acessar o back-end.

Nessas circunstâncias, o HAProxy parece ter falhado ao iniciar, pois não consigo ver a porta 8124 no estado LISTEN quando uso netstat -an .

Esta é a primeira vez que estou usando o HAProxy, então posso estar perdendo algo realmente trivial.

Há mais alguma coisa que eu deva verificar?

    
por Panda Pajama 05.10.2015 / 08:50

1 resposta

3

Eu acabei de descobrir.

O problema não está na configuração do HAProxy, mas no SELinux, que está habilitado e configurado para o modo enforcing por padrão no CentOS 7. Parece que a configuração padrão do SELinux permite o uso do HAProxy apenas na porta 80.

Definir o SELinux como modo permissivo, desabilitá-lo completamente ou permitir que o SELinux permita que o HAProxy use outras portas resolveu o problema.

Você pode usar semanage para permitir o uso do HAProxy na porta:

sudo semanage port -a -p tcp -t http_port_t 8124
    
por 05.10.2015 / 09:32

Tags