Parâmetro maxconn do servidor em haproxy

2

Estou usando o HAProxy em produção para balancear consultas a uma série de instâncias do servidor que podem processar apenas 1 consulta por vez (por nossa própria decisão). Sabendo que eu configurei o parâmetro maxconn na linha de definição de servidor da configuração de backend no arquivo haproxy.cfg para 1, mas o servidor ainda obtém consultas porque vejo nas mensagens de log do nosso servidor como "consulta rejeitada, já processando" e também no HAProxy consultas de log que retornam ao cliente com um código de status 502 http.

Esta é a configuração do HAProxy:

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log 127.0.0.1   local6 debug
        user haproxy
        group haproxy
        daemon
        stats socket /tmp/haproxy

defaults
        log     global
        mode    http
        balance roundrobin
        option httplog
        retries 10
        option  redispatch

frontend custom 0.0.0.0:50000
        backlog 2000
        acl p5queue avg_queue(custombe) gt 200
        tcp-request content reject if p5queue
        default_backend custombe
        timeout client  15000

backend custombe
        retries 10
        option redispatch
        timeout queue   600000
        timeout connect 1000
        timeout server  120000
        server  custom-server-1 0.0.0.0:50001 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-2 0.0.0.0:50002 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-3 0.0.0.0:50003 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-4 0.0.0.0:50004 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-5 0.0.0.0:50005 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-6 0.0.0.0:50006 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-7 0.0.0.0:50007 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-8 0.0.0.0:50008 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-9 0.0.0.0:50009 weight 1 maxconn 1 check inter 2000 rise 2 fall 1
        server  custom-server-10 0.0.0.0:50010 weight 1 maxconn 1 check inter 2000 rise 2 fall 1

Alguém sabe por que as instâncias do servidor obtêm as consultas quando o parâmetro maxconn está definido como um? Eu li as perguntas do StackOverflow onde o maxconn é explicado e como ele funciona nas diferentes seções é por isso que estou perguntando isso agora, não deveria funcionar assim.

    
por Khriz 09.04.2014 / 10:53

1 resposta

1

Certifique-se de que não haja outro processo que tenha conexões abertas com o seu serviço.

Observe especialmente que, durante haproxy reload , há um período de tempo em que dois processos haproxy usam seus recursos e cada um impõe limites de conexão por conta própria. O processo de acabamento não terminará antes que todas as filas sejam drenadas. Portanto, é bem possível que o novo processo e seus clientes disputem lugares.

A melhor solução em que consigo pensar é

  1. Aceite exatamente duas conexões por processo de trabalho e
  2. tome cuidado para não recarregar haproxy enquanto um processo de acabamento ainda estiver em execução.
por 15.04.2014 / 14:47