Serviço HAproxy 503 indisponível Nenhum servidor está disponível para lidar com esta solicitação

Serviço HAproxy 503 indisponível Nenhum servidor está disponível para lidar com esta solicitação

Sou novo nesse cenário de balanceamento de carga e estou sendo encarregado de descobrir como fazer esse balanceamento funcionar.

Meu ambiente:

Centos 6.4 64 Bit
Webserver: Lighttpd
All running in ESXI
virtual IP: 192.168.1.6
LB1: 192.168.1.4
LB2: 192.168.1.5
Webserver 1: 192.168.1.12
Webserver 2: 192.168.1.13
Gateway: 192.168.1.1

Tentando executar um teste no laboratório antes da produção com HAproxy e keepalived. Aqui está o que tenho na minha configuração keepalived:

! Arquivo de configuração para keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.1.4
   smtp_connect_timeout 30
   router_id 192.168.1.1
}

vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1                     # check every second
weight 2                       # add 2 points of prio if OK
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101  #priority 101 for master
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.6

    }

    track_script {
    chk_haproxy
            }

            }

e aqui está minha configuração para HAproxy

#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js

#    use_backend static          if url_static
#    default_backend             view

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
#    balance     roundrobin
#    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
mode tcp
    balance     roundrobin
    server  server1 192.168.1.12:80 check inter 2000 rise 2 fall 5
    server  server2 192.168.1.13:80 check inter 2000 rise 2 fall 5

Quando iniciei o HAproxy, recebi esse erro e não sei bem por onde começar a tentar corrigi-lo. Talvez alguém que já fez isso muitas vezes possa me ajudar a esclarecer?

503 Service Unavailable No server is available to handle this request. 

No entanto, conectar-se manualmente ao webserver1 e webserver2 funciona perfeitamente.

Tudo que eu quero é apenas um simples balanceamento de carga para o servidor web que fica atrás do HAproxy. Qualquer conselho ou sugestão é absolutamente apreciado. Por favor ajude? Muito obrigado.

Responder1

Nunca usei o HAproxy, mas uma pesquisa rápida me leva a pensar que você precisa adicionar default_backend appimediatamente abaixo frontend main *:80. Não vejo nenhum lugar nessa configuração conectando o back-end e o front-end.

Responder2

O problema está na configuração do HAProxy. Quando eu remover todos os comentários da sua configuração, receberei isto:

global
  log         127.0.0.1 local2

  chroot      /var/lib/haproxy
  pidfile     /var/run/haproxy.pid
  maxconn     4000
  user        haproxy
  group       haproxy
  daemon

  stats socket /var/lib/haproxy/stats

defaults
  mode                    http
  log                     global
  option                  httplog
  option                  dontlognull
  option http-server-close
  option forwardfor       except 127.0.0.0/8
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000

frontend  main *:80

backend app
  mode tcp
  balance roundrobin
  server  server1 192.168.1.12:80 check inter 2000 rise 2 fall 5
  server  server2 192.168.1.13:80 check inter 2000 rise 2 fall 5

E agora você pode ver claramente que não há nenhuma configuração de frontend. As solicitações chegam ao HAProxy via, frontend mainmas o HAProxy não sabe quais servidores são confiáveis ​​para lidar com isso, então retornará 503.

Você precisa vincular o backend ao frontend com default_backendou com acl.

Você também deve usar estatísticas, não apenas com soquete, mas também com interface web protegida. Posso mostrar informações sobre clusters por trás do haproxy, quais servidores estão offline, quais estão com problemas, sobre tempos de resposta e assim por diante. Muito útil para depuração.

Responder3

Recebi um erro semelhante porque o HAProxy achou que meu back-end estava inoperante devido à verificação de integridade padrão que ele faz. Desativei o exame de saúde e o 503 foi embora.

Estou usando a GUI do pfsense: insira a descrição da imagem aqui

Responder4

O PFSense adiciona automaticamente (e de forma um tanto invisível) ACLs adicionais por padrão quando você usa um certificado TLS. Adicionei um segundo host virtual e um segundo certificado usando a seção ‘Certificados adicionais’. Isso manteve as ACLs de certificado padrão em vigor.

Desabilitar essas ACLs e reiniciar resolveu o problema.

insira a descrição da imagem aqui

informação relacionada