Агрегация портов в debian


Агрегирование каналов c помощью LACP в Debian

Объединение портов в Linux Debian для увеличения пропускной способности канала.

Управление агрегированием осуществляется с помощью утилиты ifenslave, установим её.

apt-get install ifenslave

Модуль “бондинга” входит в состав ядра уже давно. Загрузим его:

Если не последовало никакого вывода - значит все хорошо. На всякий случай можно проверить командой lsmod | grep bond

Бондинг может работать в нескольких режимах:

0 - balance-rr - (round-robin) - режим циклического выбора активного интерфейса для исходящего трафика (рекомендован для включения по умолчанию, не требует применения специальных коммутаторов);

1 - active-backup - активен только один интерфейс, остальные в режиме горячей замены (самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов);

2 - balance-xor - режим, в котором каждый получатель закрепляется за одним из физических интерфейсов, который выбирается по специальной формуле (не требует применения специальных коммутаторов);

3 - broadcast - трафик идет через все интерфейсы одновременно (примитивный и потенциально конфликтный режим);

4 - 802.3ad - (dynamic link aggregation) - в группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);

5 - balance-tlb - (adaptive transmit load balancing) - исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт);

6 - balance-alb - (adaptive load balancing) - включает в себя balance-tlb, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).

Настраиваем интерфейс и настраиваем параметры модуля /etc/network/interfaces:

iface bond0 inet staticaddress 10.10.2.36netmask 255.255.255.0network 10.10.2.0gateway 10.10.2.254
up /sbin/ifenslave bond0 eth0 eth2down /sbin/ifenslave -d bond0 eth0 eth2

Редактируем /etc/modprobe.d/arch/i386:

alias bond0 bondingoptions bonding mode=5 miimon=100 downdelay=200 updelay=200

Указываем режим настройки сети:

Либо, как второй вариант, в interfaces добавим:

bond_mode balance-tlbbond_miimon 100bond_downdelay 200bond_updelay 200slaves eth0 eth2

И обновим:

Проверяем: cat /proc/net/bonding/bond0

bogachev.biz

Объединение сетевых интерфейсов в linux

Так уже получилось что писал статью для howtoforge. И естественно тут же все это оказалось в русском варианте на других сайтах. Только вот незадача: в статье были допущены неточности, и публицисты с других «сайтов» вставили as-is. Хочу попробовать исправить это оплошность.

Для чего это надо?

Объясню на примере: был у меня фтп с 2мя сетевыми картами, но использовалась одна. Со временем весь 1Гб/с начал забиваться по вечерам — и людям плохо, и у меня iowait растет. Но есть вторая сетевая карта. Так вот такое объединение позволит использовать 2 (3, 4, 5...) как одну с 2Гб/с. Но это не «потолок», вот полный список режимов:

mode=0 (balance-rr)

Последовательно кидает пакеты, с первого по последний интерфейс.

mode=1 (active-backup)

Один из интерфейсов активен. Если активный интерфейс выходит из строя (link down и т.д.), другой интерфейс заменяет активный. Не требует дополнительной настройки коммутатора

mode=2 (balance-xor)

Передачи распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.

mode=3 (broadcast)

Все пакеты на все интерфейсы

mode=4 (802.3ad)

Link Agregation — IEEE 802.3ad, требует от коммутатора настройки.

mode=5 (balance-tlb)

Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Не требует настройки коммутатора.

mode=6 (balance-alb)

Тоже самое что 5, только входящий трафик тоже распределяется между интерфейсами. Не требует настройки коммутатора, но интерфейсы должны уметь изменять MAC.

Настройка

Очень простая. Вы выбираете режим, втыкаете в коммутатор второй кабель. Дальше в зависимости от системы, я делал это на Debian Lenny

#apt-get install ifenslave-2.6

Дальше есть 2 варианта: Вариант №1 Подправить /etc/network/interfaces к примеру так. iface bond0 inet static address 10.0.1.5 netmask 255.255.255.0 network 10.0.1.0 gateway 10.0.1.254 up /sbin/ifenslave bond0 eth0 eth2

down /sbin/ifenslave -d bond0 eth0 eth2

и подправить /etc/modprobe.d/arch/i386 примерно так

alias bond0 bonding options bonding mode=5 miimon=100 downdelay=200 updelay=200

