Balanceamento Haproxy - tente novamente com outro servidor se o tempo limite foi esgotado pela primeira vez

3

Estamos executando vários servidores de back-end com o protocolo fastcgi e balanceamos entre eles usando o HAproxy. Aqui está uma amostra de configuração:

listen Balancer 192.168.0.1:2000
    mode tcp
    option tcplog
    timeout connect 2000
    timeout server 2000
    timeout queue 2000
    timeout client 2000
    balance leastconn
    server backend1 192.168.0.2:2000 check inter 2000 rise 2 fall 5
    server backend2 192.168.0.3:2000 check inter 2000 rise 2 fall 5
    server backend3 192.168.0.4:2000 check inter 2000 rise 2 fall 5
    server backend4 192.168.0.5:2000 check inter 2000 rise 2 fall 5
    server backend5 192.168.0.6:2000 check inter 2000 rise 2 fall 5
    server backend6 192.168.0.7:2000 check inter 2000 rise 2 fall 5

O tempo limite total é definido para 2 segundos, mas a maioria das solicitações é processada em 0,3 segundos. O problema é que, durante os picos, algumas vezes, o back-end não pode responder a uma consulta com menos de 2 segundos e, em seguida, o tempo limite do gateway é retornado.

O que eu gostaria de fazer é que, quando um servidor for selecionado (por exemplo, backend1) e não entregar a resposta em 1 segundo, o HAproxy selecionaria outro back-end e tentaria novamente. Se falhar novamente em 1 segundo, o tempo limite será atingido.

Então, em vez de esperar por um servidor por 2 segundos, é possível esperar 1 segundo pela primeira vez, se ele falhar, tentar outro e falhar?

    
por j99 11.06.2015 / 15:31

1 resposta

5

Se eu estou lendo a sua pergunta corretamente, usar timeout server para 1 segundo (1000 ms) e usar option redispatch deve dar o efeito desejado.

option redispatch
no option redispatch
Enable or disable session redistribution in case of connection failure In HTTP mode, if a server designated by a cookie is down, clients may definitely stick to it because they cannot flush the cookie, so they will not be able to access the service anymore.

Specifying "option redispatch" will allow the proxy to break their persistence and redistribute them to a working server.

It also allows to retry last connection to another server in case of multiple connection failures. Of course, it requires having "retries" set to a nonzero value.

This form is the preferred form, which replaces both the "redispatch" and "redisp" keywords.

If this option has been enabled in a "defaults" section, it can be disabled in a specific instance by prepending the "no" keyword before it.

    
por 11.06.2015 / 16:34

Tags