LACP с двумя сетевыми картами, работающими, когда один из них не работает, а не когда оба работают
У меня проблемы с настройкой транка LACP для правильной работы на Ubuntu 12.04.2 LTS.
Моя установка представляет собой один хост, подключенный с двумя интерфейсами 10 Gbe к двум отдельным коммутаторам Nexus 5548, с vPC, настроенным для поддержки LACP с несколькими шасси. Конфигурация Nexus соответствует рекомендациям Cisco, а конфигурация Ubuntu - https://help.ubuntu.com/community/UbuntuBonding
Сервер подключен к порту Ethernet1/7 на каждом коммутаторе Nexus, чьи порты настроены одинаково и расположены в порт-канал 15. Порт-канал 15 настроен как VPC 15, и выход VPC выглядит хорошо. Это порты простого доступа, т.е. не задействован транкинг 801.1q.
Диаграмма:
+----------+ +----------+ +----------+ +----------+
| client 1 |------| nexus 1 |------| nexus 2 |------| client 2 |
+----------+ +----------+ +----------+ +----------+
| |
| +--------+ |
+----| server |----+
eth4 +--------+ eth5
Когда одна из ссылок не работает, оба клиента 1 и 2 могут получить доступ к серверу. Однако, когда я поднимаю вторичную ссылку, клиент, подключенный к коммутатору с помощью недавно включенной ссылки, не может связаться с сервером. В следующей таблице приведены переходы между состояниями и результаты:
port states (down by means of "shutdown")
nexus 1 eth1/7 up up down up
nexus 2 eth1/7 down up up up
connectivity
client 1 - server OK OK OK FAIL
client 2 - server OK FAIL OK OK
Теперь я верю, что изолировал проблему на стороне Linux. Находясь в состоянии up-up, каждый нексус использует локальную ссылку на сервер для доставки пакетов, что подтверждается просмотром таблицы MAC-адресов. На сервере я могу видеть, что пакеты от каждого клиента принимаются через интерфейс ethX (пакеты от клиента 1 на eth4, пакеты от клиента 2 на eth4) с помощью tcpdump -i ethX, но когда я запускаю tcpdump -i bond0 Я могу только трафик с любого из хостов (в соответствии с тем, что я изложил выше).
Я наблюдаю одинаковое поведение для трафика ARP и ICMP (IP); ARP отказывает от клиента, когда обе ссылки работают, работает (вместе с ping), когда одна из них не работает, ping не работает, когда я снова включаю ссылку (пакеты все еще принимаются на интерфейсе eth, но не на bond0).
Чтобы уточнить, я настраиваю несколько серверов в этой конфигурации, и все они показывают одинаковые симптомы, так что это не связано с аппаратным обеспечением.
Так что - выяснить, как исправить это то, с чем я имею дело; мой Google не принес мне никакой удачи до сих пор.
Любые указатели высоко ценятся.
/ и т.д. / сеть / интерфейсы
auto eth4
iface eth4 inet manual
bond-master bond0
auto eth5
iface eth5 inet manual
bond-master bond0
auto bond0
iface bond0 inet static
address 10.0.11.5
netmask 255.255.0.0
gateway 10.0.0.3
mtu 9216
dns-nameservers 8.8.8.8 8.8.4.4
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
#bond-slaves eth4
bond-slaves eth4 eth5
/ Proc/ нетто / склеивание /bond0
A little further information:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 33
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00
Slave Interface: eth4
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 8
Permanent HW addr: 90:e2:ba:3f:d1:8c
Aggregator ID: 1
Slave queue ID: 0
Slave Interface: eth5
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 13
Permanent HW addr: 90:e2:ba:3f:d1:8d
Aggregator ID: 2
Slave queue ID: 0
РЕДАКТИРОВАТЬ: Добавлен конфиг от Nexus
vpc domain 100
role priority 4000
system-priority 4000
peer-keepalive destination 10.141.10.17 source 10.141.10.12
peer-gateway
auto-recovery
interface port-channel15
description server5
switchport access vlan 11
spanning-tree port type edge
speed 10000
vpc 15
interface Ethernet1/7
description server5 internal eth4
no cdp enable
switchport access vlan 11
channel-group 15
РЕДАКТИРОВАТЬ: Добавлены результаты от порта-канала не-VPC на nexus1 для того же сервера, до и после изменения IP (изменил IP, чтобы повлиять на алгоритм балансировки нагрузки). Это все еще использует те же настройки на сервере.
port states (down by means of "shutdown")
nexus 1 eth1/7 up up down up
nexus 1 eth1/14 down up up up <= port moved from nexus 2 eth1/7
connectivity (sever at 10.0.11.5, hashing uses Eth1/14)
client 1 - server OK OK OK FAIL
client 2 - server OK OK OK FAIL
Результаты после изменения IP соответствуют прогнозируемым; неиспользуемый интерфейс вызывает сбои.
connectivity (sever at 10.0.11.15, hashing uses Eth1/7)
client 1 - server OK FAIL OK OK
client 2 - server OK FAIL OK OK
2 ответа
Единственная конфигурация LACP, которую мне удалось получить в Ubuntu, это:
auto bond0
iface bond0 inet dhcp
bond-mode 4
bond-slaves none
bond-miimon 100
bond-lacp-rate 1
bond-updelay 200
bond-downdelay 200
auto eth0
iface eth0 inet manual
bond-master bond0
auto eth1
iface eth1 inet manual
bond-master bond0
то есть я использую не рабовладельцев, а мастеров. Я не уверен, в чем разница, но я обнаружил, что этот конфиг работает для меня.
У меня нет проблем с LACP при моей настройке, хотя это с сетью 1Gbe.
Кроме того, если проблемы все еще возникают, попробуйте подключить оба кабеля к одному коммутатору и настроить порты для LACP. Просто чтобы исключить возможность проблем с несколькими шасси LACP.
Проблема не на стороне Linux, а на стороне Nexus и как это работает в конфигурации vPC.
чтобы сначала настроить vPC на Nexus, вам нужно подключить два коммутатора Nexus и настроить эту ссылку как "peer-link".
в нормальной ситуации, когда обе ссылки от коммутаторов к серверу находятся в состоянии UP, трафик в vlan 11, настроенном на vPC, сбрасывается на одноранговую ссылку.
только когда один из интерфейсов, являющихся частью vPC, недоступен - трафик в vlan 11 разрешен по одноранговому каналу.
Вот как vPC работает на коммутаторах Nexus.
Чтобы решить эту проблему, вы можете запустить fabric-path и установить другое соединение между коммутаторами nexus-1 и nexus-2.