Естественно указать свой режим и настройки сети.

# update-modules # ifdown eth0 eth2 # ifup bond0

# /etc/init.d/networking restart

Вариант №2 Все настройки через /etc/network/interfaces iface bond0 inet static address 10.0.1.5 netmask 255.255.255.0 network 10.0.1.0 gateway 10.0.1.254 bond_mode balance-tlb bond_miimon 100 bond_downdelay 200 bond_updelay 200

slaves eth0 eth2

Сохраняем и пишем:

update-modules # ifdown eth0 eth2 # ifup bond0

# /etc/init.d/networking restart

После этого должен появится один интерфейс bond0. Далее можно плодить интерфейсы bon0:0 и т.д.

UPD: Перенес из своего блога в нужный

UPD 2: Спасибо infotim, за правки. Теги:
  • 802.3
  • lacp
  • сетевые
  • link agregation

habr.com

Агрегирование каналов c помощью LACP в Debian

Объединение портов в Linux Debian для увеличения пропускной способности канала.

Управление агрегированием осуществляется с помощью утилиты ifenslave, установим её.

apt-get install ifenslave

Модуль “бондинга” входит в состав ядра уже давно. Загрузим его:

Если не последовало никакого вывода - значит все хорошо. На всякий случай можно проверить командой lsmod | grep bond

Бондинг может работать в нескольких режимах:

0 - balance-rr - (round-robin) - режим циклического выбора активного интерфейса для исходящего трафика (рекомендован для включения по умолчанию, не требует применения специальных коммутаторов);

1 - active-backup - активен только один интерфейс, остальные в режиме горячей замены (самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов);

2 - balance-xor - режим, в котором каждый получатель закрепляется за одним из физических интерфейсов, который выбирается по специальной формуле (не требует применения специальных коммутаторов);

3 - broadcast - трафик идет через все интерфейсы одновременно (примитивный и потенциально конфликтный режим);

4 - 802.3ad - (dynamic link aggregation) - в группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);

5 - balance-tlb - (adaptive transmit load balancing) - исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт);

6 - balance-alb - (adaptive load balancing) - включает в себя balance-tlb, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).

Настраиваем интерфейс и настраиваем параметры модуля /etc/network/interfaces:

iface bond0 inet staticaddress 10.10.2.36netmask 255.255.255.0network 10.10.2.0gateway 10.10.2.254
up /sbin/ifenslave bond0 eth0 eth2down /sbin/ifenslave -d bond0 eth0 eth2

Редактируем /etc/modprobe.d/arch/i386:

alias bond0 bondingoptions bonding mode=5 miimon=100 downdelay=200 updelay=200

Указываем режим настройки сети:

Либо, как второй вариант, в interfaces добавим:

bond_mode balance-tlbbond_miimon 100bond_downdelay 200bond_updelay 200slaves eth0 eth2

И обновим:

Проверяем: cat /proc/net/bonding/bond0

redmine.bogachev.biz

Linux bonding — объединение сетевых интерфейсов в Linux

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 или 1  Политика активный-резервный. Только один сетевой интерфейс из объединённых будет активным. Другой интерфейс может стать активным, только в том случае, когда упадёт текущий активный интерфейс. При такой политике MAC адрес bond интерфейса виден снаружи только через один сетевой порт, во избежание появления проблем с коммутатором. Эта политика применяется для отказоустойчивости.
 balance-xor    или 2  Политика XOR. Передача распределяется между сетевыми картами используя формулу: [( «MAC адрес источника» XOR «MAC адрес назначения») по модулю «число интерфейсов»]. Получается одна и та же сетевая карта передаёт пакеты одним и тем же получателям. Опционально распределение передачи может быть основано и на политике «xmit_hash».  Политика XOR применяется для балансировки нагрузки и отказоустойчивости. 
 broadcast       или 3   Широковещательная политика. Передает всё на все сетевые интерфейсы. Эта политика применяется для отказоустойчивости.
 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        или 0  Это значение по умолчанию. Активный агрегатор выбирается по наибольшей объединённой полосе пропускания. Перевыбор активного агрегатора осуществляется, только, когда упадут линки на всех сетевых картах в активном агрегаторе, либо если активный агрегатор не имеет сетевых карт.
