
Я пытаюсь подключить сервер Linux с двумя сетевыми картами 1 Гбит/с к коммутатору Netgear ProSafe GSM7248V2 с использованием связывания, а именно режима 802.3ad. Результаты очень запутанные, я был бы благодарен за любые подсказки о том, что попробовать дальше.
На стороне сервера мой /etc/network/interfaces выглядит так:
auto bond0
iface bond0 inet static
address 192.168.1.15/24
gateway 192.168.1.254
dns-nameservers 8.8.8.8
dns-search my-domain.org
bond-slaves eno1 eno2
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
bond-xmit_hash_policy layer3+4
hwaddress aa:bb:cc:dd:ee:ff
Конфигурация коммутатора следующая:
(GSM7248V2) #show port-channel 3/2
Local Interface................................ 3/2
Channel Name................................... fubarlg
Link State..................................... Up
Admin Mode..................................... Enabled
Type........................................... Dynamic
Load Balance Option............................ 6
(Src/Dest IP and TCP/UDP Port fields)
Mbr Device/ Port Port
Ports Timeout Speed Active
------ ------------- --------- -------
0/7 actor/long Auto True
partner/long
0/8 actor/long Auto True
partner/long
(GSM7248V2) #show lacp actor 0/7
Sys Admin Port Admin
Intf Priority Key Priority State
------ -------- ----- -------- -----------
0/7 1 55 128 ACT|AGG|LTO
(GSM7248V2) #show lacp actor 0/8
Sys Admin Port Admin
Intf Priority Key Priority State
------ -------- ----- -------- -----------
0/8 1 55 128 ACT|AGG|LTO
(GSM7248V2) #show lacp partner 0/7
Sys System Admin Prt Prt Admin
Intf Pri ID Key Pri Id State
------ --- ----------------- ----- --- ----- -----------
0/7 0 00:00:00:00:00:00 0 0 0 ACT|AGG|LTO
(GSM7248V2) #show lacp partner 0/8
Sys System Admin Prt Prt Admin
Intf Pri ID Key Pri Id State
------ --- ----------------- ----- --- ----- -----------
0/8 0 00:00:00:00:00:00 0 0 0 ACT|AGG|LTO
Я считаю, что xmit "layer3+4" наиболее совместим с Load Balance Type 6 коммутатора. Первое, что удивляет, это то, что коммутатор не видит MAC-адрес партнера LACP.
На стороне сервера содержимое /proc/net/bonding/bond0 выглядит следующим образом:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
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
System priority: 65535
System MAC address: ac:1f:6b:dc:2e:88
Active Aggregator Info:
Aggregator ID: 15
Number of ports: 2
Actor Key: 9
Partner Key: 55
Partner Mac Address: a0:21:b7:9d:83:6a
Slave Interface: eno1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ac:1f:6b:dc:2e:88
Slave queue ID: 0
Aggregator ID: 15
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: ac:1f:6b:dc:2e:88
port key: 9
port priority: 255
port number: 1
port state: 63
details partner lacp pdu:
system priority: 1
system mac address: a0:21:b7:9d:83:6a
oper key: 55
port priority: 128
port number: 8
port state: 61
Slave Interface: eno2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ac:1f:6b:dc:2e:89
Slave queue ID: 0
Aggregator ID: 15
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: ac:1f:6b:dc:2e:88
port key: 9
port priority: 255
port number: 2
port state: 63
details partner lacp pdu:
system priority: 1
system mac address: a0:21:b7:9d:83:6a
oper key: 55
port priority: 128
port number: 7
port state: 61
Если я правильно понимаю, это означает, что драйвер связывания Linux правильно определил все данные агрегатора (ключ, номера портов, приоритет системы, приоритет порта и т. д.). Несмотря на это, я получаю это в dmesg после перезапуска сетевой службы:
[Dec14 20:40] bond0: Releasing backup interface eno1
[ +0.000004] bond0: first active interface up!
[ +0.090621] bond0: Removing an active aggregator
[ +0.000004] bond0: Releasing backup interface eno2
[ +0.118446] bond0: Enslaving eno1 as a backup interface with a down link
[ +0.027888] bond0: Enslaving eno2 as a backup interface with a down link
[ +0.008805] IPv6: ADDRCONF(NETDEV_UP): bond0: link is not ready
[ +3.546823] igb 0000:04:00.0 eno1: igb: eno1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ +0.160003] igb 0000:05:00.0 eno2: igb: eno2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ +0.035608] bond0: link status definitely up for interface eno1, 1000 Mbps full duplex
[ +0.000004] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[ +0.000008] bond0: first active interface up!
[ +0.000166] IPv6: ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready
[ +0.103821] bond0: link status definitely up for interface eno2, 1000 Mbps full duplex
Оба интерфейса работают, сетевое соединение, похоже, вполне нормальное, просто я получаю странное предупреждение об отсутствии совместимого с 802.3ad партнера.
Кроме того, когда я пытаюсь одновременно скопировать два больших двоичных файла (по 10 ГБ каждый) с двух разных машин, подключенных к одному и тому же коммутатору, каждая из которых подключена со скоростью 1 Гбит/с, общая пропускная способность интерфейса bond0 на сервере значительно ниже 1 Гбит/с, хотя я ожидал бы чего-то ближе к 2 Гбит/с (скорость чтения и т. д. здесь не является ограничивающим фактором, все SSD, хорошо кэшированы и т. д.). Когда я копирую одни и те же файлы последовательно, один за другим, с одних и тех же машин, я легко достигаю пропускной способности, близкой к 1 Гбит/с.
Не подскажете, что тут может быть не так? Что касается диагностики, то в dmesg появляется сбивающее с толку предупреждение (нет совместимого с 802.3ad партнера) и в выводе sh lacp коммутатора (нет MAC партнера, хотя обычная запись порта показывает правильный MAC-адрес подключенной сетевой карты). Что касается производительности сети, я не вижу никакой агрегации с использованием двух разных подключений. Буду очень благодарен за любую подсказку.
решение1
Коммутатор настроен на long
тайм-аут LACP — один LACPDU каждые 30 секунд.
Система Linux настроена на bond-lacp-rate 1
.
Я не могу найти, что это на самом деле делает в Debian, но если он передает lacp_rate=1
параметр модуля в связывание (ссылка), то это быстрый тайм-аут — один LACPDU каждую 1 секунду.
Это несоответствие между медленной/быстрой скоростью LACP является неправильной конфигурацией.
Во всех примерах документации, которые мне удалось найти, указано, что Debian принимает это, bond-lacp-rate slow
и я надеюсь, что это поможет вам.
Вероятно, вы также можете удалить bond-lacp-rate
строку из файла конфигурации, поскольку по умолчанию установлена низкая скорость, а затем выгрузить модуль связывания или перезагрузить компьютер, чтобы применить изменения.
Не тестируйте пропускную способность только с двумя потоками. layer3+4
Политика не гарантирует, что любые два потока получат отдельную сетевую карту, просто при достаточном количестве потоков трафик должен быть сбалансирован более-менее равномерно.
Тестируйте, скажем, с 16 или 32 одновременными потоками TCP iperf3. Общая пропускная способность всех потоков должна быть близка к 2 Гбит/с.