Подробный гайд: смена типа Linux bonding без перезагрузки системы

Пошаговая инструкция по смене режима Linux bonding без перезагрузки. Минимальный даунтайм, методы через sysfs, nmcli и systemd-networkd.

2026.05.16                  


Подробный гайд: смена типа Linux bonding без перезагрузки системыПодробный гайд: смена типа Linux bonding без перезагрузки системы

Важно:

«Без рестарта системы» не означает «без обрыва связи». При смене режима bonding сетевой интерфейс bondX будет временно переведён в состояние DOWN (обычно 1–3 секунды). Убедитесь, что у вас есть консольный доступ (IPMI/iLO/DRAC, KVM, последовательная консоль или отдельный управленческий интерфейс).


1. Подготовка

1. Узнайте имя бонда и текущий режим:
   ip -o link show | grep bond
   cat /sys/class/net/bond0/bonding/mode
   cat /sys/class/net/bond0/bonding/slaves

2. Сделайте резервную копию текущих конфигураций:
   cp /etc/network/interfaces /root/backup/  # Debian/Ubuntu
   cp /etc/sysconfig/network-scripts/ifcfg-bond0 /root/backup/  # RHEL/CentOS 7
   nmcli -f all c show bond0 > /root/backup/bond0-nm.txt  # NetworkManager
   cp /etc/systemd/network/10-bond0.netdev /root/backup/  # systemd-networkd
3. Убедитесь, что ядро поддерживает live-смену режима:
   uname -r  # рекомендуется ядро >= 4.15

В современных ядрах смена режима на лету поддерживается штатно.


2. Способ 1: Через sysfs (универсальный, низкоуровневый)

Работает на всех дистрибутивах, независимо от менеджера сетей.

Шаг 1. Переведите bond в DOWN и открепите слейвы

ip link set dev bond0 down

# Открепите интерфейсы (замените eth1 eth2 на ваши)
echo "-eth1" > /sys/class/net/bond0/bonding/slaves
echo "-eth2" > /sys/class/net/bond0/bonding/slaves

Шаг 2. Смените режим bonding

Режим Имя Число
0 balance-rr 0
1 active-backup 1
2 balance-xor 2
3 broadcast 3
4 802.3ad (LACP) 4
5 balance-tlb 5
6 balance-alb 6
# Пример: смена на active-backup (1)
echo "1" > /sys/class/net/bond0/bonding/mode

Если нужно, настройте дополнительные параметры:

echo 100 > /sys/class/net/bond0/bonding/miimon
echo 1   > /sys/class/net/bond0/bonding/primary_reselect
echo "eth1" > /sys/class/net/bond0/bonding/primary

Шаг 3. Верните слейвы и поднимите bond

echo "+eth1" > /sys/class/net/bond0/bonding/slaves
echo "+eth2" > /sys/class/net/bond0/bonding/slaves

ip link set dev bond0 up

3. Способ 2: Через NetworkManager (если используется)

nmcli автоматически обрабатывает открепление/прикрепление слейвов и временный даун.

# Посмотреть текущую конфигурацию
nmcli c show bond0 | grep 802-3-bond

# Сменить режим (можно указывать число или имя)
nmcli c modify bond0 802-3-bond.mode 1
# или: nmcli c modify bond0 802-3-bond.mode active-backup

# При необходимости сменить miimon/lacp_rate/прочее:
nmcli c modify bond0 802-3-bond.miimon 100
nmcli c modify bond0 802-3-bond.lacp-rate fast

# Перезапустить соединение (вызовет кратковременный обрыв)
nmcli c up bond0

Преимущество:

изменения сразу сохраняются в профиле NetworkManager.


4. Способ 3: Через systemd-networkd

1. Отредактируйте .netdev файл:
   sudo nano /etc/systemd/network/10-bond0.netdev
   [NetDev]
   Name=bond0
   Kind=bond
   Mode=active-backup
   MIIMonitorSec=100ms
2. Примените без перезагрузки:
   sudo networkctl reload
   sudo networkctl reconfigure bond0

systemd-networkd может потребовать ip link set bond0 down/up вручную, если драйвер bonding не подхватил изменения автоматически.


5. Проверка результата

# Детальная информация о бонде
cat /proc/net/bonding/bond0

# Проверка режима через sysfs
cat /sys/class/net/bond0/bonding/mode

# Статус интерфейсов
ip -d link show bond0
ip addr show bond0

# Тест связности (параллельно в другом окне)
ping -c 10 -I bond0 8.8.8.8

Ожидаемый вывод cat /proc/net/bonding/bond0 должен содержать строку:

Bonding Mode: fault-tolerance (active-backup)

(или другое название в зависимости от режима).


6. Важные нюансы и ограничения

Параметр Возможность смены на лету Примечание
mode Да Требует временного DOWN
miimon / arp_interval Да Применяется сразу
primary / primary_reselect Да Работает без перезапуска
xmit_hash_policy Зависит от ядра На некоторых ядрах требует пересоздания бонда
lacp_rate (для mode 4) Да Должен совпадать с настройками коммутатора
Смена режима на режим Да Но режим 4 (LACP) требует согласованной настройки свитча
  • Режим 4 (802.3ad/LACP) требует, чтобы на коммутаторе был включён LACP (mode active или passive). Без этого линки не поднимутся.
  • Режимы 5/6 (balance-tlb/alb) не требуют настроек на свитче, но могут работать нестабильно с некоторыми драйверами NIC.
  • Если bonding скомпилирован в ядро (CONFIG_BONDING=y), modprobe -r bonding невозможен, но sysfs-метод работает штатно.

7. Не забудьте обновить постоянные конфиги

Изменения через sysfs или временные команды не сохраняются после перезагрузки.

Обязательно приведите в соответствие файлы:

Дистрибутив/Менеджер Файл/Команда
Debian/Ubuntu (ifupdown) /etc/network/interfaces -> bond-mode active-backup
RHEL/CentOS 7 /etc/sysconfig/network-scripts/ifcfg-bond0 -> BONDING_MODE=1
RHEL/Rocky/Alma 9+ /etc/NetworkManager/system-connections/bond0.nmconnection
NetworkManager (универс.) nmcli c modify bond0 802-3-bond.mode 1 + nmcli c reload
systemd-networkd /etc/systemd/network/10-bond0.netdev -> Mode=active-backup

После правки выполните nmcli c reload или networkctl reload для проверки синтаксиса.


Чеклист перед применением в Production

  • [ ] Есть out-of-band доступ (IPMI/KVM/консоль)
  • [ ] Сделан бэкап сетевых конфигов
  • [ ] На свитче согласован тип агрегации (особенно для LACP)
  • [ ] Смена запланирована на maintenance window
  • [ ] Протестировано на staging/тестовой ноде
  • [ ] Постоянные конфиги приведены в соответствие с live-состоянием

Итог

Смена режима Linux bonding без перезагрузки системы полностью возможна через sysfs, nmcli или networkctl. Процесс занимает 2–5 секунд и сопровождается кратковременным обрывом связи. Главное: иметь аварийный доступ, корректно подготовить свитч и зафиксировать изменения в постоянных конфигурационных файлах.