9.3. Visão Geral do Scheduling LVS

Uma das vantagens de usar um cluster LVS é sua habilidade em executar o balanceamento flexível de carga ao nível IP no conjunto de servidores reais. Esta flexibilidade se deve à variedade de algoritmos de scheduling que um administrador pode escolher ao configurar um cluster. O balanceamento de carga LVS é superior aos métodos menos flexíveis, como o DNS Round-Robin, onde a natureza hierárquica do DNS e a memória cache de máquinas cliente pode causar o desequilíbrio de carga. Adicionalmente, a filtragem de baixo nível empregada pelo roteador LVS tem vantagens sobre o encaminhamento de pedidos ao nível da aplicação, porque balancear cargas ao nível do pacote de rede causa sobrecarga mínima do computador e permite maior escalabilidade.

Ao usar o scheduling, o roteador ativo pode considerar as atividades dos servidores reais e, opcionalmente, o fator peso atribuído pelo administrador ao rotear pedidos de serviços. Usar pesos atribuídos proporciona prioridades arbitrárias para máquinas individuais. Usando esta forma de agendamento, é possível criar um grupo de servidores reais usando uma variedade de combinações de hardware e software, e o roteador ativo pode inclusive carregar cada servidor real.

O mecanismo de scheduling de um cluster LVS é provido por um conjunto de consertos do kernel chamado Servidor IP Virtual ou módulos IPVS. Estes módulos possibilitam a função de comutação da camada de transporte da camada 4 (L4, layer 4), que é desenvolvida para funcionar bem com múltiplos servidores em um único endereço IP.

Para rastrear e direcionar pacotes eficientemente aos servidores reais, o IPVS cria uma tabela IPVS no kernel. Esta tabela é usada pelo roteador LVS ativo para redirecionar pedidos de um endereço de servidor virtual para e retornando de servidores reais no conjunto. A tabela IPVS é atualizada constantemente por um utilitário chamado ipvsadm — adicionando e removendo membros do cluster, dependendo de suas disponibilidades.

9.3.1. Agendando Algoritmos

A estrutura da tabela IPVS depende do algoritmo de scheduling que o administrador escolhe para um dado servidor virtual. Para permitir a máxima flexibilidade nos tipos de serviço que você pode clusterizar e em como estes serviços são agendados, o Red Hat Enterprise Linux oferece os algoritmos de agendamento listados abaixo. Para instruções sobre a atribuição de algoritmos de agendamento, consulte a Seção 12.6.1.

Scheduling Round-Robin

Distribui cada pedido sequencialmente ao longo do conjunto de servidores reais. Ao utilizar este algoritmo, todos os servidores reais são tratados igualmente sem considerar a capacidade ou carga. Este modelo de scheduling assemelha-se ao DNS round-robin, mas é mais granular devido ao fato de ser baseado em uma conexão de rede e não baseado na máquina. O scheduling round-robin do LVS também não sofre os desequilíbrios causados por pedidos DNS na memória cache.

Scheduling Weighted Round-Robin

Distribui cada pedido sequencialmente ao longo do conjunto de servidores reais, mas atribui mais tarefas aos servidores com maior capacidade. A capacidade é indicada pelo fator peso atribuído pelo usuário, que por sua vez é ajustado para cima ou para baixo pela informação de carga dinâmica. Consulte a Seção 9.3.2 para mais informações sobre a pesagem de servidores reais.

O Weighted weighted round-robin é a melhor opção se há diferenças significativas entre as capacidades dos servidores reais no conjunto. Entretanto, se a carga dos pedidos varia drasticamente; quanto mais carga o servidor responder maior será sua porção de pedidos.

Least-Connection

Distribui mais pedidos a servidores reais com menos conexões ativas. Como acompanha as conexões ativas aos servidores reais através da tabela IPVS, o least-connection é um tipo de algoritmo de scheduling dinâmico, tornando-o uma opção melhor se há uma grande variação da carga de pedidos. É mais indicado para um conjunto de servidores reais, no qual cada nódulo do membro tem aproximadamente a mesma capacidade. Se um grupo de servidores tem capacidades diferentes, o agendamento weighted least-connection é uma opção melhor.

