Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

В данной статье разберем примеры настройки балансировки трафика в агрегирующих интерфейсах (bundle-ether) и ECMP, а также рассмотрим применение FAT метки.


В качестве примера будем использовать следующую схему включения, изображенную на рисунке 1.


Рисунок 1 — Схема включения


На рисунке 1 изображены две AS 64500 и AS 64501, где в AS 64500 настроено следующее:

1. Адресация на интерфейсах

2. ISIS

3. IBGP

4. EBGP

5. MPLS LDP

6. Заведены и анонсированы сети: 192.168.16.0/24 и 11.1.0.0/24


В AS 64500 настроен EBGP, где заведены, а также анонсированы сети: 192.168.17.0/24 и 10.3.0.0/24.


Таким образом, маршрутизатор R3 получает следующую маршрутную информацию по BGP:

0/ME5100:R3# show  bgp 
Mon Jul 10 15:57:41 2023
  BGP router identifier 3.3.3.3, local AS number 64500 
  Graceful Restart is disabled
  BGP table state: active
  BGP scan interval: 120 secs
  
  Status codes: d damped, h history, > best, b backup, S stale, * active, u untracked, i internal
  Origin codes: i igp, e egp, ? incomplete
  
  Network                  Next hop         Metric  LocPrf  Weight  Path 
  ------------------------ ---------------- ------- ------- ------- ----- 
  *>i  10.3.0.0/24         2.2.2.2          0       100     0       64501 i 
  * i  10.3.0.0/24         5.5.5.5          0       100     0       64501 i 
   >   11.1.0.0/24                          0       100     32768   i 
   >   192.168.16.0/24                      0       100     32768   i 
  *>i  192.168.17.0/24     2.2.2.2          0       100     0       64501 i 
  * i  192.168.17.0/24     5.5.5.5          0       100     0       64501 i 

  Total entries: 6


Маршрутизатор R4:

0/ME5200:R4# show  bgp 
Mon Jul 10 15:59:29 2023
  BGP router identifier 4.4.4.4, local AS number 64501 
  Graceful Restart is disabled
  BGP table state: active
  BGP scan interval: 120 secs
  
  Status codes: d damped, h history, > best, b backup, S stale, * active, u untracked, i internal
  Origin codes: i igp, e egp, ? incomplete
  
  Network                  Next hop         Metric  LocPrf  Weight  Path 
  ------------------------ ---------------- ------- ------- ------- ----- 
   >   10.3.0.0/24                          0       100     32768   i 
  *    11.1.0.0/24         10.0.0.6         0       100     0       64500 i 
  *>   11.1.0.0/24         10.0.0.4         0       100     0       64500 i 
  *>   192.168.16.0/24     10.0.0.6         0       100     0       64500 i 
  *    192.168.16.0/24     10.0.0.4         0       100     0       64500 i 
   >   192.168.17.0/24                      0       100     32768   i 

  Total entries: 6


Сначала рассмотрим балансировку ECMP (Equal Cost Multiple Paths).

Данный функционал позволяет передавать пакеты одному получателю по нескольким лучшим маршрутам, что позволяет распределить нагрузку по нескольким путям. ECMP может работать как с статическими маршрутами, так и с протоколами динамической маршрутизации (ISIS, OSPF. BGP).

Для того чтобы учитывались ECMP маршруты в GRT, необходимо включить: «router equal-cost», а если в vrf, то необходимо указать имя vrf: «router equal-cost vrf <vrf_name>».


Из вывода выше (show bgp), а также по схеме включения, видно, что маршрутизатор R3 или R4 узнает о маршрутах от двух разных маршрутизаторов:

0/ME5100:R3# show  bgp ipv4 unicast  192.168.17.0/24
Fri Jul  7 14:10:45 2023
  BGP router identifier 3.3.3.3, local AS number 64500
  BGP routing table entry for 192.168.17.0/24
    Path #0
    AS path: 64501 
    2.2.2.2 from 2.2.2.2 (2.2.2.2)
      Origin igp, metric 0, local-pref 100, weight 0, active, internal, best
      Address family: ipv4/unicast
      NLRI pathID: 0
      Aggregator AS: 0, Address: 0.0.0.0, Atomic aggregate: absent
      Is not stale, is not history
      Route flap penalty: 0, flap count 0, is not suppressed
      Route flap time left: 00:00:00, time start: never
      Route is ECMP <=====================

    Path #1
    AS path: 64501 
    5.5.5.5 from 5.5.5.5 (5.5.5.5)
      Origin igp, metric 0, local-pref 100, weight 0, active, internal
      Address family: ipv4/unicast
      NLRI pathID: 0
      Aggregator AS: 0, Address: 0.0.0.0, Atomic aggregate: absent
      Is not stale, is not history
      Route flap penalty: 0, flap count 0, is not suppressed
      Route flap time left: 00:00:00, time start: never
      Route is ECMP <=====================

    Total entries: 2


В выводе данной команды мы видим, что маршрут был получен от двух разных маршрутизаторов и эти маршруты являются равнозначными (Одинаковый: weight, local pref, as path и т.д.). Так как данные маршруты являются равнозначными, то они будут помечены как ECMP. Также можем увидеть эту информацию при просмотре маршрута:

