O balanceamento de roundrobina HAproxy não parece estar distribuindo uniformemente

6

Eu sei que, com servidores carregados, a roundrobin no HAproxy (1.4.4) não distribui uniformemente, mas meus servidores estão atualmente recebendo NO-traffic (configuração de teste) e o balanceamento de roundrobin não www1, www1, www1, www1, www1, ... www2, www2, www2, ..., www1 ...

Estou verificando isso com o script sendo executado em cada servidor cat / etc / HOSTNAME (slackware). Eu preciso que ele alterne cada vez para testar algumas coisas da sessão (armazenadas no memcached compartilhado), mas estou com problemas para fazer com que ele alterne entre meus dois servidores da web em cada solicitação.

global
    log     127.0.0.1 local0 warning
    maxconn     4096
    chroot      /usr/share/haproxy
    pidfile     /var/run/haproxy.pid
    uid     99
    gid     99
    daemon

defaults
    balance     roundrobin
    fullconn    100
    maxconn     4096
    mode        http
    option      dontlognull
    option      http-server-close
    option      forwardfor
    option      redispatch
    retries     3
    timeout     connect 5000
    timeout     client  20000
    timeout     server  60000
    timeout     queue   60000
    stats       enable
    stats       uri /haproxy
    stats       auth ***:***

frontend www *:80
    log     global
    acl     is_upload hdr_dom(host) -i uploads.site.com
    acl     is_api hdr_dom(host) -i api.site.com
    acl     is_dev hdr_dom(host) -i dev.site.com
    use_backend uploads.site.com if is_upload
    use_backend api.site.com if is_api
    use_backend dev.site.com if is_dev
    default_backend site.com

backend site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

backend api.site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:api.site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

backend dev.site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:dev.site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

backend uploads.site.com
    option  httpchk HEAD /alive.php HTTP/1.1\r\nHost:uploads.site.com
    server  www1 1.1.1.1:8080 weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2
    server  www2 1.1.1.2:8080 backup weight 10 minconn 5 maxconn 25 check inter 2000 rise 2 fall 2

Então, basicamente, eu tenho alguns back-ends diferentes (verifiquei que as ACLs estão funcionando), com a opção padrão "roundrobin" selecionada. Eu tentei remover pesos, removendo os atributos minconn / maxconn / fullconn para todos os servidores (não apenas o backend que estou testando), tentei remover as ACLs, etc. Eu testei no dev.site.com BTW. / p>

Alguém vê uma razão pela qual eu não posso conseguir algo como www1, www2, www1, www2, ...? Além disso, esta é uma das minhas primeiras perguntas aqui, então, por favor, deixe-me saber se eu deixei qualquer coisa necessária fora do meu post.

Obrigado!

    
por andrew 14.06.2010 / 23:33

1 resposta

2

Você deve definitivamente observar a carga que está esperando. Suspeito que alguns dos seus servidores não respondem regularmente a verificações de saúde e que são regularmente retirados da exploração e depois reinseridos quando a carga cai e podem responder de novo.

Além disso, como você observa o desequilíbrio? Os logs registram apenas avisos (basicamente apenas baixos).

Você também pode verificar a página de estatísticas, quantas sessões são enviadas para cada servidor, quantas vezes elas estão ativadas / desativadas e se houve filas ou, pelo menos, se elas atingiram o limite máximo .

    
por 15.06.2010 / 05:54