Weighted Least-Connections (default)

Distribui mais pedidos aos servidores com menos conexões ativas relativamente às suas capacidades. A capacidade é indicada pelo peso atribuído pelo usuário, que então é ajustado para cima ou para baixo por informações de carga dinâmica. A adição de pesagem torna este algoritmo ideal para um conjunto de servidores reais que contém hardware com capacidades variadas. Consulte a Seção 9.3.2 para saber mais sobre a pesagem de servidores reais.

Scheduling Least-Connection Baseado na Localidade

Distribui mais pedidos aos servidores com menos conexões ativas relativamente aos seus IPs de destino. Este algoritmo é desenvolvido para uso em um cluster de servidor proxy-cache. Ele direciona os pacotes de um endereço IP para o servidor com o mesmo endereço, a não ser que este servidor esteja acima de sua capacidade e haja um servidor usando metade de sua carga. Neste caso atribui o endereço IP ao servidor real menos carregado.

Scheduling Least-Connection Baseado na Localidade com Scheduling de Duplicação

Distribui mais pedidos aos servidores com menos conexões ativas em relação aos seus IPs de destino. Este algoritmo também é desenvolvido para uso em um cluster de servidor proxy-cache. Este difere do Scheduling Least-Connection Baseado na Localidade mapeando o endereço IP alvo para um sub-conjunto de nódulos de servidores reais. Os pedidos são então direcionados ao servidor deste conjunto com o menor número de conexões. Se todos os nódulos para o IP de destino estão acima da capacidade, ocorre uma duplicação de um novo servidor para aquele endereço IP de destino, adicionando o servidor real com menos conexões dentre todo o conjunto ao sub-conjunto de servidores reais para aquele IP de destino. E então, o nódulo mais carregado é derrubado do sub-conjunto de servidores reais para evitar super-duplicação.

Scheduling Destination Hash

Distribui pedidos ao conjunto de servidores reais procurando o IP de destino em uma tabela hash estática. Este algoritmo é atrbuído para o uso em um cluster de servidor proxy-cache.

Scheduling Source Hash

Distribui pedidos ao conjunto de servidores reais procurando o IP fonte em uma tabela hash estática. Este algoritmo é desenvolvido para roteadores LVS com firewalls múltiplos.

9.3.2. Carga de Servidor e Scheduling

O administrador de um cluster LVS pode atribuir um peso (weight) para cada nódulo do conjunto de servidores reais. Este peso é um valor inteiro que é fracionado em algoritmos de scheduling weight-aware (como weighted least-connections) e ajuda o roteador LVS a carregar uniformemente o hardware com capacidades diferentes.

Pesos funcionam como uma proporção relativa de um para outro. Por exemplo: se um servidor real tem peso 1 e o outro servidor tem peso 5, então o servidor com peso 5 recebe 5 conexões para cada conexão que o outro servidor recebe. O valor default do peso de um servidor real é 1.

Apesar da adição de peso a configurações variadas de hardware em um conjunto real de servidores ajudar a balancear a carga do cluster com mais eficiência, pode causar desequilíbrios temporários quando um servidor real é inserido ao conjunto e o servidor virtual é agendado usando weighted least-connections. Por exemplo: suponha que há três servidores reais no conjunto. Servidores A e B têm peso 1 e o servidor C tem peso 2. Se o servidor C cair por algum motivo, os servidores A e B distribuem uniformemente a carga abandonada. No entanto, quando o servidor C voltar, o roteador LVS percebe que este tem zero conexões e inunda o servidor com todos os pedidos que entram até que se equipare aos servidores A e B.

Para evitar este fenômeno, os administradores podem fazer do servidor virtual um servidor quiesce — toda vez que um novo nódulo de servidor real vier online, a tabela de least-connections é restaurada para zero e o roteador LVS direciona os pedidos como se todos os servidores estivessem sido recém adicionados ao cluster.