1. Драйвер bonding

Объединение сетевых карт в Linux можно осуществить с помощью драйвера bonding, он предоставляет методы для агрегирования нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (отказоустойчивости) или в режиме балансировки нагрузки.

Многие ядра в популярных дистрибутивах Linux имеют этот драйвер в виде модуля bonding и утилиты пользовательского уровня ifenslave для управления им. Утилита ifenslave может не быть установлена, тогда её нужно установить отдельно.

Если ядро без поддержки bonding, то для его использования, необходимо сконфигурировать (при конфигурировании ядра командами «make menuconfig» или «make xconfig» или
«make config«, в секци «Network device support» выбрать «Bonding driver support«), собрать и установить ядро. После установить утилиту ifenslave.

Драйвер bonding имеет опции. Эти опции можно задать как аргументы в командах insmod или modprobe, обычно их задают в файле «/etc/modules.conf» или в файле «/etc/modprobe.conf», так же опции могут задаваться в специфичных конфигурационных файлах для определённых дистрибутивов.

 

2. Параметры (опции) модуля bonding

 mode — определяет политику поведения объединенных интерфейсов. Возможные значения:

 balance-rr       или 0 Политика round-robin. Пакеты отправляются последовательно, начиная с первого доступного интерфейса и заканчивая последним. Эта политика применяется для балансировки нагрузки и отказоустойчивости
 active-backup или Политика активный-резервный. Только один сетевой интерфейс из объединённых будет активным. Другой интерфейс может стать активным, только в том случае, когда упадёт текущий активный интерфейс. При такой политике MAC адрес bond интерфейса виден снаружи только через один сетевой порт, во избежание появления проблем с коммутатором. Эта политика применяется для отказоустойчивости.
 balance-xor    или Политика XOR. Передача распределяется между сетевыми картами используя формулу: [( «MAC адрес источника» XOR «MAC адрес назначения») по модулю «число интерфейсов»]. Получается одна и та же сетевая карта передаёт пакеты одним и тем же получателям. Опционально распределение передачи может быть основано и на политике «xmit_hash».  Политика XOR применяется для балансировки нагрузки и отказоустойчивости. 
 broadcast       или  Широковещательная политика. Передает всё на все сетевые интерфейсы. Эта политика применяется для отказоустойчивости.
 802.3ad           или 4  Политика агрегирования каналов по стандарту IEEE 802.3ad. Создаются агрегированные группы сетевых карт с одинаковой скоростью и дуплексом. При таком объединении передача задействует все каналы в активной агрегации, согласно стандарту IEEE 802.3ad. Выбор через какой интерфейс отправлять пакет определяется политикой, по умолчанию XOR политика, можно использовать «xmit_hash» политику. 
Требования:
1. Поддержка Ethtool в драйвере, для получения информации о скорости и дуплексе на каждом сетевом интерфейсе
2. Поддержка на коммутаторе стандарта IEEE 802.3ad
3. Настройка на коммутаторе
 balance-tlb     или 5 Политика адаптивной балансировки нагрузки передачи. Исходящий трафик распределяется в зависимости от загруженности каждой сетевой карты (определяется скоростью загрузки). Не требует дополнительной настройки на коммутаторе. Входящий трафик приходит на текущую сетевую карту. Если она выходит из строя, то другая сетевая карта берёт себе MAC адрес вышедшей из строя карты. 
Требования:
1. Поддержка Ethtool в драйвере, для получения информации о скорости загрузки на каждом сетевом интерфейсе.
 balance-alb    или 6 Политика адаптивной балансировки нагрузки. Включает в себя политику balance-tlb плюс осуществляет балансировку входящего трафика. Не требует дополнительной настройки на коммутаторе. Балансировка входящего трафика достигается путём ARP переговоров. Драйвер bonding перехватывает ARP ответы, отправляемые с локальных сетевых карт наружу, и переписывает MAC адрес источника на один из уникальных MAC адресов сетевой карты, участвующей в объединении. Таким образом различные пиры используют различные MAC адреса сервера. Балансировка входящего трафика распределяется последовательно (round-robin) между интерфейсами.
