Балансировка трафика на оборудовании Huawei в MPLS сетях и не только
15 Jun 2019 - riddler63
Share on:Варианты балансировки трафика на оборудовании Huawei.
Типы балансировки в MPLS VPN
- Балансировка трафика внутри MPLS L2VPN (IP over Ethernet over MPLS)
- Балансировка трафика внутри MPLS L3VPN (IP over MPLS)
- Балансировка трафика L2VPN/L3VPN внутри L2VPN
- Балансировка трафика других типов туннелей внутри L2VPN/L3VPN
- GRE
- PPTP
- GTP
- PPPoE
Всегда остаётся возможность наличия других вариантов балансировки, не упомянутых в списке выше.
Типы узлов
- Ingress PE
- Egress PE
- Transit P
- L3 (IP) forwarding
- L2 (ethernet) forwarding
Основные проблемы
- Большинство оборудования при балансировке по умолчанию использует MPLS label stack для вычисления hash вследствие отсутствия разнообразия в MPLS стеке меток в L2VPN/L3VPN;
- При использовании
apply-label per-instance
в L3VPN в общем случае будет 2 одинаковых метки в MPLS стеке; - L2VPN также будет иметь 2 одинаковых ветки;
- При использовании
- Трафик завёрнут в тот или иной туннель (GRE/PPTP/GTP/PPPOE) внутри MPLS L3VPN/L2VPN;
- Балансировка L2VPN/L3VPN внутри L2VPN;
- Поляризация трафика. Заключатеся в том, что однотипный трафик (у которого совпадают
sIP/dIP
(eNodeB X.X.X.[всегда нечетный] <–> RNC Y.Y.Y.любой)) всегда форвардится по одному и тому же аплинку узла при наличии как минимум двух. Как правило встречается только на маломощных и старых платформах, в которых используется примитивная hash функция (XOR) без каких-либо случайных hash seed. Проблема характерна для MBH сетей; - Полное отсутствие разнообразия в payload L2VPN/L3VPN (не решается);
- Одинаковые sMAC/dMAC/VLAN/L2-protocol + одинаковые L3/L4 заголовки в L2VPN;
- Одинаковые L3/L4 заголовки в L3VPN.
Возможности оборудования по балансировке трафика в той или иной роли сильно различаются, в рамках одной платформы существуют платы с разными способностями “заглянуть” внутрь трафика и посчитать hash для балансировки трафика по ECMP/LAG/Tunnel.
Балансировка трафика на платформах с N линейных плат, как правило, делается на Ingress LPU, поэтому важно смотреть, откуда приходит небалансируемый трафик, а не куда он уходит.
Service Router NE40-X3/X8/X16 (A)
Оборудование Huawei NE40 использует различную логику и конфигурационные команды, которые её могут изменить, в зависимости от того, чем это оборудование является для трафика/сервиса (см. типы узлов).
Приведенные ниже команды работают для ECMP и LAG одновременно, где это возможно.
Основные команды:
load-balance hash-fields ip
- балансировка чистого IP трафика (GRT, VRF-lite) в роли обычного маршрутизатора и Ingress PE/Egress PE для MPLS L3VPN. По умолчанию L4 (5 tuple);load-balance hash-fields mac
- балансировка чистого L2 трафика (vlan, bridge-domain) в роли обычного коммутатора и Ingress PE/Egress PE для MPLS VPLS. По умолчанию L4 (5 tuple);load-balance hash-fields vll
- балансировка чистого L2 трафика в роли Ingress PE/Egress PE для MPLS VLL. По умолчанию L4 (5 tuple);load-balance hash-fields mpls
- балансировка MPLS трафика в роли Transit P. По умолчанию по IP. Конфигурацияpayload-header
позволит решить существуенную часть проблем балансировки на транзитном узле (см документацию). При наличии после MPLS заголовка пакета IP, используется 5 tuple заголовка IP данного пакета, даже если это L2VPN, внутри которого идёт трафик IP. Если после MPLS заголовка нет пакета IP, то используется MPLS метка на дне MPLS Label stack и первые 12 байт MPLS payload.load-balance identify pppoe
- балансировка PPPoE трафика по IP 5 tuple внутри PPPoE. Актуально для BNG;nat load-balance hash-fields
- балансировка NAT трафика после прохождения через сервисную плату (VSUI/VSUF). По умолчанию L3;load-balance hash-arithmetic
- изменение алгоритма рассчёта hash для балансировки трафика. Настраивается отдельно на каждый слот.
Экзотика:
load-balance hash-fields ip l3 (Interface view)
- балансировка L3VPN/L2VPN over L2VPN и IPoIP сценариев. Настраивается на интерфейсе и имеет ряд серьезных ограничений по функциональности после конфигурации. Заглядывает так далеко в кроличью нору, что теряет ряд способностей;load-balance hash-fields l2vxlan-vni enable
load-balance hash-fields l3vxlan-vni enable
- балансировка VXLAN;load-balance hash-seed
- решение проблемы поляризации на старых платах. Использует случайный seed как аргумент при подсчёте hash.
Коммутаторы Huawei
Балансировка в коммутаторах сильно зависит от чипа и версии софта.
Достаточное количество проблем с балансировкой можно решить созданием load-balance-profile
и конфигурацией его на LAG. С его помощью можно определить поля, по которым будет производиться балансировка для следуюших типов трафика:
- IPv4
- IPv6
- L2
- MPLS
Значения по умолчанию далеки от идеальных, желательно решать проблему балансировки по мере её возникновения и включать обработку полей по факту.
Также данный load-balance-profile
будет по умолчанию использоваться на Stack линках в случае использования обычных портов для формирования логического коммутатора из нескольких физических.
Не ожидайте от коммутаторов поддержки FAT/EL и форвардинга трафика по ECMP через несколько MPLS LDP LSP, такую функциональность необходимо проверять отдельно по документции и спецификации.
Правильные способы балансировать MPLS трафик
Использование хитрых и ресурсоемких возможностей оборудования для балансировки однотипного трафика не всегда оправдано, при возможности желательно вносить хаос в MPLS label stack. На данный момент существует два RFC, позволяющих это реализовать:
- Flow-Aware Transport of Pseudowires over an MPLS Packet Switched Network 1 - на NE40E реализовано для Martini L2VPN (VLL/VPLS);
- Плюсы
- Поддержка необходима только на Ingress PE и/или Egress PE;
- Можно включать по-сервисно;
- Добавляет всего одну метку в MPLS label stack.
- Минусы
- Не может быть использован для L3VPN/EVPN;
- Плюсы
- The Use of Entropy Labels in MPLS Forwarding 2;
- Плюсы
- Подходит для всех типов сервисов L2VPN/L3VPN/EVPN и так далее;
- Минусы
- По разным данным нужна поддержка на всём пути прохождения LSP;
- Добавляет 2 метки в MPLS label stack;
- Мало кем реализовано.
- Плюсы
В зависимости от софта и платформы возможно настраивать какие поля будут источниками для рассчёта hash для генерации Flow Aware/Entropy Label.
Балансировка в не-MPLS туннелях
Балансировка инкапсулированного в GRE/GTP/PPTP трафика внутри L3VPN/L2VPN происходит автоматически по:
- GRE: GRE Key
- GTP: GTP sequence number
- PPTP: Enhanced GRE Key
UCMP
Для использования UCMP необходимо сначала сделать ECMP по IGP cost для интерфейсов/туннелей, в которые будет балансироваться трафик. После этого оборудование может форвардить трафик согласно скорости интерфейсов/туннелей.
Например, если есть следующие интерфейсы LAG 2x10G + 10G physical интерфейс + LAG 5x1G с одинаковым IGP cost = 10, то трафик поделится в пропорциях 4:2:1.
Примечание: Все тестируют, но мало кто решается использовать.
LDP over TE
Если трафик не балансируется (платформа не может “глубоко” разобрать payload), но есть большая необходимость, то можно создать N MPLS TE (RSVP-TE) туннелей на платформе, которая сможет обработать payload и распределить по ECMP трафик в них, таким образом добавив третью метку в MPLS label stack и создать хоть какое-то разнообразие в стеке меток.
Переход на более скоростную технологию передачи данных (1G -> 2.5G -> 5G -> 10G -> 25G -> 40G -> 50G -> 100G -> 200G -> 400G…) почти всегда лучше, чем попытки реализовать балансировку на сложной логике.
Ссылки
1. RFC 6391: https://tools.ietf.org/html/rfc6391 ↩
2. RFC 6790: https://tools.ietf.org/html/rfc6790 ↩