Introducción
Este documento describe escenarios en los que podría ocurrir la polarización en el balanceo de carga de canal de puerto y proporciona sugerencias sobre cómo prevenirlos.
Prerequisites
Requirements
Cisco recomienda que tenga conocimiento sobre estos temas:
Componentes Utilizados
Este documento no tiene restricciones específicas en cuanto a versiones de software y de hardware.
La información que contiene este documento se creó a partir de los dispositivos en un ambiente de laboratorio específico. Todos los dispositivos que se utilizan en este documento se pusieron en funcionamiento con una configuración verificada (predeterminada). Si tiene una red en vivo, asegúrese de entender el posible impacto de cualquier comando.
Background
La polarización es un problema en el que el algoritmo hash selecciona ciertas trayectorias en la red y deja las trayectorias redundantes sin utilizar.
Topología
Configuración
N7K1 y N7K2 están conectados en VPC y Po100, Po200, Po300 y Po301 están en el canal de puerto VPC.
N7K1 y N7K2 actúan como un switch L2 puro, sin que se produzca routing en estos switches.
Todos los switches ejecutan el mismo algoritmo de balanceo de carga de canal de puerto.
El problema de polarización se observa en el tráfico que sale de N7K1 y N7K2, independientemente de si el tráfico desde el origen al destino estaba en la misma VLAN (sin ruteo) o si estaban en diferentes VLAN con el ruteo sucediendo en N7K3 o N7k4.
Flujo de tráfico
El origen envía varios flujos al destino (con varias direcciones IP de origen y destino, y la información del puerto L4 también varía de un paquete a otro). Se utiliza una buena combinación de tráfico para garantizar que, en una situación ideal, el tráfico se distribuya uniformemente entre las interfaces miembro del canal de puerto.
El tráfico de la fuente aterriza en N7k3/N7k4 y luego pasa a través de N7K1/N7K2 al destino.
Un enlace entre los enlaces miembro de Po100 y Po200 en cada uno de N7K1 y N7K2 envía casi el 99% del tráfico y el otro enlace permanece inactivo. Es decir, en cada switch N7K1 y N7K2, un link entre 4/2 y 4/3 transporta el 99% del tráfico de unidifusión y el otro link transporta menos del 1%. Del mismo modo, un enlace entre 9/2 y 9/3 transporta el 99% del tráfico y el otro transporta menos del 1%. El resultado de la sección de troubleshooting muestra el tráfico en las interfaces miembro Po100 y Po200 en N7K1. Se puede ver una salida similar en N7K2.
Independientemente del tipo de algoritmo de balanceo de carga de canal de puerto utilizado, el problema se puede observar siempre que se utilice el mismo algoritmo de balanceo de carga de canal de puerto en el par N7K1/N7K2 y en el par N7K3/N7K4. El comando para verificar el algoritmo de balanceo de carga del canal de puerto se muestra aquí:
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
Resolución de problemas
Si se observa un balanceo de carga desigual en un canal de puerto, puede deberse a la polarización.
Cuando el tráfico alcanza los switches N7K3 y N7K4, se reenvían a los switches N7K1/N7K2 a través de Po301 de N7K4 y Po300 de N7K3. Aquí, el algoritmo de balanceo de carga se activa y algunos flujos se reenvían a N7K1 y otros flujos se reenvían a N7K2.
Inicialmente, todo el tráfico entra en los switches N7K3/N7K4 en eth1/1, y según la dirección IP src-dst y la información del puerto l4, ciertos flujos se trocean en el link que va hacia N7K1 y otros flujos se trocean en el link que va hacia N7K2. El hashing se realiza en función del valor rbh que calcula el switch. Para simplificar, supongamos que, según el algoritmo de equilibrio de carga utilizado, el switch separa el tráfico entrante en dos flujos (flujo X e Y). El flujo X se envía desde un link de miembro de canal de puerto y el flujo Y se envía desde el otro link de miembro de canal de puerto.
Ahora, cuando el tráfico está aterrizando en el par N7K1/N7K2, puede haber dos posibilidades. (Considere que X e Y son intercambiables).
Caso 1:
N7K3 envió el flujo X a N7K1 y el flujo Y a N7K2
N7K4 envió el flujo Y al N7K1 y el flujo X al N7K2
Caso 2:
N7K3 envió el flujo X a N7K1 y el flujo Y a N7K2
N7K4 envió el flujo X a N7K1 y el flujo Y a N7K2
En el caso 1, N7K1 y N7K2 reciben ambos tipos de flujos (flujo X y flujo Y) e incluso después de utilizar el mismo algoritmo de balanceo de carga de canal de puerto que el utilizado por N7K3/N7K4, no se observaría polarización a medida que los flujos salen de Po100 y Po200 en diferentes links. Por lo tanto, observamos una mejor distribución del tráfico entre las interfaces miembro del canal de puerto.
En el Caso 2, N7K1 recibe solamente el flujo X y N7K2 recibe solamente el flujo Y y esto podría crear polarización si el algoritmo de balanceo de carga de canal de puerto usado en estos switches es el mismo que el utilizado en el par N7K3/N7K4. Dado que N7K1 y N7K2 utilizan el mismo algoritmo de balanceo de carga de canal de puerto, N7K1 envía el flujo X en un solo link miembro de Po100/Po200 y el otro link miembro no reenvía ningún tráfico. De manera similar, N7K2 envía el flujo Y en un solo link miembro de Po100/Po200 y el otro link miembro no reenvía ningún tráfico.
Dado que el tráfico que reciben los switches N7K1 y N7K2 ya está clasificado para comenzar, solo se utiliza un link de miembro de canal de puerto para enviar todo el tráfico entrante desde el switch N7K1/N7K2 y no se enviará nada desde el otro link de miembro. En el caso de que la velocidad del tráfico entrante exceda el ancho de banda del link de canal de puerto único, el tráfico adicional se puede descartar ya que el otro link miembro del canal de puerto no reenviará este tráfico.
Un problema similar puede observarse cuando se utilizan más de dos links en el canal de puerto. Por ejemplo, si se utilizan cuatro links en un canal de puerto, según el hash que se produzca, no se producirá ninguna polarización o se verá una polarización parcial en la que sólo se utilizarán dos de los cuatro links miembro del canal de puerto para reenviar todo el tráfico entrante. Los otros dos links no reenviarían nada
La polarización se debe al diseño y, por lo tanto, es importante analizar el diseño para asegurarse de que no se produzca ninguna polarización. A continuación se muestra la salida que indica la polarización que ocurre en Po100 y Po200 en N7k1 (también se puede ver una salida similar en N7K2).
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%
Soluciones alternativas
En esta sección se describen algunas de las soluciones alternativas utilizadas para garantizar que no se produzca la polarización.
- Diseño adecuado: dado que la causa principal de la polarización es un diseño incorrecto, lo mejor es asegurarse de que cambiamos el diseño de la red para asegurarnos de que no hay espacio para la polarización en la topología.
Si no es posible realizar cambios en el diseño, podemos hacer lo siguiente.
- Utilice diferentes algoritmos de balanceo de carga de canal de puerto en cada nivel de switches (un algoritmo en el par N7K1/N7k2 y un algoritmo diferente en el par N7K3/N7k4). Cuando se cambia el algoritmo de balanceo de carga, los switches N7k1/N7k2 ahora hackean el tráfico entrante en base a alguna otra información que las utilizadas por los switches N7k3/N7k4. Por lo tanto, el tráfico saliente utiliza todos los links de miembro del canal de puerto. (La decisión sobre qué algoritmo elegir depende del tipo de tráfico recibido por el switch.)
- Si desea utilizar el mismo algoritmo de balanceo de carga, utilice diferentes valores de rotación en cada nivel de switches. El
rotate comando introduce aleatoriedad en el algoritmo de hashing compensando la entrada de hash por bytes configurados por el usuario y ayuda a evitar la polarización. (Utilice un valor de giro para el par N7k1/N7k2 y un valor de giro diferente para el par N7k3/N7k4.)