Introdução
Este documento descreve cenários sob os quais a polarização no balanceamento de carga do canal de porta pode ocorrer e fornece sugestões sobre como evitá-los.
Pré-requisitos
Requisitos
A Cisco recomenda que você tenha conhecimento destes tópicos:
Componentes Utilizados
Este documento não se restringe a versões de software e hardware específicas.
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
Background
A polarização é um problema em que o algoritmo de hash seleciona certos caminhos na rede e deixa os caminhos redundantes sem uso.
Topologia
Configuração
N7K1 e N7K2 estão conectados no VPC e Po100, Po200, Po300 e Po301 estão no canal de porta VPC.
N7K1 e N7K2 atuam como um switch L2 puro, sem que ocorra roteamento nesses switches.
Todos os switches estão executando o mesmo algoritmo de balanceamento de carga de canal de porta.
O problema de polarização é visto no tráfego que sai de N7K1 e N7K2, independentemente de o tráfego da origem para o destino estar na mesma VLAN (sem roteamento) ou se eles estavam em VLANs diferentes com o roteamento acontecendo em N7K3 ou N7k4.
Fluxo de tráfico
A origem envia vários fluxos ao destino (com vários endereços IP origem e destino, e as informações da porta L4 também variam de pacote para pacote). Uma boa combinação de tráfego é usada para garantir que, em uma situação ideal, o tráfego seja distribuído uniformemente entre as interfaces membro do canal de porta.
O tráfego da origem aterrissa em N7k3/N7k4 e depois passa por N7K1/N7K2 para o destino.
Um link entre os links membros do Po100 e do Po200 em cada um dos N7K1 e N7K2 envia quase 99% do tráfego e o outro link permanece ocioso. Ou seja, em cada switch N7K1 e N7K2, um link entre 4/2 e 4/3 transporta 99% de tráfego unicast e o outro link transporta menos de 1%. Da mesma forma, um link entre 9/2 e 9/3 transporta 99% do tráfego e o outro link transporta menos de 1%. A saída na seção de Troubleshooting mostra o tráfego nas interfaces de membro Po100 e Po200 em N7K1. Uma saída semelhante pode ser vista em N7K2.
Independentemente do tipo de algoritmo de balanceamento de carga de canal de porta usado, o problema pode ser visto desde que o mesmo algoritmo de balanceamento de carga de canal de porta seja usado no par N7K1/N7K2 e no par N7K3/N7K4. O comando para verificar o algoritmo de balanceamento de carga do canal de porta é mostrado aqui:
N7K1# show port-channel load-balance
Warning: Per Packet Load balance configuration has higher precedence
System config:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Port Channel Load-Balancing Configuration for all modules:
Module 1:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 2:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 3:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 4:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 7:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 8:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 9:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Troubleshooting
Se o balanceamento de carga irregular for visto em um canal de porta, pode ser devido à polarização.
Quando o tráfego atinge os switches N7K3 e N7K4, eles são encaminhados para os switches N7K1/N7K2 via Po301 de N7K4 e Po300 de N7K3. Aqui, o algoritmo de balanceamento de carga é acionado e alguns fluxos são encaminhados para N7K1 e outros fluxos são encaminhados para N7K2.
Inicialmente, todo o tráfego chega aos switches N7K3/N7K4 em eth1/1 e, com base no endereço IP src-dst e nas informações de porta l4, certos fluxos são divididos em hash no link que vai para N7K1 e outros fluxos divididos em hash no link que vai para N7K2. O hashing é feito com base no valor rbh calculado pelo switch. Para simplificar, vamos supor que, com base no algoritmo de balanceamento de carga usado, o switch separa o tráfego de entrada em dois fluxos (fluxo X e fluxo Y). O fluxo X é enviado para fora de um link membro do canal de porta e o fluxo Y é enviado para fora do outro link membro do canal de porta.
Agora, quando o tráfego está aterrissando no par N7K1/N7K2, pode haver duas possibilidades. (Considerar X e Y como intercambiáveis.)
Caso1:
N7K3 enviou fluxo X para N7K1 e fluxo Y para N7K2
N7K4 enviou fluxo Y para N7K1 e fluxo X para N7K2
Caso2:
N7K3 enviou fluxo X para N7K1 e fluxo Y para N7K2
N7K4 enviou fluxo X para N7K1 e fluxo Y para N7K2
No Caso 1, N7K1 e N7K2 recebem ambos os tipos de fluxos (fluxo X e fluxo Y) e mesmo depois de usar o mesmo algoritmo de balanceamento de carga de canal de porta usado por N7K3/N7K4, nenhuma polarização seria vista como a saída de fluxos de Po100 e Po200 em links diferentes. Portanto, vemos uma melhor distribuição de tráfego entre as interfaces membro do canal de porta.
No Caso 2, N7K1 recebe apenas o fluxo X e N7K2 recebe apenas o fluxo Y e isso pode criar polarização se o algoritmo de balanceamento de carga do canal de porta usado nesses switches for o mesmo que o usado no par N7K3/N7K4. Como N7K1 e N7K2 usam o mesmo algoritmo de balanceamento de carga de canal de porta, N7K1 envia o fluxo X em apenas um link membro de Po100/Po200 e o outro link membro não encaminha nenhum tráfego. Da mesma forma, N7K2 envia o fluxo Y em apenas um link membro de Po100/Po200 e o outro link membro não encaminha nenhum tráfego.
Como o tráfego que os switches N7K1 e N7K2 recebem já está classificado para começar, apenas um link membro de canal de porta é usado para enviar todo o tráfego de entrada do switch N7K1/N7K2 e nada seria enviado para fora do outro link membro. Se a taxa de tráfego de entrada exceder a largura de banda do link de canal de porta único, o tráfego adicional poderá ser descartado, pois o outro link de membro de canal de porta não encaminharia esse tráfego.
Um problema semelhante pode ser visto quando mais de dois links são usados no canal de porta. Por exemplo, se quatro enlaces forem usados em um canal de porta, dependendo do hashing que estiver ocorrendo, não ocorrerá polarização ou veremos polarização parcial em que apenas dois dos quatro enlaces membros do canal de porta serão usados para encaminhar todo o tráfego de entrada. Os outros dois links não encaminham nada
A polarização é causada por causa do design e, portanto, é importante analisar o design para garantir que não ocorra nenhuma polarização. A saída que indica polarização ocorrendo em Po100 e Po200 em N7k1 é mostrada em seguida (saída semelhante pode ser vista em N7K2 também).
N7K1# show port-channel summary | i 200
200 Po200(SU) Eth LACP Eth9/2(P) Eth9/3(P)
N7K1# show port-channel traffic interface port-channel 200
NOTE: Clear the port-channel member counters to get accurate statistics
ChanId Port Rx-Ucst Tx-Ucst Rx-Mcst Tx-Mcst Rx-Bcst Tx-Bcst
------ --------- ------- ------- ------- ------- ------- -------
200 Eth9/2 0.0% 99.99% 44.44% 4.00% 0.0% 100.00%
200 Eth9/3 0.0% 0.00% 55.55% 96.00% 0.0% 0.0%
N7K1# show port-channel summary | i 100
100 Po100(SU) Eth LACP Eth4/2(P) Eth4/3(P)
N7K1# show port-channel traffic interface port-channel 100
NOTE: Clear the port-channel member counters to get accurate statistics
ChanId Port Rx-Ucst Tx-Ucst Rx-Mcst Tx-Mcst Rx-Bcst Tx-Bcst
------ --------- ------- ------- ------- ------- ------- -------
100 Eth4/2 0.0% 99.99% 40.55% 7.00% 0.0% 100.00%
100 Eth4/3 0.0% 0.00% 54.44% 93.00% 0.0% 0.0%
Soluções
Algumas das soluções usadas para garantir que a polarização não aconteça são descritas nesta seção.
- Design adequado: como a principal causa da polarização é o design inadequado, é melhor garantir que alteramos o design da rede para garantir que não haja espaço para polarização na topologia.
Se não for possível fazer alterações no projeto, podemos fazer o seguinte.
- Use algoritmos diferentes de balanceamento de carga de canal de porta em cada nível de switches (um algoritmo no par N7K1/N7k2 e um algoritmo diferente no par N7K3/N7k4). Quando o algoritmo de balanceamento de carga é alterado, os switches N7k1/N7k2 agora fazem o hash do tráfego de entrada com base em algumas informações diferentes das usadas pelos switches N7k3/N7k4. Portanto, o tráfego de saída usa todos os links membros do canal de porta. (A decisão sobre qual algoritmo escolher depende do tipo de tráfego recebido pelo switch.)
- Se você quiser usar o mesmo algoritmo de balanceamento de carga, use valores de rotação diferentes em cada nível de switches. O
rotate comando introduz aleatoriedade no algoritmo de hash ao deslocar a entrada de hash por bytes configurados pelo usuário e ajuda a evitar a polarização. (Use um valor de rotação para o par N7k1/N7k2 e um valor de rotação diferente para o par N7k3/N7k4.)