Навіщо об'єднувати мережеві порти сервера
Об'єднання портів (bonding, а на рівні комутатора — link aggregation) вирішує два завдання: збільшує пропускну здатність каналу понад швидкість одного порту і додає відмовостійкість — якщо один кабель або порт комутатора відключиться, трафік продовжить йти через інші інтерфейси без розриву з'єднань.
У більшості серверів є 2-4 мережеві порти на 1 або 10 Гбіт/с. Окремо кожен з них обмежений своєю швидкістю, а бондинг із двох портів по 10 Гбіт/с у режимі LACP теоретично дає 20 Гбіт/с сумарної пропускної здатності, хоча одне TCP-з'єднання, як і раніше, обмежене швидкістю одного фізичного лінка.
Режими bonding: який обрати
У Linux драйвер bonding підтримує кілька режимів, але на практиці використовують три:
- active-backup (mode 1) — один порт активний, другий у резерві. Не потребує налаштування на комутаторі, але не збільшує швидкість.
- balance-rr (mode 0) — пакети йдуть по портах round-robin. Дає приріст швидкості для UDP, але часто ламає порядок TCP-пакетів.
- 802.3ad, він же LACP (mode 4) — стандартний протокол агрегації, узгоджений із комутатором. Розподіляє з'єднання за хеш-функцією від MAC/IP/порту, потребує налаштування LACP з обох сторін.
Для продакшн-серверів у дата-центрі використовують LACP: він єдиний із трьох офіційно узгоджений із боку комутатора і коректно обробляє відмову лінка.
Налаштування LACP на сервері та комутаторі
У Linux з NetworkManager бонд створюють так:
nmcli connection add type bond ifname bond0 mode 802.3ad
nmcli connection modify bond0 +bond.options "lacp_rate=fast,miimon=100"
nmcli connection add type ethernet ifname eth0 master bond0
nmcli connection add type ethernet ifname eth1 master bond0
nmcli connection up bond0
Через netplan конфігурація виглядає так:
network:
version: 2
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
addresses: [203.0.113.10/24]
На боці комутатора порти, до яких підключений сервер, об'єднують у port-channel із увімкненим LACP active. Якщо комутатор налаштований у режимі static (без LACP) — bonding у режимі 802.3ad не запрацює, обидва кінці зобов'язані узгодити протокол.
Як перевірити, що бондинг працює
Статус інтерфейсу та режим узгодження LACP дивляться так:
cat /proc/net/bonding/bond0
ip -s link show bond0
У виводі важливий рядок MII Status: up для кожного slave-інтерфейсу та Aggregator ID — він має збігатися в обох портів, якщо вони реально агреговані. Пропускну здатність після налаштування варто виміряти через iperf3 з двох боків одночасно, запустивши кілька паралельних потоків (-P 4), щоб задіяти хешування за різними з'єднаннями.
Типові помилки: чому LACP «не злітає»
Найчастіше проблема в розсинхроні налаштувань між сервером і комутатором. Часті причини:
| Симптом | Причина |
|---|---|
| Bond піднято, але швидкість як в одного порту | На комутаторі порти не в одному port-channel |
| Aggregator ID різний у портів | Різні VLAN або швидкість на портах комутатора |
| Лінк постійно flap-ає | miimon занадто малий або кабель/SFP несправний |
| Одне TCP-з'єднання не пришвидшується | Хеш-алгоритм LACP розподіляє за потоками, а не ріже один потік |
Ще одна часта помилка — увімкнути LACP на сервері, але залишити порти на комутаторі в окремих VLAN без port-channel. Тоді bond0 підніметься локально, але реального агрегування не буде: трафік просто піде через один фізичний порт.
Чек-лист перед введенням в експлуатацію
- Режим LACP (802.3ad) налаштований однаково на сервері й на комутаторі, порти зведені в один port-channel.
- У
/proc/net/bonding/bond0у всіх slave-портівMII Status: upі однаковий Aggregator ID. - Пропускну здатність перевірено навантажувальним тестом із кількома паралельними потоками.
- Відмовостійкість перевірено вручну: відключення одного кабелю не повинно рвати активні з'єднання.
- Якщо серверу потрібно кілька публічних адрес поверх bond0, IP-аліаси або додаткові підмережі налаштовують уже на інтерфейсі bond0, а не на eth0/eth1.
Перевірку мережі варто включити в загальний список під час приймання сервера — лінк, що відмовив, або неправильно налаштований LACP простіше знайти в першу годину експлуатації, ніж через місяць під навантаженням.