bandwidth или 1  Активный агрегатор выбирается по наибольшей объединённой полосе пропускания. Перевыбор активного агрегатора происходит если: — сетевой интерфейс добавился или удалился из объединения — на любом интерфейсе изменилось состояние линка — любой интерфейс изменил состояние ассоциации 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     или 0  Проверка не выполняется (значение по умолчанию)   
active   или 1  Проверка происходит только на активном интерфейсе 
backup или 2  Проверка происходит только на резервных интерфейсах 
all         или 3  Проверка происходит на всех интерфейсах 

Для активного интерфейса производится проверка приходящих 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 или 0  Запрос партнёра на передачу LACPDU пакетов каждые 30 секунд (Значение по умолчанию)
fast  или 1  Запрос партнёра на передачу 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, eth2, и т.д.). Указывает какой интерфейс будет первичным. Этот интерфейс будет всегда активным, пока он доступен, переключение произойдет только в том случае, если интерфейс упадёт или выключится. Этот параметр используется, когда один интерфейс имеет преимущество перед другим, например по полосе пропускания. Параметр только для режима active-backup

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

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

 Этот параметр добавлен в версии 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 и eth2 в режиме active-backup в файле «/etc/network/interfaces»:

auto bond0iface bond0 inet dhcp   bond-slaves eth0 eth2   bond-mode active-backup   bond-miimon 100

   bond-primary eth0 eth2

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

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

auto bond0iface 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 eth2

auto eth2iface eth2 inet manual   bond-master bond0

   bond-primary eth0 eth2

Настройка 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, eth2 и т.д., так и по идентификатору устройства, например 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=eth0USERCTL=noONBOOT=yesMASTER=bond0SLAVE=yes

BOOTPROTO=none

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

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

DEVICE=eth2USERCTL=noONBOOT=yesMASTER=bond0SLAVE=yes

BOOTPROTO=none

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

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

DEVICE=bond0IPADDR=192.168.0.1NETMASK=255.255.255.0NETWORK=192.168.0.0BROADCAST=192.168.0.255ONBOOT=yesBOOTPROTO=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=bond0ONBOOT=yesBOOTPROTO=dhcpUSERCTL=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 и eth2. Мы хотим их объединить по методу 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 eth2

Этот метод не поддерживает использование скриптов «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//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 и eth2, и два интерфейса e1000 (eth3, eth4). Нужно создать два объединения, первое в режиме balance-alb для e100 сетевых карт, и второе в режиме active-backup для e1000 сетевых карт. Необходимо так же, что бы настройки сохранялись при перезагрузке компьютера.

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

modprobe bondingmodprobe e100echo balance-alb > /sys/class/net/bond0/bonding/modeifconfig bond0 192.168.1.1 netmask 255.255.255.0 upecho 100 > /sys/class/net/bond0/bonding/miimonecho +eth0 > /sys/class/net/bond0/bonding/slaves

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

modprobe e1000echo +bond1 > /sys/class/net/bonding_mastersecho active-backup > /sys/class/net/bond1/bonding/modeifconfig bond1 192.168.2.1 netmask 255.255.255.0 upecho +192.168.2.100 /sys/class/net/bond1/bonding/arp_ip_targetecho 2000 > /sys/class/net/bond1/bonding/arp_intervalecho +eth3 > /sys/class/net/bond1/bonding/slaves

echo +eth4 > /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: eth2   MII Status: up   Link Failure Count: 0

   Permanent HW addr: 22:22:22:22:22:22

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

www.adminia.ru

Агрегирование каналов (802.3ad) в Debian

Для объединения (агрегирования) каналов, в Linux используется драйвер bonding.  О том как заставить работать это дело в Debian, я  попытаюсь кратко описать здесь.

Для начала установим пакет ifenslave. Он нам понадобится для объединения интерфейсов. aptitude install ifenslave Добавляем в файл/etc/modprobe.d/aliases.conf следующие строки: alias bond0 bonding options bonding mode=2 miimon=100 Здесь мы устанавливаем режим работы виртуального интерфейса и период опроса объединяемых интерфейсов на предмет наличия соединения.

