Подробный гайд: смена типа 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 секунд и сопровождается кратковременным обрывом связи. Главное: иметь аварийный доступ, корректно подготовить свитч и зафиксировать изменения в постоянных конфигурационных файлах.