Next: LVS-NAT
Up: Balanceamento de Carga
Previous: Balanceamento de carga com
  Sumário
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: LVS-NAT
Up: Balanceamento de Carga
Previous: Balanceamento de carga com
  Sumário
Guilherme Tomas O'Connor de Lungarzo
2004-02-27