O HAProxy pode determinar a carga de um servidor backend e evitar o envio de solicitações para servidores com alta carga?

1

Eu estou querendo saber se haveria uma vantagem ou não saber o loadavg de cada servidor de back-end e pedir que o HAProxy enviasse a próxima solicitação para o computador com o menor loadavg.

No entanto, eu não vi nada que oferecesse tal recurso no HAProxy. Talvez não esteja disponível?

Encontrei este post que mostra uma definição de frontend com um comando use_backend , mas estou pensando que o mapa será carregado uma vez e armazenado em cache durante toda a duração da execução do HAProxy. Caso contrário, alterar dinamicamente o mapa classificando os itens por loadavg não faria diferença ...

frontend ft_items
  [...]
  use_backend %[path,lower,map(/etc/haproxy/items.map,bk_default)]

Não está claro para mim que a roundrobin seria boa o suficiente para o meu aplicativo porque algumas solicitações levam 50ms (imagens, CSS, etc.) e outras podem levar uns bons 2s (Large Reports). Portanto, verificar o loadavg de um computador parece mais propenso a caber na conta deste aplicativo.

    
por Alexis Wilke 16.09.2016 / 22:42

2 respostas

1

Alexis,

Isso soa exatamente como o agent-check deve ser usado. Willy gentilmente adicionou o patch que usamos para o appliance Loadbalancer.org e abrimos o nosso agente de servidor baseado no Windows. As instruções incluindo um exemplo básico de servidor Linux estão aqui:

link

O agente do Windows pode monitorar uma combinação de CPU, RAM e & Contagens de conexões TCP (ou seja, para sessões RDP).

O feedback é sempre bem-vindo. Isso me lembra - seria bom se alguém implementasse algum tipo de algoritmo de tempo de resposta do servidor, então você não precisaria necessariamente de um agente baseado em servidor.

    
por 18.09.2016 / 09:52
1

Seria melhor quebrar os mapas HAProxy para que solicitações rápidas de recursos estáticos passem por um mapa round-robin e solicitações mais lentas através de um mapa RR diferente.

Você pode usar os mesmos ou diferentes pools de back-end para as solicitações, a ideia é que, em média, todos os servidores estão lidando com a mesma quantidade de solicitações rápidas e lentas. Alternativamente, você pode mapeá-los para diferentes sistemas de back-end e usar sistemas mais poderosos para o trabalho computacionalmente intenso dos relatórios.

    
por 16.09.2016 / 23:29