Heartbeat Aware Balanceamento de carga

5

Estou usando o Haproxy para balanceamento de carga dos meus servidores da web. Nem todos eles têm os mesmos recursos. Algoritmos de balanceamento de carga típicos causaram sobrecarga em alguns servidores low-end, uma vez que o LB não é muito consciente.

É o modo de balanceamento de carga dos servidores com base em sua carga atual, disponibilidade de recursos ... etc?

    
por adinindu 05.08.2013 / 19:10

2 respostas

3

Você pode ajustar dinamicamente os pesos do servidor com um pouco do HAProxy Voodoo, cortesia do set weight comand

Os bits relevantes (que são enviados para o socket de estatísticas do HAProxy):

set weight / [%]

Change a server's weight to the value passed in argument. If the value ends with the '%' sign, then the new weight will be relative to the initially configured weight. Relative weights are only permitted between 0 and 100%, and absolute weights are permitted between 0 and 256. Servers which are part of a farm running a static load-balancing algorithm have stricter limitations because the weight cannot change once set. Thus for these servers, the only accepted values are 0 and 100% (or 0 and the initial weight). Changes take effect immediately, though certain LB algorithms require a certain amount of requests to consider changes. A typical usage of this command is to disable a server during an update by setting its weight to zero, then to enable it again after the update by setting it back to 100%. This command is restricted and can only be issued on sockets configured for level "admin". Both the backend and the server may be specified either by their name or by their numeric ID, prefixed with a dash ('#').

Você precisaria escrever algum código de backend nos servidores para relatar sua carga relativa, e um processo em sua caixa HAProxy precisaria consultá-los (isso poderia ser incorporado em suas verificações de integridade com alguma criatividade, mas Eu começaria fazendo isso como um processo separado para simplificar).

    
por 06.08.2013 / 20:20
4

A maneira mais simples de conseguir isso é ter uma página de status nos servidores da web que retorne o HTTP 200 se o servidor estiver bom, e o HTTP 500 se estiver sobrecarregado. Além disso, se você souber que um determinado servidor pode manipular 20% mais conexões do que o outro, poderá usar pesos para tentar ficar à frente da sobrecarga de servidores:

backend appservers
    mode http
    option httpchk HEAD /health_check.php
    option redispatch
    server web1 x.x.x.x:80 weight 100 check inter 2000 rise 5 fall 2
    server web2 x.x.x.x:80 weight 120 check inter 2000 rise 5 fall 2
    server web3 x.x.x.x:80 weight 80 check inter 2000 rise 5 fall 2
    
por 05.08.2013 / 21:05