0/ME5100:R3# show  route  192.168.17.1 
Fri Jul  7 14:14:56 2023
  Routing entry for 192.168.17.0/24
    Last update: 04h11m59s
    Routing Descriptor Blocks
      10.0.0.3, via te0/0/2.302
      Known via bgp, distance 200, metric 0
        type bgp-internal, protection ecmp, route-type remote
  Routing entry for 192.168.17.0/24
    Last update: 04h11m59s
    Routing Descriptor Blocks
      10.0.0.1, via te0/0/5.305
      Known via bgp, distance 200, metric 0
        type bgp-internal, protection ecmp, route-type remote
  
  Entries: 2


Проверим forwarding, в какие интерфейсы будет направлен трафик:

0/ME5100:R3# show  l3forwarding 192.168.17.1
Fri Jul  7 17:22:44 2023
  
  Subnet: 192.168.17.0/24 Nexthop: 10.0.0.3 
  Interface: Tengigabitethernet0/0/2.302
  Src MAC: e0:d9:e3:ff:62:02
  Dst MAC: e0:d9:e3:ff:60:c3
  Outer VID: 302 Inner VID: 0
  MTU: 1500
  Outgoing label: --
  HW information:
    FEC: 0x2000040a, ECMP FEC: 0x20000001, encap-id: 0x4000200c
  
  Subnet: 192.168.17.0/24 Nexthop: 10.0.0.1 
  Interface: Tengigabitethernet0/0/5.305
  Src MAC: e0:d9:e3:ff:62:05
  Dst MAC: e0:d9:e3:ff:48:03
  Outer VID: 305 Inner VID: 0
  MTU: 1500
  Outgoing label: --
  HW information:
    FEC: 0x20000409, ECMP FEC: 0x20000001, encap-id: 0x4000200a
0/ME5100:R3# 


Исходя из этого, нам необходимо обеспечить балансировку трафика между интерфейсами ten0/0/2 и ten0/0/5, для этого нам необходимо определиться с типом трафика, проходящего через маршрутизаторы. В качестве примера будет генерироваться на интерфейс ten0/0/20 следующий тип трафика:

UDP, 10 Mbit, 10 потоков.

TCP, 10 Mbit, 10 потоков.


Учитывая выше сказанное, мы укажем следующие поля для учета при балансировки трафика:

load-balancing hash-fields ip-dst 
load-balancing hash-fields ip-src
load-balancing hash-fields port-dst
load-balancing hash-fields port-src


Запустим трафик в два направление между маршрутизаторами R3 и R4.

0/ME5100:R3# show  interfaces  utilization  
Mon Jul 10 13:28:59 2023
  Interface        Period, s  Sent, Kbit/s  Recv, Kbit/s  Frames sent, pps  Frames recv, pps  
  ---------------- ---------- ------------- ------------- ----------------- ----------------- 
...
  te0/0/2          20         2501          4993          233               456               
  te0/0/5          20         7486          4994          679               456               
  te0/0/20         20         10001         10001         892               892
...                       
0/ME5100:R3#


Мы видим, что исходящий трафик балансируется между интерфейсами te0/0/2 и te0/0/5, но не равномерно. В таком случае необходимо задать дополнительные значения для вычисления hash. Укажем, на какое количество бит сместить результат hash, например: «load-balancing ecmp shift 3», данное число было взято эмпирическим путем, так как зависит от входящего трафика. Проверяем балансировку:

0/ME5100:R3# show  interfaces  utilization 
Mon Jul 10 13:48:45 2023
  Interface        Period, s  Sent, Kbit/s  Recv, Kbit/s  Frames sent, pps  Frames recv, pps  
  ---------------- ---------- ------------- ------------- ----------------- -----------------
...             
  te0/0/2          20         4993          4993          456               456                         
  te0/0/5          20         4994          4993          456               456                         
  te0/0/20         20         10000         10000         892               892     
...                   
0/ME5100:R3# 


Входящий трафик на интерфейсах te0/0/2 и te0/0/5, был заранее разбалансирован на маршрутизаторе R4, аналогичным образом.


Итого были выставлены следующие поля:

load-balancing ecmp shift 3
load-balancing hash-fields ip-dst
load-balancing hash-fields ip-src
load-balancing hash-fields port-dst
load-balancing hash-fields port-src


Для достижения равномерного распределения трафика между интерфейсами, также можно использовать дополнительный параметр: «load-balancing ecmp seed <number>», которая указывает начальное значение для генерации ключа.


Теперь рассмотрим пример балансировки агрегирующих интерфейсов (bundle-ether) между маршрутизаторами R2 и R4.

Учитывая ранее настроенную балансировку ECMP, трафик будет распределен между маршрутизаторами R5 и R2, как изображено на рисунке 2.


Рисунок 2 - Распределение трафика


Смотреть загрузку будем на интерфейсах ten0/0/4 и ten0/0/6 маршрутизатора R2. Настройка интерфейса lacp bundle-ether 1:

lacp
  interface bundle-ether 1
  exit
  interface tengigabitethernet 0/0/4 <===============
    bundle id 1 
    bundle mode active
  exit
  interface tengigabitethernet 0/0/6 <===============
    bundle id 1
    bundle mode active
  exit


Запускаем трафик и проверяем загрузку по интерфейсам:

0/ME5100:R2# show  interfaces utilization | include  0/0/4|0/0/6
  te0/0/4          20         4986          3142          446               281               
  te0/0/6          20         0             1844          0                 165     


Добавляем поля для учета балансировки :

load-balancing hash-fields ip-dst
load-balancing hash-fields ip-src
load-balancing hash-fields port-dst
load-balancing hash-fields port-src


Снова проверяем балансировку на bundle-ether 1 :

0/ME5100:R2# show  interfaces utilization | include  0/0/4|0/0/6
Mon Jul 10 13:58:53 2023
  te0/0/4          20         3491          3142          312               281               
  te0/0/6          20         1495          1843          133               165 


Как видно, часть трафика получилось разбалансировать, но не весь. Чтобы добиться баланса между двумя интерфейсами te0/0/4 и te0/0/6, также добавим дополнительные параметры для расчета hash. Аналогичным образом настроим балансировку на маршрутизаторе R4.

Добавили следующий параметр:  load-balancing lag shift 5

После внесения изменений, проверяем нагрузку между интерфейсами:

0/ME5100:R2# show  interfaces utilization | include  0/0/4|0/0/6
Mon Jul 10 17:00:50 2023
  te0/0/4          20         2445          2542          218               227               
  te0/0/6          20         2541          2442          227               218               
0/ME5100:R2# 


Итого использовались следующие поля:

load-balancing hash-fields ip-dst
load-balancing hash-fields ip-src
load-balancing hash-fields port-dst
load-balancing hash-fields port-src
load-balancing lag shift 5


Также для дополнительного расчета hash функции, можно учитывать агрегированные линки, используемая команда: «load-balancing lag in-port».


В дополнение рассмотрим балансировку трафика при помощи FAT метки (Flow Aware Transport of psewdowires).

Для этого поднимем сервис L2VPN между маршрутизаторами R3 и R2, как изображено на рисунке 3.


Рисунок 3 — Схема организации L2VPN


На маршрутизаторе R3 настроим xconnect:

 pw-class kv_test
    encapsulation mpls signaling-type pseudowire-id-fec-signaling
  exit
  xconnect-group pw_kv_test
    p2p kv_test_2203201
      interface tengigabitethernet 0/0/20.2203201
      pw 2.2.2.2 2203201
        pw-class kv_test
      exit
    exit
  exit


Аналогично на R2:

pw-class kv_test
    encapsulation mpls signaling-type pseudowire-id-fec-signaling
  exit
  xconnect-group kv_test_group
    p2p pw_kv_test
      interface bundle-ether 1.2204400
      pw 3.3.3.3 2203201
        pw-class kv_test
      exit
    exit
  exit


Используем ранее настроенные поля load-balancing:

load-balancing hash-fields ip-dst
load-balancing hash-fields ip-src
load-balancing hash-fields port-dst
load-balancing hash-fields port-src
load-balancing lag in-port
load-balancing lag shift 5


Генерируем трафик: однонаправленный, 10 Mbit, IPv4,10 потоков.

Проверяем балансировку:

0/ME5100:R2# show  interfaces  utilization | include  0/0/4|0/0/6
Fri Jul 14 11:31:40 2023
  te0/0/4          20         1             0             0                 0                 
  te0/0/6          20         10000         0             9766              0                 
0/ME5100:R2# 


Причиной отсутствия балансировки трафика является то, что решение по распределению трафика между интерфейсами принимается на основе входящего трафика. В нашем случае на вход интерфейса te0/0/3 маршрутизатора R2, приходит трафик MPLS без транспортной метки, но с сервисной меткой. Для того чтобы разбалансировать данный трафик, необходимо добавить поле labels: load-balancing hash-fields mpls labels.

Однако сервисная метка одна и распределить трафик на основе одной метки не получится. Для того чтобы разложить трафик по интерфейсам, необходимо добавить ещё одну метку. Для этого будем использовать FAT метку.

Добавим FAT метку на R3:

xconnect-group pw_kv_test
    p2p kv_test_2203201
      pw 2.2.2.2 2203201
        fat both
      exit
    exit
exit


Маршрутизатор R2:

xconnect-group kv_test_group
    p2p pw_kv_test
      pw 3.3.3.3 2203201
        fat both
      exit
    exit
  exit


Проверяем балансировку:

0/ME5100:R2# show  interfaces  utilization | include  0/0/4|0/0/6
Fri Jul 14 11:48:51 2023
  te0/0/4          20         5002          0             4883              0                 
  te0/0/6          20         5000          0             4883              0                 
0/ME5100:R2# 


В результате видим равномерное распределение трафика.

Использовались следующие поля:

load-balancing hash-fields ip-dst
load-balancing hash-fields ip-src
load-balancing hash-fields mpls labels
load-balancing hash-fields port-dst
load-balancing hash-fields port-src
load-balancing lag in-port
load-balancing lag shift 5




  • Нет меток