Algoritmo de balanceamento de carga “URI whole” Haproxy

2

Estou executando alguns testes no algoritmo de balanceamento de carga "uri whole" no HAProxy. Meu sistema operacional é o Ubuntu 16.04.2 LTS e meu lançamento é o HA-Proxy versão 1.7.7-1ppa1 ~ xenial 2017/06/27.

EDITAR: Estou usando o Server-Sent-Events (SSE) para solicitações de longa duração.

Aqui está minha configuração de back-end:

backend Proxy
    mode http
    balance uri whole
    hash-type consistent
    http-reuse safe
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option  http-server-close
    option httpchk
    http-check expect ! rstatus ^503
    timeout tunnel 24h
    server xxxx 192.168.0.10:8080 check maxconn 2 maxqueue 1
    server yyyy 192.168.0.11:8080 check maxconn 2 maxqueue 1

Isso é o que eu observo:

1 - A solicitação A é enviada para um desses servidores, dependendo do hash após o ponto de interrogação e de algumas outras opções. Digamos que no servidor xxxx.

2 - A próxima solicitação que direciona exatamente o mesmo URI irá para o servidor xxxx com um maxconn para 2.

3 - O terceiro permanecerá na fila.

4 - O quarto não alcançará nada e eu tenho um "503 Serviço Indisponível - Nenhum servidor está disponível para lidar com este pedido." de HAProxy. A única maneira de enviar solicitações para o outro servidor é marcar o servidor xxxx como "Down" ou "Maintenance". Mesma coisa sem a opção "hash-type consistent" ou com uma opção "backup".

5 - Todas as verificações de saúde são enviadas para o mesmo servidor.

Minhas perguntas sobre os pontos 4 e 5:

  • Eu achei que "uri whole" era um algoritmo de balanceamento de carga. A quarta solicitação não deve ser balanceada no servidor yyyy se o servidor xxxx estiver indisponível para manipulá-la (eu entendo que o hash não muda)?

  • Para ignorar esse comportamento, tentei configurar a verificação de integridade para informar ao HAProxy para marcar "Abaixo" um servidor que está respondendo a um código 503. Não funciona ... Estou faltando alguma coisa na minha definição de back-end?

  • Até mesmo as verificações de saúde são feitas em um servidor. Isso não é útil ... Há algo que eu não entendo aqui?

Meu objetivo aqui é equilibrar a 4ª solicitação (e idealmente a 3ª) no segundo servidor:)

Obrigado pela sua ajuda!

    
por Guillaume 28.09.2017 / 14:27

1 resposta

0

Parece que os pedidos 1 e 2 ainda têm uma conexão aberta ao back-end (solicitação de longa duração?). A solicitação 3 está na fila (apenas 2 conexões são permitidas), a solicitação 4 é descartada porque você limitou a fila a uma solicitação.

O back-end não está inativo - ainda há duas conexões abertas.

Marcar um back-end como 503 não é acionado porque o 503 vem do haproxy, não do back-end.

Desculpe se isso não resolve o seu problema, mas talvez ajude a entender melhor:)

    
por 29.09.2017 / 10:38

Tags