Если у вас есть две или более сетевых карт (NIC) и вы хотите узнать, можно ли использовать их вместе, чтобы увеличить скорость или сделать сетевое подключение более надёжным, то вы попали по адресу.
В этой статье объясняется, что такое объединение каналов Ethernet (также называемое объединением сетевых карт или объединением интерфейсов), как его настроить, как оно работает и как оно может помочь вам сбалансировать трафик или предотвратить простои сети.
Что такое подключение к каналу Ethernet?
Проще говоря, объединение каналов Ethernet позволяет объединить несколько физических сетевых карт в один виртуальный сетевой адаптер (bond0
), который обрабатывает сетевой трафик и взаимодействует с физическими интерфейсами (такими как eth1
и eth2
) за кулисами.
Вот что вы получите от этого:
- Резервирование: если один сетевой адаптер выходит из строя (отключается или выходит из строя), ваш сервер продолжает работать, используя другой.
- Балансировка нагрузки: трафик распределяется между обоими сетевыми адаптерами, что в некоторых случаях может повысить производительность.
- Один IP-адрес: даже если у вас два сетевых адаптера, вам нужен только один IP-адрес для объединённого интерфейса.
Такая настройка часто используется на серверах, производственных системах или сетевых устройствах, где критически важны бесперебойная работа и производительность.
Обзор режимов объединения
В Linux есть около 6 режимов объединения, но сейчас мы рассмотрим только два наиболее распространённых и практичных:
Режим 0 – Балансировка нагрузки (циклический перебор)
- Отправляет пакеты по порядку через все доступные интерфейсы (
eth1
,eth2
и т.д.). - Обеспечивает как избыточность, так и повышение производительности.
- Отлично подходит для сбалансированного исходящего трафика.
- Примечание: ваш коммутатор должен поддерживать эту функцию (например, LACP или статическую агрегацию каналов).
Режим 1 – Активный-Резервное копирование
- Одновременно активен только один сетевой адаптер.
- Если активная сетевая карта выходит из строя, ее заменяет другая.
- Обеспечивает высокую доступность (избыточность), а не скорость.
- Никакой специальной настройки коммутатора не требуется.
Предварительные условия
Прежде чем мы начнем, убедитесь, что:
- Вы используете систему на базе Red Hat (например, RHEL, Alma Linux, Rocky Linux).
- У вас есть root-доступ или привилегии sudo.
- У вас есть две сетевые карты:
eth1
иeth2
. - Ваша система использует сетевые скрипты или NetworkManager.
(Если вы используете Ubuntu/Debian, объединение выполняется через Netplan.
Шаг 1: Загрузите модуль Bonding Kernel
Прежде чем Linux сможет объединить две или более сетевых карт (NIC), ему необходимо загрузить специальное программное обеспечение под названием модуль ядра bonding.
По умолчанию в большинстве систем Linux доступен этот модуль объединения, но он не загружается автоматически, если вы не укажете, что его нужно загрузить.
sudo modprobe bonding
Чтобы функция объединения была доступна при каждом запуске системы, вам нужно зарегистрировать её для автоматической загрузки.
echo "bonding" | sudo tee /etc/modules-load.d/bonding.conf
Чтобы проверить, успешно ли загружен модуль, используйте:
lsmod | grep bonding
Шаг 2: Настройте eth1 и eth2 для соединения
На этом этапе мы подготавливаем каждый физический сетевой интерфейс (eth1
и eth2
) для присоединения к группе объединения. Представьте, что bond0
— это лидер группы, а эти два интерфейса — члены его группы (подчиненные). Они больше не будут работать независимо — они будут взаимодействовать только через bond0
.
Мы делаем это путем создания или редактирования конфигурационных файлов для каждого интерфейса.
- /etc/sysconfig/сетевые скрипты/ifcfg-eth1
- /etc/sysconfig/сетевые скрипты/ifcfg-eth2
Теперь откройте и отредактируйте файл ifcfg-eth1
со следующей конфигурацией.
DEVICE=eth1 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes
Сделайте то же самое для ifcfg-eth2
.
DEVICE=eth2 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes
Без этой настройки ядро не будет знать, что eth1
и eth2
должны работать вместе. Кроме того, не назначайте IP-адреса eth1
или eth2
. IP-адрес должен быть только у bond0
. В противном случае операционная система запутается при попытке маршрутизировать трафик.
Шаг 3: Создайте интерфейс связи (bond0)
Хорошо, до сих пор вы говорили Linux, что eth1
и eth2
должны работать как подчинённые, но подчинённым нужен хозяин, верно? Этот хозяин — то, что мы здесь создаём: объединённый интерфейс с именем bond0
.
Для балансировки нагрузки (mode 0
) – Создайте конфигурационный файл ifcfg-bond0
.
vi /etc/sysconfig/network-scripts/ifcfg-bond0
Добавьте следующую конфигурацию.
DEVICE=bond0 TYPE=Bond ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 BONDING_OPTS="mode=0 miimon=100"
Для активного резервного копирования (mode 1
) — Просто измените параметр привязки:
BONDING_OPTS="mode=1 miimon=100"
В зависимости от вашей системы:
sudo systemctl restart NetworkManager
Или, если вы используете более старую сетевую службу:
sudo systemctl restart network
Шаг 4: Проверьте состояние склеивания
После настройки объединения и перезапуска сетевого сервиса необходимо убедиться, что объединение работает правильно.
watch -n 1 cat /proc/net/bonding/bond0
Пример вывода для режима 0 (циклический перебор):
Bonding Mode: load balancing (round-robin) Slave Interface: eth1 Slave Interface: eth2 MII Status: up
Пример вывода для режима 1 (Активный-резервный):
Bonding Mode: fault-tolerance (active-backup) Currently Active Slave: eth1 Slave Interface: eth2
Это показывает, какая сетевая карта активна и подключены ли обе ссылки.
Дополнительно: Тестовый переход на другой ресурс (режим активного резервного копирования)
Хотите проверить, что происходит при выходе из строя одной сетевой карты?
sudo ifconfig eth1 down # eth2 должен автоматически стать активным watch -n 1 cat /proc/net/bonding/bond0
Верни это обратно:
sudo ifconfig eth1 up
Вы увидите, что Linux автоматически переключает интерфейсы без простоев — в этом прелесть объединения!
Советы по устранению неполадок
- Если
bond0
не отображается, проверьте ещё раз файлы конфигурации и убедитесь, что все интерфейсы включены. - Убедитесь, что связующий модуль загружен (
lsmod | grep bonding
). - Например, для
mode 0
некоторых коммутаторов требуются настройки агрегирования каналов на их конце. - Используйте
ip addr
вместо ifconfig в более новых системах.
Как удалить привязку канала Ethernet
Иногда вам может понадобиться отключить объединение и вернуться к использованию сетевых карт по отдельности, например, для тестирования, устранения неполадок или перенастройки сервера.
sudo systemctl stop NetworkManager sudo ip link set bond0 down sudo modprobe -r bonding
Теперь перейдите к удалению файлов конфигурации, которые настраивают соединение:
sudo rm /etc/sysconfig/network-scripts/ifcfg-bond0
Кроме того, отредактируйте файлы конфигурации для eth1
и eth2
, чтобы удалить строки MASTER
и SLAVE
и вернуть их в качестве отдельных интерфейсов.
Вот как должен выглядеть отдельный ifcfg-eth1
файл:
DEVICE=eth1 TYPE=Ethernet ONBOOT=yes BOOTPROTO=dhcp
Или со статическим IP-адресом:
DEVICE=eth1 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.101 NETMASK=255.255.255.0
Сделайте то же самое для eth2
.
Как только всё будет готово, перезапустите NetworkManager, чтобы снова включить интерфейсы.
sudo systemctl start NetworkManager
Вы можете подтвердить это с помощью:
ip addr
Теперь вы должны увидеть, что eth1
и eth2
снова работают, а bond0
исчезло.
Заключение
Объединение каналов Ethernet — это полезный и простой инструмент для повышения производительности и надёжности сети в системах Linux. Объединение каналов позволяет максимально эффективно использовать оборудование, независимо от того, нужно ли вам сбалансировать трафик между несколькими сетевыми интерфейсами или обеспечить резервирование на случай сбоя сетевого адаптера.
Следуя инструкциям в этом руководстве, вы сможете легко настроить объединение двух сетевых карт и выбрать режим балансировки нагрузки или активного резервного копирования в зависимости от ваших потребностей.