Объединение сетeвых интерфейсов в Ubuntu при помощи «bonding»
В статье рассказано, как объединить два физических сетевых интерфейса в один для увеличения пропускной способности или для повышения отказоустойчивости
сети. В Linux это делается при помощи модуля bonding и утилиты ifenslave. В большинстве новых версий дистрибутивов модуль ядра bonding уже есть и готов к использованию, в некоторых вам придется собрать его вручную.
Установим нужное ПО:
0 1 2 3 |
aptitude install ifenslave ethtool |
Затем добавим модуль bonding в автозагрузку и пропишем опции для его запуска, для этого в конец файла /etc/modules добавим текст, следуя логике примеров, приведенных ниже.
Пример для одного виртуального интерфейса из двух физических:
0 1 2 3 |
bonding mode=0 miimon=100 |
Пример для создания двух интерфейсов из четырех физических:
0 1 2 3 |
bonding mode=0 miimon=100 max_bonds=2 |
Подробнее о режимах работы bonding
mode = 0 (round robin)
Круговой, циклически использует физические интерфейсы для передачи пакетов. Рекомендован для включения «по умолчанию». Этот режим работает с максимальной отдачей
mode = 1 (active-backup)
Работает только один интерфейс, остальные находятся в очереди горячей замены. Если ведущий интерфейс перестает функционировать, то его нагрузку подхватывает следующий (присвоив mac-адрес) и становится активным. Дополнительная настройка коммутатора не требуется.
mode = 2 (balance-xor)
XOR политика: Передача на основе [(исходный MAC-адрес → XOR → MAC-адрес получателя) %число интерфейсов]. Эта команда выбирает для каждого получателя определенный интерфейс в соответствии с mac-адресом. Режим обеспечивает балансировку нагрузки и отказоустойчивость.
mode = 3 (broadcast)
Все пакеты передаются на все интерфейсы в группе. Режим обеспечивает отказоустойчивость.
mode = 4 (802.3ad)
IEEE 802.3ad Dynamic Link aggregation (динамическое объединение каналов). Создает агрегации групп, имеющие одни и те же скорости и дуплексные настройки. Использует все включенные интерфейсы в активном агрегаторе согласно спецификации 802.3ad.
Предварительные реквизиты
Поддержка ethtool (позволяет отображать или изменять настройки сетевой карты) базы драйверов для получения скорости и дуплекса каждого интерфейса.
Коммутатор с поддержкой IEEE 802.3ad Dynamic Link aggregation. Большинство параметров потребует некоторой конфигурации для режима 802.3ad.mode =5 (balance-tlb)
Адаптивная балансировка передаваемой нагрузки: канал связи не требует какой либо специальной настройки. Исходящий трафик распределяется в соответствии с текущей нагрузкой (вычисляется по скоростям) для каждого интерфейса. Входящий трафик принимается текущим интерфейсом. Если принимающий интерфейс выходит из строя, то следующий занимает его место приватизировав его mac-адрес.
Поддержка ethtool (позволяет отображать или изменять настройки сетевой карты) базы драйверов для получения скорости и дуплекса каждого интерфейса.mode = 6 (balance-alb)
Адаптивное перераспределение нагрузки: включает balance-tlb плюс receive load balancing (rlb) для трафика IPv4 и не требует специального конфигурирования. То есть все так же как и при mode =5, только и входящий трафик балансируется между интерфейсами. Полученная балансировка нагрузки достигается опросом ARP. Драйвер перехватывает ответы ARP, направленные в локальной системе в поисках выхода и перезаписывает исходный адрес сетевой карты с уникальным аппаратным адресом одного из интерфейсов в группе.
Руками попробуем загрузить модуль bonding
0 1 2 3 4 |
## Один виртуальный интерфейс modprobe bonding mode=0 miimon=100 |
0 1 2 3 4 |
## Два виртуальных интерфейса modprobe bonding mode=0 miimon=100 max_bonds=2 |
Настроим параметры сетевых интерфейсов bonding`a, для этого отредактируем файл настроек интерфейсов /etc/network/interfaces. В примере шаблоны для настройки двух виртуальных интерфейсов.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# The bond0 network interface auto bond0 allow-hotplug bond0 iface bond0 inet static address <ip-address> netmask <netmask> network <network-address> broadcast <broadcast-address> gateway <gateway-address> dns-nameservers <nameserver-one> <nameserver-two> dns-search <domain-name> up /sbin/ifenslave bond0 eth0 up /sbin/ifenslave bond0 eth1 # The bond1 network interface auto bond1 allow-hotplug bond1 iface bond1 inet static address <ip-address> netmask <netmask> network <network-address> broadcast <broadcast-address> gateway <gateway-address> dns-nameservers <nameserver-one> <nameserver-two> dns-search <domain-name> up /sbin/ifenslave bond1 eth2 up /sbin/ifenslave bond1 eth3 |
Более подробно по опциям файла /etc/network/interfaces можно прочитать выполнив команду man interfaces
После того как прописаны настройки интерфейсов нужно перезапустить сеть командой /etc/init.d/networking restart и проверить, поднялись ли интерфейсы bond0, и если настраивали два, то bond1.
По мотивам