next up previous contents
Next: LVS-NAT Up: Balanceamento de Carga Previous: Balanceamento de carga com   Sumário

LVS

Em Linux existe o projeto LVS - Linux Virtual Server[7] que provê o pacote IPVS que é um patch para o kernel e permite fazer balanceamento de carga.

Um LVS consiste de um director e um número arbitrário de real servers. No servidor são definidos os serviços virtuais que consistem de um Endereço IP, uma porta e um protocolo (TCP/UDP). Qualquer requisição por um serviço virtual será redirecionada para um real server que se encarregará de responder à requisição de uma de três maneiras possíveis.

O que este patch introduz ao tratamento habitual do kernel é o algoritmo de escalonamento de real servers e 3 modos de envio das respostas aos clientes.

Os oito algoritmos de escalonamento são:

Round Robin
A política usual do kernel, cada real server é colocado na fila e quando um cliente requisita o serviço o mais antigo na fila responte, seguindo uma política FIFO.

Weighted Round Robin
Semelhante a uma política FIFO, porém com pesos. Normalmente desejamos que um servidor com mais recursos computacionais aceite mais requisições do que um servidor mais fraco. O servidor vai entrar na fila proporcionalmente ao seu peso. Assim, se as máquinas 8#8, 9#9, 10#10 e 11#11 tiverem o mesmo poder computacional e a máquina 12#12 tiver o dobro, seria uma boa idéia colocar peso 1 para as máquinas 13#13, 14#14 e peso 2 para a máquina 12#12. Um possível escalonamento de tarefas, neste caso seria

15#15

Least Connection
O algoritmo vai para o real server que está com o menor número de conexões ativas. Claro que o numero de conexões ativas não é diretamente proporcional à utilização dos recursos computacionais, no entanto este algoritmo é uma aproximação desta situação já que quanto maior o número de requisições, mais estas duas situações se aproximam uma da outra, uma vez que a heterogeneidade das conexões tende a desaparecer quando o número de requisições cresce.

Weighted Least Connection
Similar ao Least Connection, só que com pesos. O número de conexões ativas é ponderado pelo peso antes de se decidir para qual servidor a requisição vai ser encaminhada. Por exemplo, imagine as máquinas 8#8 e 9#9 com peso 1 e a máquina 10#10 com peso 2. Se o número de requisições ativas for, respectivamente 50 60 e 70, o numero de conexões efetivas é 16#16, ou seja, 50, 60 e 35. A próxima requisição vai para a máquina 10#10.

Locality Based Least Connection
Atribui trabalhos com o mesmo endereço de destino ao mesmo real server a menos que ele esteja sobrecarregado ou indisponível. Neste caso o trabalho é atribuído a outro real server com menos conexões.

Locality Based Least Connection with Replication
Atribui o trabalho ao real server que tem o menor número de conexões dentre o conjunto que está lidando com certo endereço de destino. Caso todos estejam superlotados, um nó com menos trabalhos é escolhido e adicionado ao conjunto. Se o servidor não foi modificado em um determinado período de tempo o nó mais ocupado é removido do conjunto para evitar um alto grau de replicação.

Destination Hashing
O servidor de destino é escolhido mediante uma tabela de hashing baseada no endereço de destino.

Destination Hashing
O servidor de destino é escolhido mediante uma tabela de hashing baseada no endereço de origem.

Os modos de envio de requisições, que são o LVS-NAT, o LVS-DR e o LVS-Tun.


next up previous contents
Next: LVS-NAT Up: Balanceamento de Carga Previous: Balanceamento de carga com   Sumário
Guilherme Tomas O'Connor de Lungarzo 2004-02-27