Параметр mode может принимать следующие значения:

    • 0 (balance-rr) - Последовательно кидает пакеты, с первого по последний интерфейс.
    • 1 (active-backup) - Один из интерфейсов активен. Если активный интерфейс выходит из строя, другой интерфейс заменяет активный. Данный режим не требует дополнительной настройки коммутатора.
    • 2 (balance-xor) - Передачи пакетов распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Этот режим даёт балансировку нагрузки и отказоустойчивость.
    • 3 (broadcast) - Все пакеты  на все интерфейсы.
    • 4 (802.3ad) - Link Agregation - IEEE 802.ad. Требуется дополнительная настройка коммутатора.
    • 5 (balance-tlb) - Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Данный режим не требует дополнительной настройки коммутатора.
    • 6 (balance-alb) - Тоже самое что и 5, но в данном режиме так же и входящий трафик распределяется между интерфейсами. Данный режим не требует дополнительной настройки коммутатора, но интерфейсы должны уметь изменять MAC.
Параметр miimon указывается в миллисекундах. Если указать 0, то интерфейсы опрашиваться не будут. Рекомендуется указывать значение равное 100 и далее корректировать его в зависимости от своих потребностей.

Теперь редактируем файл настроек сетевых интерфейсов /etc/network/interfaces, добавляем в него следующие строки

auto bond0 iface bond0 inet static         address 192.168.255.253         netmask 255.255.255.255         up /sbin/ifenslave bond0 eth0 eth2

        down /sbin/ifenslave -d bond0 eth0 eth2

Здесь меняем значения адреса и маски на угодную вам, так же не забываем изменить имена интерфейсов ethX на те, которые будете использовать. Для этой версии Debian, процедура bonding'а немного другая. Здесь нет необходимости прописывать алиасы в modprobe.d. Достаточно установить пакет ifenslave и внести изменения в /etc/network/interfaces auto bond0 iface bond0 inet static         address 192.168.255.253         netmask 255.255.255.255         bond_mode balance-xor

        bond_miimon 100

Описание процедуры бондинга с офсайта Debian

noknotes.blogspot.com

Агрегация интерфейсов в Ubuntu 16.04 LTS

Подробности Автор: dimetrius Категория: Сети и vpn Опубликовано: 01 июля 2017 Обновлено: 11 июля 2017 Просмотров: 4403 Объединение сетевых карт в Linux можно осуществить с помощью драйвера bonding, он предоставляет методы для агрегирования нескольких сетевых интерфейсов в один логический. Поведение связанных интерфейсов зависит от режима. В общем случае, объединенные интерфейсы могут работать в режиме горячего резерва (отказоустойчивости) или в режиме балансировки нагрузки.

Ядро в Ubuntu 16.04 LTS имеет этот драйвер в виде модуля bonding и утилиты пользовательского уровня ifenslave для управления им. Утилита ifenslave обычно не установлена, её нужно установить отдельно.

Приступим к настройкеДля начала установим требуемый пакетapt-get install ifenslave​ Отредактируем файл # vim /etc/modprobe.d/bonding.conf bonding mode=4 miimon=100 lacp_rate=1​ Отредактируем файл с настройками сетевых интерфейсов# vim /etc/network/interfaces auto eth0 iface eth0 inet manual bond-master bond0 auto eth2 iface eth2 inet manual bond-master bond0 auto bond0 iface bond0 inet static address 10.0.0.80 gateway 10.0.0.1 netmask 255.255.255.0 bond-mode 4 bond-miimon 100 bond-lacp-rate 4 bond-slaves none​ Для применения изменений нужно выполнить# ifdown eth0 eth2 # ifup bond0 # /etc/init.d/networking restart​ Если после этого связь с сетью в бондинге не появилась, можно попробовать перезагрузить ОС.Статус бондинга можем наблюдать в файле# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.1.1 (September 26, 2006) Bonding Mode: IEEE 802.3ad Dynamic link aggregation Transmit Hash Policy: layer2 (0) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 802.3ad info LACP rate: fast Active Aggregator Info: Aggregator ID: 1 Number of ports: 2 Actor Key: 17 Partner Key: 1 Partner Mac Address: 00:77:54:71:a8:6f Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:99:97:60:9d:48 Aggregator ID: 1 Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:00:85:60:9d:49 Aggregator ID: 1​

Ожидается дополнение статьи...

dimetrius.net


Смотрите также