Требования:
1. Поддержка Ethtool в драйвере, для получения информации о скорости загрузки на каждом сетевом интерфейсе.
2. Поддержка в драйвере замены MAC адреса на включенном устройстве.
3. Возможно придётся корректировать значение параметра updelay равным или большим, чем значение задержки на коммутаторе (что бы ARP ответы небыли заблокированы на коммутаторе при переподключении линка, либо при добавлении новой сетевой карты в bonding)

 

ad_select — определяет логику выбора для агрегации по стандарту IEEE 802.3ad (эта опция добавлена в bonding начиная с версии 3.4.0.). Возможные значения:

stable        или Это значение по умолчанию. Активный агрегатор выбирается по наибольшей объединённой полосе пропускания. Перевыбор активного агрегатора осуществляется, только, когда упадут линки на всех сетевых картах в активном агрегаторе, либо если активный агрегатор не имеет сетевых карт.
bandwidth или Активный агрегатор выбирается по наибольшей объединённой полосе пропускания. Перевыбор активного агрегатора происходит если:
— сетевой интерфейс добавился или удалился из объединения
— на любом интерфейсе изменилось состояние линка
— любой интерфейс изменил состояние ассоциации 802.3ad
— административно перевели состояние интерфейса bond в поднятое (up)
count        или 2  Активный агрегатор выбирается по наибольшему числу портов. Перевыбор происходит при таких же условиях, как и для значения bandwidth.

 

arp_interval — определяет ARP мониторинг канала (задаётся в миллисекундах). Значение по умолчанию 0 (выключен). ARP мониторинг периодически проверяет на сетевых картах возможность приёма и передачи трафика. Обычно для проверки генерируются ARP запросы отправляемые на адрес, указанный в параметре «arp_ip_target«. Такое поведение может быть изменено параметром «arp_validate«. Если ARP мониторинг используется в режиме balance-rr или balance-xor, тогда коммутатор должен быть сконфигурирован на режим, в котором равномерно распределяются пакеты по всем линкам. Если коммутатор сконфигурирован передавать пакеты по политике XOR, тогда все ответы с arp_ip_target будут получены через один и тот же линк, что вызовет падение на остальных интерфейсах в объединении. ARP мониторинг не может использоваться одновременно с мониторингом MII (miimon).

 

arp_ip_target — Указывает IP адреса для ARP мониторинга (используется, если arp_interval >0). На эти адреса будут отправляться ARP запросы, для определения возможности приёма-передачи через интерфейсы, входящие в bonding. IP адрес задаётся в формате ddd.ddd.ddd.ddd (прим. 192.168.0.1). Для указания нескольких IP адресов, их нужно разделить запятой. Максимально можно использовать 16 IP адресов. Значение по умолчанию: без IP адреса.

 

arp_validate — Определяет будут или нет проверяться ARP запросы и ответы при использовании режима active-backup. При этой опции ARP мониторинг проверяет входящие ARP запросы и ответы , и следит что бы интерфейс был поднят, если он получает соответствующий ARP трафик. Возможные значения:

none     или Проверка не выполняется (значение по умолчанию)   
active   или Проверка происходит только на активном интерфейсе 
backup или Проверка происходит только на резервных интерфейсах 
all         или Проверка происходит на всех интерфейсах 

Для активного интерфейса производится проверка приходящих ARP ответов, они должны исходить от хоста, указанного в arp_ip_target. Резервный интерфейс обычно не получает такие ARP ответы, и проверка на нём выполняется путём ответа на ARP запрос, посланный через активный интерфейс. При определённой конфигурации сети, может возникнуть ситуация, при которой, резервный интерфейс не сможет получать ARP запросы, при возникновении такой ситуации проверку на резервных интерфейсах следует отключить.

 

downdelay — Определяет время (в миллисекундах) задержки перед отключением интерфейса, если произошел сбой соединения. Эта опция действительна только для мониторинга MII (miimon). Значение параметра должно быть кратным значениям miimon. Если оно не кратно, то округлится до ближайшего кратного значения. Значение по умолчанию 0.

 

fail_over_mac — Определяет как будут прописываться MAC адреса на объединенных интерфейсах в режиме active-backup при переключении интерфесов. Обычным поведением является одинаковый MAC адрес на всех интерфейсах. Возможные значения:

none   или 0  Отключает fail_over_mac. Устанавливает одинаковый MAC адрес на всех интерфейсах во время переключения. Это значение по умолчанию.
active или 1  MAC адрес на bond интерфейсе будет всегда таким же как и на текущем активном интерфейсе. MAC адреса на резервных интерфейсах не изменяются. MAC адрес на bond интерфейсе меняется во время обработки отказа.
follow или 2  MAC адрес на bond интерфейсе будет таким, как на первом интерфейсе добавленном в объединение. На второй и последующем интерфейсе не устанавливается этот MAC, пока они в резервном режиме. MAC адрес прописывается во время обработки отказа, когда резервный интерфейс становится активным, он принимает новый MAC (тот, что на bond интерфейсе), а старому активному интерфейсу прописывается MAC, который был на текущем активном. (То есть MAC на bond интерфейсе должен быть всегда одним и тем же)

Этот параметр добавлен в версии bonding драйвера 3.2.0, а значение «follow» в версии 3.3.0 

 

lacp_rate — Определяет с каким интервалом будут передаваться партнёром LACPDU пакеты в режиме 802.3a. Возможные значения:

slow или Запрос партнёра на передачу LACPDU пакетов каждые 30 секунд (Значение по умолчанию)
fast  или Запрос партнёра на передачу LACPDU пакетов каждую 1  секунду

 

max_bonds — Указывает сколько bonding устройств следует создавать драйверу. Например, если «max_bonds = 3«, то в системе будут созданы bond0, bond1, bond2 интерфейсы. Значение по умолчанию 1. Если значение 0, то загрузится только драйвер, но устройство создано не будет.

 

miimon — Устанавливает периодичность MII мониторинга в миллисекундах. Определяет как часто будет проверяться состояние линии на наличие отказов. Значение по умолчанию 0 — отключает MII мониторинг. Если нужно использовать такой мониторинг, рекомендуется сперва попробовать значение 100. Параметр use_carrier указывает каким образом будет определяться состояние канала.

 

num_grat_arp и num_unsol_na — Указывает количество оповещений, отправляемых соседним пирам после возникновения события отказа (самообращенные ARP запросы (gratuitous ARP) и не затребованные оповещения IPv6 (unsolicited IPv6 Neighbor Advertisements) ). После того, как поднялся линк на новом сетевом интерфейсе, отправляется оповещение на интерфейсе bond и на каждом его VLAN подинтерфейсе. Если значение больше 1, то оповещение повторяется через каждый интервал мониторинга канала (интервал задается в arp_interval или miimon). Допустимое значение от 0 до 255, значение по умолчанию 1.

 Эти параметры добавлены начиная с версии драйвера bonding 3.3.0 и 3.4.0 соответственно. Начиная с ядра Linux 2.6.40 и версии драйвера 3.7.1 такие оповещения генерируются через IPv4 и IPv6 и количество повторений не может быть задано отдельно.

 

primary — Строка вида (eth0, eth1, и т.д.). Указывает какой интерфейс будет первичным. Этот интерфейс будет всегда активным, пока он доступен, переключение произойдет только в том случае, если интерфейс упадёт или выключится. Этот параметр используется, когда один интерфейс имеет преимущество перед другим, например по полосе пропускания. Параметр только для режима active-backup

 

primary_reselect — Определяет как будет производиться возвращение на первичный интерфейс, после возобновления его работоспособности. Возможные значения:

always или 0  Значение по умолчанию. Первичный интерфейс становится активным всегда, когда возобновляется работоспособность через него
better  или Первичный интерфейс становится активным, если значение скорости и дуплекса лучше значений текущего активного интерфейса
failure или Первичный интерфейс становится активным, только, если на текущем активном интерфейсе произошла ошибка 

 Этот параметр добавлен в версии bonding драйвера 3.6.0

 

updelay — Задает время задержки в миллисекундах, перед тем как поднять линк при обнаружении восстановления канала. Этот параметр возможен только при MII мониторинге . Значение параметра должно быть кратным значениям miimon. Если оно не кратно, то округлится до ближайшего кратного значения. Значение по умолчанию 0.

 

use_carrier — Указывает как miimon будет определять состояние линии, используя контроль ввода-вывода (ioctl) MII или ETHTOOL, либо используя функцию netif_carrier_ok(). MII или ETHTOOL ioctl мене эффективны и используют устаревшие методы работы с ядром. Предпочтительней использование netif_carrier_ok, но не все драйвера поддерживают данную функцию. Если драйвер не поддерживает netif_carrier, то может возникнуть такая ситуация, что интерфейс всегда поднят, даже при отсутствии линка, в этом случае стоит использовать MII или ETHTOOL ioctl. 

Значение 1 Включает использование netif_carrier_ok(). Это значение по умолчанию
Значение 0 Включает использование устаревших MII/ETHTOOL ioctl

 

xmit_hash_policy — Определяет хэш политику передачи пакетов через объединенные интерфейсы в режиме balance-xor или 802.3ad. Возможные значение:

layer2  Использует только MAC адреса для генерации хэша. При этом алгоритме трафик для конкретного сетевого хоста будет отправляться всегда через один и тот же интерфейс. Алгоритм совместим с 802.3ad.
Формула расчёта хэша:
  (source MAC XOR destination MAC) modulo slave count 
layer2+3  Использует как MAC адреса так и IP адреса для генерации хэша. Алгоритм совместим с 802.3ad.
Формула расчета хэша:
  (((source IP XOR dest IP) AND 0xffff) XOR ( source MAC XOR destination MAC )) modulo slave count
layer3+4  Используется IP адреса и протоколы транспортного уровня (TCP или UDP) для генерации хэша. Алгоритм не всегда совместим с  802.3ad, так как в пределах одного и того же  TCP или UDP взаимодействия может передаваться как фрагментированные так и не фрагментированнные пакеты. В фрагментированных пакетах порт источника и порт назначения отсутствуют. В результате в рамках одной сессии пакеты могут дойти до получателя не в том порядке (так как отправляются через разные интерфейсы). Некоторое оборудование, совместимое с 802.3ad может некорректно отработать такую ситуацию.
Формула расчета хэша:
  ((source port XOR dest port) XOR ((source IP XOR dest IP) AND 0xffff) modulo slave count  

Значение по умолчанию: layer2.

Опция доступна с версии bonding драйвера 2.6.3 — только значение layer2. Значение layer2+3 добавлено в версии 3.2.2

 

resend_igmp — Указывает какое количество отчетов о принадлежности группе (IGMP membership) отсылать при возникновении события отказа. Один отчет отсылается немедленно, после возникновения отказа, последующие пакеты отправляются с интервалом в 200 миллисекунд. Возможные значения от 0 до 255. Значение 0 — не посылать отчеты, в случае возникновения отказа.

Значение по умолчанию 1.

Используется в режимах balance-rr (0), active-backup (1), balance-tlb (5) and balance-alb (6)

Опция доступна с версии bonding драйвера 3.7.0

 

3. Настройка bonding в Linux

Настройку bonding можно провести используя скрипты инициализации сети ( initscripts, sysconfig или interfaces ), либо вручную используя ifenslave и sysfs. 

Определить какая система инициализации сети используется можно следующим способом:

— Если в директории «/etc/network» присутствует файл «interfaces», то в Вашей системе используется interfaces для инициализации сети

— Выполнить команду «rpm -qf /sbin/ifup» на экране отобразится название пакета, название начинается на «initscripts» либо на «sysconfig». Этот пакет и предоставляет скрипты инициализации сети. 

 

Настройка bonding через interfaces

Такой вид настройки применим к дистрибутивам linux, конфигурация сети в которых, настраивается с помощью файла «/etc/network/interfaces» (например Debian linux и дистрибутивы на его основе).

В Debian команды ifup и ifdown не поддерживают работу с bond интерфейсами. Для поддержки bonding необходимо установить пакет ifenslave-2.6. Этот пакет дает возможность задавать параметры для bond интерфейса в файле «/etc/network/interfaces». Параметры задаются в виде: «bond-option value« (например: bond-mode active-backup). Кавычки в файле указывать не надо.

Пакет ifenslave-2.6 будет сам загружать модуль драйвера bonding и использовать команду ifenslave, когда это необходимо.

Пример настройки интерфейсов eth0 и eth1 в режиме active-backup в файле «/etc/network/interfaces»:

auto bond0
iface bond0 inet dhcp
   bond-slaves eth0 eth1
   bond-mode active-backup
   bond-miimon 100
   bond-primary eth0 eth1

При такой конфигурации описывать интерфейсы eth0 и eth1 в файле ( «/etc/network/interfaces») не нужно.

Эта конфигурация может не сработать, если дистрибутив в качестве системы загрузки использует upstart (например, недавние версии Ubuntu linux). В таком случая файл «/etc/network/interfaces» следует настроить следующим образом:

auto bond0
iface bond0 inet dhcp
   bond-slaves none
   bond-mode active-backup
   bond-miimon 100

auto eth0
   iface eth0 inet manual
   bond-master bond0
   bond-primary eth0 eth1

auto eth1
iface eth1 inet manual
   bond-master bond0
   bond-primary eth0 eth1

 

Настройка bonding через sysconfig

Этот вид настройки, предназначен для дистрибутивов Linux, скрипты инициализации сети у которых основаны на sysconfig. Примером такого дистрибутива является SuSE Linux Enterprise Server. Система конфигурации сети в SuSE Linux Enterprise Server поддерживает bonding в  9-й версии. Однако, утилита конфигурирования системы YaST не умеет работать с bond интерфейсами, они должны быть сконфигурированы вручную.

Первым делом необходимо сконфигурировать каждый интерфейс, который будет участвовать в объединении. Что бы самому не создавать файлы конфигурации для каждого физического интерфейса, можно запустить утилиту конфигурации системы YaST и указать в ней настройку сети по DHCP,  в результате она создаст файлы с именем ifcfg-id-xx:xx:xx:xx:xx:xx для каждого интерфейса (xx:xx…- это MAC адрес сетевой карты). Файлы примерно такого содержания:

BOOTPROTO=’dhcp’
STARTMODE=’on’
USERCTL=’no’
UNIQUE=’XNzu.WeZGOGF+4wE’
_nm_name=’bus-pci-0001:61:01.0′

Теперь необходимо отредактировать их. Значения параметров BOOTPROTO и STARTMODE следует заменить на:

BOOTPROTO=’none’
STARTMODE=’off’

Значения параметров UNIQUE и _nm_name следует оставить без изменения

Остальные параметры (USERCTL и пр.) следует удалить

После того как все файлы вида ifcfg-id-xx:xx:xx:xx:xx:xx будут изменены по аналогии с первым, можно создать файл для bond интерфейса. Файл должен иметь имя: ifcfg-bondX (X — номер интерфейса, начинается с 0). Файлы создаются в директории: «/etc/sysconfig/network/». Пример содержания такого файла:

BOOTPROTO=»static»
BROADCAST=»192.168.0.255″
IPADDR=»192.168.0.1″
NETMASK=»255.255.255.0″
NETWORK=»192.168.0.0″
REMOTE_IPADDR=»»
STARTMODE=»onboot»
BONDING_MASTER=»yes»
BONDING_MODULE_OPTS=»mode=active-backup miimon=100″
BONDING_SLAVE0=»eth0″
BONDING_SLAVE1=»bus-pci-0000:06:08.1″

Параметр STARTMODE указывает когда следует поднимать интерфейс. Возможные значения:
  onboot —  интерфейс поднимается во время загрузки системы (рекомендуется)
  manual — интерфейс поднимается вручную
  hotplug — интерфейс поднимается при возникновении события hotplug (не рекомендуется для bond интерфейса)
  off или ignore — конфигурация интерфейса игнорируется и он не используется

Параметр BONDING_MASTER=’yes’ указывает что это bond интерфейс, является главным (master). Возможные значения: «yes«

Параметр BONDING_MODULE_OPTS определяет опции и их значения для модуля bonding. Возможные параметры для модуля bonding описаны выше.

Параметр BONDING_SLAVEn=»slave device» задает, какое устройство (сетевой интерфейс) будет участвовать в объединении. Значением может быть как имя сетевого интерфейса, например eth0, eth1 и т.д., так и по идентификатору устройства, например bus-pci-0000:06:08.1.

 

После того, как все нужные конфигурационные файлы созданы и отредактированы, нужно перезапустить сетевую подсистему. Можно сделать командой:

  # /etc/init.d/network restart

 

 Настройка bonding через initscripts

Необходимо вручную настроить конфигурационные файлы для всех физических сетевых карт, которые будут участвовать в bonding-е. Файлы настройки находятся в директории: «/etc/sysconfig/network-scripts». Имя файла должно начинаться на «ifcfg-eth» и заканчиваться на номер интерфейса (например файл настройки для интерфейса eth0 будет называться «ifcfg-eth0»)

Для интерфейса eth0 следует создать файл «ifcfg-eth0» следующего содержания:

DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

где DEVICE  — задает имя интерфейса , MASTER — указывает какой bond интерфейс будет использоваться для объединения (то есть задает  принадлежность конкретному объединению). 

Для второго сетевого интерфейса (eth1) файл в «/etc/sysconfig/network-scripts» создаётся аналогично первому, только с именем ifcfg-eth1, и соответствующим значением DEVICE:

DEVICE=eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

После того как создали (или изменили) конфигурационные файлы для сетевых интерфейсов, участвующих в bonding-е, следует создать файл, который будет описывать сам bond интерфейс. Имя файла должно быть «ifcfg-bond0«, где 0 — это номер bond интерфейса.

В файле необходимо прописать соответствующие вашей сети настройки, например:

DEVICE=bond0
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

В более поздних дистрибутивах Linux (например Fedora версии 7 и выше, Red Hat Enterprise Linux версии 5 и выше),  инициализация сети у которых основана на initscripts, имеется возможность и является предпочтительным указывать параметры для объединения интерфейсов в самом файле «ifcfg-bond0» в формате:

BONDING_OPTS=»mode=active-backup arp_interval=60 arp_ip_target=192.168.0.254″

Возможные параметры и их значения описаны выше.

Исключением является параметр arp_ip_target. Если используется версия initscripts меньше 8.57 (Fedora 8) и меньше 8.45.19 (Red Hat Enterprise Linux 5.2), и необходимо указать несколько IP адресов для проверки, то каждого получателя, следует задавать отдельным параметром со знаком ‘+’, например:

   arp_ip_target=+192.168.0.2 arp_ip_target=+192.168.0.3

В поздних версиях следует делать как описано выше, то есть для указания нескольких IP адресов в arp_ip_target, их нужно разделить запятой, например:

   arp_ip_target=192.168.0.2,192.168.0.3

Если параметры для bonding драйвера задаются в файле «ifcfg-bond0» через «BONDING_OPTS», то вносить изменения в файл «/etc/modules.conf» или «/etc/modprobe.conf» не нужно.

 

Если используется initscripts более ранней версии, который не поддерживает «BONDING_OPTS» в «ifcfg-bond0», то придётся редактировать файл «/etc/modules.conf» (или «/etc/modprobe.conf»), что бы подгрузить модуль драйвера bonding и указать его опции. Следующие строки в «/etc/modules.conf» (или «/etc/modprobe.conf») позволяют загрузить модуль и указать его параметры:

  alias bond0 bonding
  options bond0 mode=active-backup arp_interval=60 arp_ip_target=192.168.0.254

Возможные опции и их значения описаны выше.

 

После создания и правки файлов (ifcfg-eth0, ifcfg-bond0, /etc/modules.conf или /etc/modprobe.conf) необходимо перезапустить сетевую подсистему, выполнив команду с правами root:

   «/etc/rc.d/init.d/network restart»

В результате должен подняться и заработать интерфейс bond0 (либо bond1 и т.д, в зависимости от конфигурации сети)

Если в bond интерфейсе используется не статический IP адрес, а требуется получить его по DHCP, то в файле конфигурации «/etc/sysconfig/network-scripts/ifcfg-bond0» следует заменить параметр «BOOTPROTO=none» на «BOOTPROTO=dhcp» и добавить строку «TYPE=Bonding». Пример содержимого такого файла «ifcfg-bond0»:

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=dhcp
USERCTL=no
TYPE=Bonding 
BONDING_OPTS=»mode=active-backup arp_interval=60 arp_ip_target=192.168.0.254″

 

Настройка bonding вручную, используя Ifenslave 

Настройка bonding вручную, с помощью ifenslave, может потребоваться в том случае, если скрипты инициализации сети (sysconfig или initscripts) не умеют и не знают как работать с bonding (например дистрибутив SuSE Linux Enterprise Server вирсии 8)

Этот метод настройки подразумевает:

  — указание параметров модуля для драйвера bonding в файле «/etc/modules.conf» или «/etc/modprobe.conf» (в зависимости от используемого дистрибутива)

  — добавления команд «modprobe» и/или «ifenslave» в глобальные скрипты инициализации системы (для систем, использующих sysconfig — это файл «/etc/init.d/boot.local», для систем, использующих initscripts — это «/etc/rc.d/rc.local» )

Например, пусть есть две сетевые карты e100, в системе они названы как eth0 и eth1. Мы хотим их объединить по методу balance-alb в bond0, и что бы bond интерфейс поднимался после перезагрузки системы. Тогда в файл «/etc/init.d/boot.local» или «/etc/rc.d/rc.local» необходимо дописать строки:

  modprobe bonding mode=balance-alb miimon=100
  modprobe e100
  ifconfig bond0 192.168.0.1 netmask 255.255.255.0 up
  ifenslave bond0 eth0
  ifenslave bond0 eth1

Этот метод не поддерживает использование скриптов «ifup» и «ifdown», для включения и отключения интерфейса bond. Что бы отключить bond интерфейс, нужно сперва перевести интерфейс в выключенное состояние, затем выгрузить модуль драйвера. Пример команд, для отключения bond0:

  # ifconfig bond0 down
  # rmmod bonding
  # rmmod e100

 

Настройка bonding вручную, используя Sysfs 

Начиная с версии bonding драйвера 3.0.0, имеется возможность настройки через Sysfs.  Настройка bonding через Sysfs позволяет настраивать объединение интерфейсов динамически не перезагружая модуль драйвера. Такой метод позволяет добавлять, настраивать или удалять bond интерфейсы в режиме реального времени (на лету). Использование Ifenslave, при этом, не обязательно, но поддерживается. 

По умолчанию файловая система sysfs монтируется в /sys.

 

Пример добавления и удаления bond интерфейса:

 «# echo +bond0 > /sys/class/net/bonding_masters» — добавить bond0

 «# echo -bond0 > /sys/class/net/bonding_masters» — удалить существующий bond0

 «# cat /sys/class/net/bonding_masters» — посмотреть все существующие bond интерфейсы

 

Добавление и удаление интерфейсов в/из объединения:

 «# ifconfig bond0 up
  # echo +eth0 > /sys/class/net/bond0/bonding/slaves» — добавить интерфейс eth0 в объединение с интерфейсом bond0

 «# echo -eth0 > /sys/class/net/bond0/bonding/slaves» — убрать интерфейс eth0 из объединения с интерфейсом bond0

 

Изменение конфигурации bond интерфейса:

Каждый bond интерфейс может быть сконфигурирован, путём изменения файлов в «/sys/class/net/<bond name>/bonding/»

Конфигурирование bond0 в режиме balance-alb:

 «# ifconfig bond0 down
  # echo 6 > /sys/class/net/bond0/bonding/mode»
    или
 «# echo balance-alb > /sys/class/net/bond0/bonding/mode»

Перед изменением режима bond интерфейс необходимо выключить.

Включение MII мониторинга с интервалом в 1 секунду:

 «# echo 1000 > /sys/class/net/bond0/bonding/miimon»

Если был включен ARP мониторинг, то он отключится, если произойдёт включение MII мониторинга.

Добавление IP адресов для arp_ip_target

 «# echo +192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
  # echo +192.168.0.101 > /sys/class/net/bond0/bonding/arp_ip_target»

Удаление IP адреса из arp_ip_target

  «# echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target»

 

Пример использования настройки через Sysfs без использования Ifenslave:

Имеются два интерфейса e100, в системе они названы как eth0 и eth1, и два интерфейса e1000 (eth2, eth3). Нужно создать два объединения, первое в режиме balance-alb для e100 сетевых карт, и второе в режиме active-backup для e1000 сетевых карт. Необходимо так же, что бы настройки сохранялись при перезагрузке компьютера.

Для решения поставленной задачи, следует добавить строки в скрипт «/etc/init.d/boot.local» (если используется sysconfig) или в «/etc/rc.d/rc.local» (если используется initscripts):

modprobe bonding
modprobe e100
echo balance-alb > /sys/class/net/bond0/bonding/mode
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up
echo 100 > /sys/class/net/bond0/bonding/miimon
echo +eth0 > /sys/class/net/bond0/bonding/slaves
echo +eth1 > /sys/class/net/bond0/bonding/slaves

modprobe e1000
echo +bond1 > /sys/class/net/bonding_masters
echo active-backup > /sys/class/net/bond1/bonding/mode
ifconfig bond1 192.168.2.1 netmask 255.255.255.0 up
echo +192.168.2.100 /sys/class/net/bond1/bonding/arp_ip_target
echo 2000 > /sys/class/net/bond1/bonding/arp_interval
echo +eth2 > /sys/class/net/bond1/bonding/slaves
echo +eth3 > /sys/class/net/bond1/bonding/slaves

 

4.  Просмотр информации о существующем bonding подключении

Для каждого интерфейса bond создаётся файл bondX (X — номер подключения) только для чтения, расположенный в директории «/proc/net/bonding», в котором находится информация о параметрах bond подключении.

Пример такого файла:

# cat /proc/net/bonding/bond0
   Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

   Bonding Mode: fault-tolerance (active-backup)
   Primary Slave: None
   Currently Active Slave: eth0
   MII Status: up
   MII Polling Interval (ms): 100
   Up Delay (ms): 200
   Down Delay (ms): 200

   Slave Interface: eth0
   MII Status: up
   Link Failure Count: 0
   Permanent HW addr: 11:11:11:11:11:11

   Slave Interface: eth1
   MII Status: up
   Link Failure Count: 0
   Permanent HW addr: 22:22:22:22:22:22

Информацию о сетевых настройках (IP адресс, маска сети и пр.) можно посмотреть командой ifconfig

 

3 комментария: Linux bonding — объединение сетевых интерфейсов в Linux

  • Владимир говорит:

    У меня имеются два интерфейса из разных сетей (сети локальные) — возможно ли их объединение для увеличения пропускной способности?

  • Хологент говорит:

    Good!

  • bammbr говорит:

    >1. Поддержка Ethtool в драйвере, для получения информации о скорости загрузки на каждом сетевом интерфейсе.

    Хочу уточнить. Имеется в виду что в выводе
    ethtool -i
    должна присутствовать строка
    supports-statistics: yes
    ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *