# Bonding и LACP: объединение портов сервера

> Bonding и LACP на выделенном сервере увеличивают скорость канала и защищают от обрыва порта — режимы, настройка и проверка.

## Зачем объединять сетевые порты сервера

Объединение портов (bonding, или на уровне коммутатора — link aggregation) решает две задачи: увеличивает пропускную способность канала выше [скорости одного порта](https://www.zevshost.net/ru/kb/kanal-servera-trafik-unmetered/) и добавляет отказоустойчивость — если один кабель или порт коммутатора отключится, трафик продолжит идти через оставшиеся интерфейсы без разрыва соединений.

В большинстве серверов есть 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](https://www.zevshost.net/ru/kb/benchmark-servera-fio-sysbench/) с двух сторон одновременно, запустив несколько параллельных потоков (-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-алиасы или [дополнительные подсети](https://www.zevshost.net/ru/kb/dopolnitelnye-ipv4-podseti-server/) настраивают уже на интерфейсе bond0, а не на eth0/eth1.

Проверку сети стоит включить в общий список при [приёмке сервера](https://www.zevshost.net/ru/kb/priyomka-vydelennogo-servera/) — отказавший линк или неправильно настроенный LACP проще найти в первый час эксплуатации, чем через месяц под нагрузкой.

---

Источник: https://www.zevshost.net/ru/kb/bonding-lacp-setevye-porty/
