Por que o Elastic Load Balancing roteia o tráfego de um load balancer de forma desigual?

7 minuto de leitura
0

Configurei meu balanceador de carga para rotear o tráfego igualmente entre instâncias ou entre zonas de disponibilidade. No entanto, o Elastic Load Balancing (ELB) direciona mais tráfego para uma instância ou zona de disponibilidade do que as outras. Por que isso está acontecendo e como posso corrigir o problema?

Descrição breve

O ELB pode direcionar o tráfego de forma desigual para seus alvos quando:

  • Os clientes estão roteando solicitações para um endereço IP incorreto de um nó de balanceador de carga com um log DNS que tem um TTL expirado.
  • As sessões fixas (afinidade de sessão) estão habilitadas para o balanceador de carga. As sessões fixas usam cookies para ajudar o cliente a manter uma conexão com a mesma instância durante a vida útil do cookie, o que pode causar desequilíbrios ao longo do tempo.
  • As instâncias íntegras disponíveis não estão distribuídas uniformemente entre as zonas de disponibilidade.
  • As instâncias de um tipo específico de capacidade não são distribuídas igualmente entre as zonas de disponibilidade.
  • Há conexões TCP de longa duração entre clientes e instâncias.
  • A conexão usa um WebSocket.

Resolução

Confirmar o desequilíbrio do tráfego

Analise os logs de acesso do ELB, se disponíveis, para confirmar o desequilíbrio do tráfego. Use ferramentas de linha de comando para encontrar o número de solicitações que são roteadas pelo balanceador de carga para aplicações específicas.

Para Application Load Balancers:

awk '{print $5}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r

Para Classic Load Balancers:

awk '{print $4}' *.log | awk -F ":" '{print $1}' | sort | uniq -c | sort -r

O ELB adiciona arquivos individuais para cada nó do ELB ao seu bucket. Você pode comparar o número de linhas nos seus arquivos de log de acesso em um período específico.

Limpar o cache do DNS

O roteamento com base em entradas de DNS desatualizadas resulta em um padrão RequestCount desequilibrado em diferentes zonas de disponibilidade. Para mais informações, consulte Métricas do Application Load Balancer ou Métricas do Classic Load Balancer. Limpe o cache DNS do seu cliente para garantir que ele use os logs de DNS atuais para os nós do balanceador de carga.

Observação: quando o balanceamento de carga entre zonas está habilitado, o balanceador de carga ainda pode balancear uniformemente as solicitações no nível da instância.

Para clientes Linux que usam nscd para armazenamento em cache de DNS, execute um dos seguintes comandos:

sudo /etc/init.d/nscd restart
# service nscd restart
# service nscd reload

Para clientes Linux que usam dnsmasq para armazenamento em cache de DNS, execute um dos seguintes comandos:

$ sudo /etc/init.d/dnsmasq restart
# service dnsmasq restart

Para clientes Linux que usam BIND para armazenamento em cache de DNS, execute um dos seguintes comandos:

# /etc/init.d/named restart
# rndc restart
# rndc exec

Para clientes Windows, execute o seguinte comando:

ipconfig /flushdns

Observação: se você limpou o cache DNS do seu cliente, mas ainda tem problemas de cache, certifique-se de que sua aplicação cliente não esteja armazenando logs de DNS em cache.

Verificar a configuração das sessões fixas

Se você usar persistência de sessão baseada em duração, configure um tempo de expiração de cookie apropriado para seu caso de uso específico. Para mais informações, consulte:

Se você definir a permanência da sessão em aplicações individuais, use cookies de sessão em vez de cookies persistentes sempre que possível. Para mais informações, consulte Permanência da sessão controlada pela aplicação (Classic Load Balancers).

Verificar a distribuição saudável das instâncias nas zonas de disponibilidade

Se houver um número desigual de instâncias íntegras disponíveis em suas zonas de disponibilidade e o balanceamento de carga entre zonas estiver desabilitado, o ELB deverá balancear as solicitações em menos instâncias nas zonas de disponibilidade afetadas. As instâncias saudáveis restantes processam um número maior de solicitações para compensar, o que pode afetar negativamente a performance.

Observação: um desequilíbrio da carga de tráfego entre instâncias ou zonas de disponibilidade não significa necessariamente que a utilização de recursos também esteja desequilibrada. Por exemplo, um desequilíbrio pode acontecer quando uma ou mais instâncias que estão por trás de um balanceador de carga processam solicitações mais rápido do que as outras.

Mantenha um número igual de instâncias em cada zona de disponibilidade ativada. Para adicionar mais instâncias como destinos do balanceador de carga, consulte:

Para Classic Load Balancers e Network Load Balancers, considere habilitar o balanceamento de carga entre zonas para distribuir solicitações no nível da instância em vez do nível da zona de disponibilidade. Para mais informações, consulte Balanceamento de carga entre zonas (Network Load Balancers) ou Configurar o balanceamento de carga entre zonas para seu Classic Load Balancer. O balanceamento de carga entre zonas está sempre habilitado para Application Load Balancers.

Verifique a distribuição do tipo de instância

Um Classic Load Balancer com ouvintes HTTP ou HTTPS pode direcionar mais tráfego para tipos de instância de maior capacidade. Essa distribuição visa evitar que tipos de instâncias de menor capacidade tenham muitas solicitações pendentes. Para mais informações, consulte Tipos de instância. É uma prática recomendada usar tipos de instâncias e configurações semelhantes para reduzir a probabilidade de falhas de capacidade e desequilíbrios de tráfego.

Um desequilíbrio de tráfego também poderá ocorrer se você tiver instâncias de capacidades semelhantes em execução em diferentes Imagens de máquina da Amazon (AMIs). Nesse cenário, o desequilíbrio do tráfego em favor de tipos de instância de maior capacidade é desejável.

Verifique se há conexões TCP de longa duração

O Elastic Load Balancing roteia o tráfego TCP usando um algoritmo round-robin. Conexões TCP de longa duração entre clientes e instâncias causam distribuição desigual da carga de tráfego por design. Como resultado, novas instâncias demoram mais para atingir o equilíbrio da conexão. Certifique-se de verificar suas métricas para conexões TCP de longa duração que possam estar causando problemas. Observe também que, com ouvintes TCP, o balanceador de carga distribui o tráfego somente no nível da conexão. Isso significa, por exemplo, que clientes que frequentemente reutilizam conexões para enviar e receber várias solicitações HTTP podem produzir tráfego desequilibrado no nível da instância. Considere migrar para um balanceador de carga de camada 7 se a sua aplicação oferecer suporte a protocolos de rede de camadas superiores, como HTTP, HTTPS, WebSocket ou HTTP2.

Verifique os padrões de RequestCount do seu balanceador de carga e outras métricas relevantes. Para mais informações, consulte:

Verificar se há conexões WebSocket

Clientes que usam balanceadores de carga com conexões WebSocket usam uma conexão 1:1 entre o cliente e o destino. Essa conexão permanece presa ao destino durante a duração da conexão WebSocket, causando distribuição desigual do tráfego. Os Application Load Balancers fornecem suporte nativo para WebSockets. Somente novas solicitações HTTP que são atualizadas para WebSockets vão para os novos destinos. WebSockets também funcionam com balanceadores de carga clássicos e balanceadores de carga de rede com receptor de camada 4.

Para mais informações, consulte Configuração do listener.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos