Contenido

Introducción

Background

Prerequisites

Topología

Configuración

Flujo de tráfico

Resolución de problemas

Solución Aternativa

Introducción

Este documento explica los escenarios bajo los cuales podría ocurrir la polarización en el balanceo de carga de canal de puerto y proporciona sugerencias sobre cómo prevenirlos.

Background

Polarización es un problema donde el algoritmo hash selecciona ciertas trayectorias en la red y deja las trayectorias redundantes sin utilizar

Prerequisites

Se recomienda conocer los siguientes temas.

Link Aggregation Control Protocol

Plataformas Cisco Nexus

Topología

Configuración

N7K1 y N7K2 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 un ruteo 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 del origen al destino estaba en la misma vlan (sin ruteo) o si estaban en una vlan diferente con el ruteo que ocurre en N7K3 o N7k4.

Flujo de tráfico

El origen envía varias secuencias al destino (con varias direcciones IP de origen y de destino, y la información del puerto L4 también varía de un paquete a otro). Se utiliza una buena mezcla de tráfico para garantizar que, en una situación ideal, el tráfico se distribuya de manera uniforme entre las interfaces miembro del canal de puerto.

El tráfico de origen aterriza en N7k3/N7k4 y luego va a través de N7K1/N7K2 al destino.

Un link entre links miembro de Po100 y Po200 en cada N7K1 y N7K2 está enviando casi el 99% del tráfico y el otro link permanece inactivo. (es decir, en cada switch N7K1 y N7K2, un link entre 4/2 y 4/3 transporta el 99% del tráfico unicast y el otro link transporta menos del 1%, de manera similar, un link entre 9/2 y 9/3 transporta el 99% del tráfico y el otro link transporta menos del 1%. la salida de la sección Troubleshooting muestra el tráfico en las interfaces de miembro po100 y po200 en N7K1, una salida similar puede verse en N7K2).

Independientemente del tipo de algoritmo de balanceo de carga de canal de puerto utilizado, el problema puede verse 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 de canal de puerto se proporciona a continuación.

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 llega a 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 reenviados a N7K2.

Inicialmente, todo el tráfico ingresa en los switches N7K3/N7K4 en eth1/1 y en base a la información de puerto ip y l4 src-dest, ciertos flujos se transmiten en el link hacia N7K1 y otros flujos se transmiten en el link hacia N7K2. El hashing se realiza en base al valor rbh que calcula el switch. Por simplicidad, supongamos que, según el algoritmo de equilibrio de carga utilizado, el switch separa el tráfico entrante en dos flujos (flujo X y flujo Y). Flujo X enviado desde un link de miembro de canal de puerto y flujo Y enviado 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. (Consideración de X e Y como intercambiables)

Caso 1:

N7K3 envió el flujo X a N7K1 y el flujo Y a N7K2

y

N7K4 envió el flujo Y a N7K1 y el flujo X a N7K2

Caso 2:

N7K3 envió el flujo X a N7K1 y el flujo Y a N7K2

y

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 usar el mismo algoritmo de balanceo de carga de canal de puerto que el N7K3/N7K4, no se vería ninguna polarización a medida que los flujos salen de Po100 y Po200 en diferentes links y, por lo tanto, vemos una mejor distribución del tráfico entre las interfaces miembro de 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 utilizado en estos switches es el mismo que el utilizado en el par N7K3/N7K4. Como N7K1 y N7K2 están usando 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 reenviará 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 reenviará ningún tráfico.

Dado que el tráfico que reciben los switches N7K1 y N7K2 ya está clasificado para comenzar, solamente se utilizará un link miembro de canal de puerto para enviar todo el tráfico entrante fuera del switch N7K1/N7K2 y no se enviará nada fuera del otro link miembro. En el caso de que la velocidad de 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 de miembro de canal de puerto no reenviará este tráfico.

Se puede ver un problema similar 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, entonces dependiendo de la operación de hashing, no se produciría ninguna polarización o veremos una polarización parcial donde sólo se usarían dos de los cuatro links miembro de canal de puerto para reenviar todo el tráfico entrante y los otros dos links no reenviarían nada

La polarización es causada por el diseño y por lo tanto es importante analizar el diseño para asegurarse de que no se produce polarización. A continuación se muestra el resultado que indica la polarización que ocurre con Po100 y Po200 en N7k1 (también se puede ver un resultado 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%

CSCvq26885 se presentó para documentación externa.

Solución Aternativa

Siga algunas de las soluciones alternativas que se pueden utilizar para asegurarse de que no se produce la polarización.

1. Diseño adecuado: Dado que la causa principal de la polarización es un diseño inadecuado, lo mejor es asegurarse de que cambiemos el diseño de la red para asegurarnos de que no hay lugar para la polarización en la topología

Si no es posible realizar cambios en el diseño, podemos hacer lo siguiente.

2. Utilice algoritmos de balanceo de carga de canal de puerto diferentes 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 hacen un hash del tráfico entrante basado en alguna otra información que no sean las utilizadas por los switches N7k3/N7k4 y, por lo tanto, el tráfico saliente utiliza todos los links miembro del canal de puerto. (La decisión sobre qué algoritmo elegir depende del tipo de tráfico recibido por el switch)

3. Si el cliente desea utilizar el mismo algoritmo de balanceo de carga, utilice diferentes valores de rotación en cada nivel de switches. El comando Rotate introduce aleatoriedad en el algoritmo de hash al compensar la entrada hash por bytes configurados por el usuario y ayuda a evitar la polarización. (Utilice un valor de rotación para el par N7k1/N7k2 y un valor de rotación diferente para el par N7k3/N7k4)