Balanceador de Carga LVS: Conceitos e Configuração

  1. Introdução

O LVS (Linux Virtual Server) é um balanceador de carga integrado no kernel do Linux, que opera na camada 4 (transporte) do modelo OSI. É uma solução amplamente utilizada para distribuir tráfego entre múltiplos servidores backend.

  1. Princípio de Funcionamento

O LVS opera na cadeia de entrada (input chain) do netfilter, processando pacotes destinados a essa cadeia.

Conceitos Fundamentais:

  • VS: O balanceador de carga em si (Virtual Server)
  • RS: Servidor backend ou instância de serviço (Real Server)
  • CIP: Endereço IP do cliente (Client IP)
  • VIP: Endereço IP de entrada do balanceador (Virtual IP)
  • DIP: Endereço IP de saída do balanceador (Director IP)
  • RIP: Endereço IP do servidor back end (Real Server IP)

O VS direciona os pacotes de entrada com base no endereço IP de destino, protocolo e porta, encaminhando-os para um RS específico de acordo com o algoritmo de agendamento utilizado.

  1. Suporte de Funcionalidades

Para verificar se o suporte ao IPVS está habilitado no kernel:

grep -i -C 10 ipvs /boot/config-versao-do-kernel
  1. Modos de Operação

4.1 Modo NAT

Princípio: A comunicação é estabelecida através de conversão de endereços NAT. O VS atua como um proxy entre os clientes e os servidores backend.

Roteamento de Solicitações:

  1. Cliente: src=cip, dest=vip, port=porta
  2. VS: src=dip, dest=rip, port=rs:porta

Roteamento de Respostas:

  1. RS: src=rip, dest=dip, port=rs:porta
  2. VS: src=vip, dest=cip, port=porta

4.2 Modo DR (Direct Routing)

Princípio: Roteamento direto. Os servidores backend são configurados com o mesmo VIP do balanceador, e a comunicação ocorre através da rede de camada 2. O VS e os RS devem estar na mesma domínio de broadcast, e é necessário resolver conflitos de IP (através de bind ARP e desabilitando o mecanismo de resposta nos RS).

Características: O VS atua apenas como balanceador, responsável por agendar o tráfego. As respostas são enviadas diretamente aos clientes pelos servidores backend.

Roteamento de Solicitações:

  1. Cliente: srcip=cip, srcmac=mac_cliente, destip=vip, destmac=mac_vs
  2. VS: src=cip, srcmac=mac_vs, destip=vip, destmac=mac_rs

Roteamento de Respostas:

  1. RS: srcip=vip, srcmac=mac_rs, destip=cip, destmac=mac_cliente

4.3 Modo TUN (Tunneling)

Princípio: Utiliza túneis para encapsular e encaminhar pacotes. Permite operar entre diferentes segmentos de rede sem conflitos de IP, pois os RS podem ter o mesmo VIP que o VS.

Roteamento de Solicitações:

  1. Cliente: srcip=cip, destip=vip, port=porta
  2. VS: srcip=dip, destip=rip, port=porta

Roteamento de Respostas:

  1. RS: srcip=vip, destip=cip

4.4 Modo FullNAT

Realiza substituição completa de endereços no pacote IP. Este recurso não é nativo do kernel e requer implementação adicional.

  1. Algoritmos de Agendamento

5.1 Algoritmos Estáticos

Os algoritmos estáticos não consideram a carga atual dos servidores backend, seguindo apenas regras predefinidas para distribuição do tráfego.

5.1.1 RR (Round Robin)

Distribui o tráfego sequencialmente entre todos os servidores backend disponíveis.

5.1.2 WRR (Weighted Round Robin)

Distribui o tráfego com base em pesos atribuídos a cada servidor. Por exemplo, com pesos 3:6:1, a cada 10 solicitações, 3 irão para o servidor A, 6 para o B e 1 para o C.

5.1.3 SH (Source Hashing)

Utiliza um hash do endereço IP de origem para direcionar todo o tráfego de um mesmo cliente para o mesmo servidor backend.

5.1.4 DH (Destination Hashing)

Para cada novo endereço de destino, utiliza um algoritmo de round-robin inicial. Posteriormente, todo o tráfego para esse destino é direcionado para o mesmo servidor backend.

5.2 Algoritmos Dinâmicos

5.2.1 LC (Least Connections)

Sempre direciona o tráfego para o servidor backend com menor número de conexões atuais.

Cálculo de carga: Overhead = activeconns*256 + inactiveconns

5.2.2 WLC (Weighted Least Connections)

Considera tanto o número de conexões quanto o peso de cada servidor.

Cálculo de carga: Overhead = (activeconns*256 + inactiveconns)/weight

5.2.3 SED (Shortest Expected Delay)

Dá prioridade a servidores com menor atraso esperado, considerando apenas conexões ativas e pesos.

Cálculo de carga: Overhead = (activeconns+1)*256/weight

5.2.4 NQ (Never Queue)

Na primeira rodada, utiliza round-robin. Nas subsequentes, utiliza o algoritmo SED.

5.2.5 LBLC (Locality-Based Least-Connection)

Versão dinâmica do algoritmo DH.

5.2.6 LBLCR (Locality-Based Least-Connection with Replicasion)

Versão com função de replicação do LBLC.

  1. Comandos de Gerenciamento

6.1 Instalação

yum -y install ipvsadm

6.2 Gerneciamento de Cluster

Adicionar ou modificar um serviço de cluster:

ipvsadm -A|E -t|u|f endereco-servico [-s algoritmo] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
	-A # Adicionar
	-E # Modificar
	-t # TCP ip:porta
	-f # Firewall MARK (marca)
	-u # UDP ip:porta
	-s # Especificar algoritmo de agendamento

Exemplo:

ipvsadm -A -t 192.168.1.100:80 -s wrr

Remover um serviço:

ipvsadm -D -t 192.168.1.100:80

6.3 Gerenciamento de Servidores Backend

Adicionar ou modificar um servidor backend:

ipvsadm -a|e -t|u|f endereco-servico -r endereco-servidor [-g|i|m] [-w peso]
	-a # Adicionar
	-e # Modificar
	-t # TCP ip:porta
	-f # Firewall MARK (marca)
	-u # UDP ip:porta
	-r # Endereço IP:porta do backend
	-g # Modo gateway (DR)
	-i # Modo túnel (TUN)
	-m # Modo NAT
	-w # Especificar peso

Exemplo:

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.8:8080 -m -w 3

Limpar todas as regras:

ipvsadm -C

6.4 Visualização de Configurações

ipvsadm -L [opcoes]
Opcoes:
    --numeric, -n: Exibir endereços e portas em formato numérico
    --exact: Informações estendidas com valores exatos
    --connection, -c: Exibir conexões atuais do IPVS
    --stats: Informações estatísticas
    --rate: Exibir informações de taxa

6.5 Salvar e Restaurar Configurações

Salvar regras:

ipvsadm-save > /CAMINHO/ARQUIVO_IPVS
ipvsadm -S > /CAMINHO/ARQUIVO_IPVS
systemctl stop ipvsadm.service # Salva automaticamente as regras em /etc/sysconfig/ipvsadm

Restaurar regras:

ipvsadm-restore < /CAMINHO/ARQUIVO_IPVS
systemctl start ipvsadm.service # Carrega automaticamente as regras de /etc/sysconfig/ipvsadm

Tags: balanceador-de-carga lvs ipvs Linux TCP

Publicado em 6-21 18:41