Ответ
Настраивал bonding (LAG) для обеспечения отказоустойчивости и увеличения пропускной способности канала до серверов, особенно для мастер-узлов Kubernetes и баз данных.
Предпочтительный способ — через Netplan (Ubuntu 18.04+) или systemd-networkd:
-
Конфигурация в Netplan (
/etc/netplan/01-netcfg.yaml):network: version: 2 ethernets: eno1: dhcp4: no eno2: dhcp4: no bonds: bond0: interfaces: [eno1, eno2] addresses: [192.168.1.10/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] parameters: mode: 802.3ad # Режим LACP lacp-rate: fast # Частота отправки LACP-пакетов mii-monitor-interval: 100 # Интервал проверки ссылки (мс) transmit-hash-policy: layer3+4 # Алгоритм балансировкиПрименяем:
sudo netplan apply. -
Проверка:
cat /proc/net/bonding/bond0 # Детальный статус ip link show bond0 # Состояние интерфейса
Ключевые моменты:
- Режим
802.3ad(mode 4) требует поддержки на коммутаторе (нужно настроить LACP-группу). - Для режима active-backup (mode 1) указывается
primaryинтерфейс. - Обязательно тестировал отказоустойчивость, физически отключая кабель и проверяя, что трафик переключается без потери пинг-пакетов.
- В инфраструктуре как код (Terraform/Ansible) конфигурация bonding прописывалась в шаблонах для автоматического применения на всех новых серверах.
Ответ 18+ 🔞
Боже, ну вот сидишь такой, настраиваешь bonding, а в голове одна мысль: «Чтоб всё это, ёпта, не накрылось медным тазом в самый ответственный момент». Особенно когда речь про мастер-узлы кубера и базы данных — тут доверия ебать ноль ко всем этим проводам и свичам.
Короче, задача простая, как хуй с горы: сделать так, чтобы если один кабель выйдет из строя, трафик даже не чихнул, а сразу пошёл по другому. И заодно пропускную способность увеличить, чтоб не бутылочное горлышло было.
Предпочтительный способ — через Netplan (для тех, у кого Ubuntu 18.04 и новее):
-
Лепим конфиг Netplan (
/etc/netplan/01-netcfg.yaml). Выглядит страшновато, но на деле — хуй в пальто.network: version: 2 ethernets: eno1: dhcp4: no eno2: dhcp4: no bonds: bond0: interfaces: [eno1, eno2] addresses: [192.168.1.10/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] parameters: mode: 802.3ad # Это тот самый модный режим LACP lacp-rate: fast # Чтобы пакеты LACP летали часто, как угорелые mii-monitor-interval: 100 # Как часто тыкать палкой, жива ли ссылка (в миллисекундах) transmit-hash-policy: layer3+4 # Умный алгоритм, как раскидывать трафик по проводамПрименяем магию:
sudo netplan apply. Если не вывалилось с ошибкой — уже хорошо. -
Проверяем, не обманули ли нас.
cat /proc/net/bonding/bond0 # Тут будет овердохуища технических деталей, но главное — увидеть, что оба порта `up` и в режиме `802.3ad` ip link show bond0 # Быстрый взгляд: живой ли агрегированный интерфейс
Важные моменты, где можно облажаться:
- Режим
802.3ad(mode 4) — это не шутка. Если на коммутаторе не включить LACP на соответствующих портах, то bond поднимется, но работать как задумано — не будет. Будет тихий пиздец и волнение ебать. - Если нужен простой режим active-backup (mode 1), когда один интерфейс работает, а второй спит, то в параметрах надо указать
primary, какой интерфейс главный. - Тестирование — наше всё. После настройки я брал и просто выдёргивал кабель. Смотрел, чтобы пинг не проседал ни на единый пакет. Если просел — значит, где-то косяк, и терпения ноль ебать, пока не найдёшь.
- В инфраструктуре как код (в тех же шаблонах для Ansible) эту конфигурацию нужно было аккуратно прописать, чтобы каждый новый сервер вставал уже с правильным bonding'ом, а не как попало.