Вопрос или проблема
Я настроил Channel-bonding (на RHEL/CentOS) с параметром balance-alb (mode=6):
BONDING_OPTS="mode=balance-alb miimon=100 updelay=200 downdelay=200"
который работает корректно, и согласно /proc/net/bonding/bond0
, активный slave – eth1
.
[root@baba ~]# cat /proc/net/bonding/bond0
Драйвер Ethernet Channel Bonding: v3.4.0-1 (7 октября 2008)
Режим Bonding: адаптивный баланс нагрузки
Основной Slave: отсутствует
Текущий активный Slave: eth1
Состояние MII: активно
Интервал опроса MII (мс): 100
Задержка включения (мс): 200
Задержка выключения (мс): 200
Интерфейс Slave: eth0
Состояние MII: активно
Скорость: 1000 Мбит/с
Дуплекс: полный
Количество отказов связи: 0
Постоянный HW адрес: 00:19:00:00:00:fb
Интерфейс Slave: eth1
Состояние MII: активно
Скорость: 1000 Мбит/с
Дуплекс: полный
Количество отказов связи: 0
Постоянный HW адрес: 00:06:11:11:11:3b
(я намеренно заменил средние биты MAC-адреса на 00 и 11)
Теперь, согласно ifconfig
, распределение MAC-адресов для eth0 и eth1 отличается (от вывода выше) – они поменялись местами.
[root@baba ~]# ifconfig | sed -n '/^[a-z]*[0-9]/p'
bond0 Link encap:Ethernet HWaddr 00:19:00:00:00:FB
eth0 Link encap:Ethernet HWaddr 00:06:11:11:11:3B
eth1 Link encap:Ethernet HWaddr 00:19:00:00:00:FB
Кто-нибудь знает, почему я вижу это или как это работает? Заранее спасибо.
С уважением!!
1) eth0 присоединяется к bond, и bond берет MAC-адрес eth0.
2) eth1 присоединяется к bond.
3) По какой-то причине eth1 становится активным slave, и наблюдается следующее поведение:
Если принимающий slave выходит из строя, другой slave
перенимает MAC-адрес вышедшего из строя
принимающего slave.
Источник: https://www.kernel.org/doc/Documentation/networking/bonding.txt
Изменение MAC-адреса, похоже, работает как ожидалось.
Ответ или решение
Настройка и управление сетевыми интерфейсами с использованием технологии агрегирования каналов (Channel bonding) — это востребованная задача в современных сетевых инфраструктурах. В рассматриваемом случае на Red Hat Enterprise Linux (RHEL) или CentOS используется режим балансировки нагрузки balance-alb
(mode=6), который обеспечивает адаптивное распределение нагрузки среди доступных сетевых интерфейсов.
Теоретическая часть
Агрегирование каналов позволяет объединить несколько физических интерфейсов в один логический интерфейс, что повышает пропускную способность и надежность сетевого соединения. В случае с режимом balance-alb
, система автоматически распределяет входящую и исходящую нагрузку между различными интерфейсами, основываясь на алгоритме адаптивной балансировки нагрузки.
Особенностью режима balance-alb
является то, что он берет на себя ответственность за распределение трафика, используя MAC-адреса, что также включает в себя динамическое изменение MAC-адресов сетевых интерфейсов. Это вызвано необходимостью обеспечить корректное распределение трафика и возможность переключений на новых активных интерфейсах.
Пример из вашего случая
В вашем примере конфигурация для bond0
установлена с параметрами mode=balance-alb miimon=100 updelay=200 downdelay=200
, что указывает на использование адаптивной балансировки нагрузки и настройки моментов переключения при изменении состояния интерфейсов.
Вы наблюдаете, что активным ведомым интерфейсом (Active Slave) является eth1
, но при этом происходит смена MAC-адресов между eth0
и eth1
.
Из вывода /proc/net/bonding/bond0
видно, что eth0
и eth1
имеют определенные MAC-адреса:
eth0
: 00:19:00:00:00:fbeth1
: 00:06:11:11:11:3b
Однако в выводе команды ifconfig
указано, что:
- Для
bond0
MAC-адрес совпадает сeth0
: 00:19:00:00:00:FB eth0
имеет MAC-адрес00:06:11:11:11:3B
eth1
—00:19:00:00:00:FB
Применение знаний
Данная ситуация характерна для режима balance-alb
, в котором для обеспечения балансировки и отказоустойчивости MAC-адрес логического канала (bond0
) может быть перенесен на активный интерфейс, в данном случае eth1
. Это сделано для того, чтобы обеспечить правильное распределение трафика и чтобы в случае сбоя трафик не потерялся, а перенаправлялся через оставшиеся действующие интерфейсы.
Причина таких изменений заключается в том, что при использовании balance-alb
необходимо обеспечить доступность систем, даже если один из интерфейсов отключен. Когда eth1
стал активным интерфейсом, его MAC-адрес логически заменяется на тот, что был назначен bond0
, а eth0
получает временно назначенный MAC-адрес. В документе network bonding указано, что подобное поведение правильно и вовсе не является аномалией.
Для подтверждения этого поведения можно рассмотреть следующие аспекты:
-
Конфигурационные файлы: убедитесь, что конфигурационные файлы сетевых интерфейсов корректно настроены и нет ручных изменений MAC-адресов.
-
Linux bonding driver: он самостоятельно управляет распределением MAC-адресов для обеспечения отказоустойчивости и балансировки нагрузки.
-
Документация: в зависимости от версии ядра Linux документация по сетевому драйверу bonding может содержать дополнительные детали о том, как конкретные режимы влияют на MAC-адресацию.
Таким образом, наблюдаемое поведение считается нормальным для balance-alb
и является частью механизма обеспечения надежности и эффективной балансировки сетевой нагрузки. Рекомендуется детально изучить документацию на используемую версию системы и драйвера, чтобы лучше понять нюансы управления агрегированием каналов.