Агрегация (объединение) сетевых интерфейсов для отказоустойчивости и балансировки нагрузки (Часть 2. Ubuntu server 16.04)

By | 09.12.2016

Доброго времени суток!

Сегодня, будет продолжение первой части статьи об агрегации (объединении) сетевых интерфейсов для отказоустойчивости и балансировки нагрузки, но на этот раз для ОС Ubuntu server 16.04 (2 сетевых интерфейса):

Данный цикл статей реализован в 3 частях, для 3 разных ОС

Часть 1. Windows server 2012

Часть 2. Ubuntu server 16.04

Часть 3. FreeBSD (Nas4Free)

 

Для начала, установим необходимые пакеты:

sudo apt-get install ifenslave ethtool

Отредактируем файл /etc/modules

sudo nano /etc/modules

и добавим туда следующие строки:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

loop
lp
rtc
bonding mode = 0 miimon = 100

Для 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, направленные в локальной системе в поисках выхода и перезаписывает исходный адрес сетевой карты с уникальным аппаратным адресом одного из интерфейсов в группе.

Далее останавливаем сетевую службу:

sudo service networking stop

Затем подгружаем в ядро системы модуль bonding

sudo modprobe bonding mode=0 miimon=100

Далее необходимо отредактировать файл сетевых настроек:

sudo nano /etc/network/interfaces

Закомментируем предыдущие значения сетевых настроек кроме source /etc/network/interfaces.d/*; auto lo; iface lo inet loopback и добавим свои значения в настройках виртуального интерфейса bond0: (обычно это те же параметры, что были в период подключения через 1 интерфейс (eth0))

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0
#iface eth0 inet static
#       address 192.168.0.100
#       netmask 255.255.255.0
#       network 192.168.0.0
#       broadcast 192.168.0.255
#       gateway 192.168.0.1
        # dns-* options are implemented by the resolvconf package, if installed
#       dns-nameservers 192.168.0.2 8.8.8.8
#       dns-search example.ru

# The bond0 network interface
auto bond0
allow-hotplug bond0
iface bond0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 129.168.0.2 8.8.8.8
dns-search example.ru
up /sbin/ifenslave bond0 eth0
up /sbin/ifenslave bond0 eth1

Сохраняем и закрываем файл. Далее запускаем сетевую службу:

sudo service networking start

После этого, подключаем сетевые кабели к интерфейсам и коммутатору, затем, перезагружаем ОС

sudo reboot

После перезагрузки, авторизуемся на сервере и проверяем скорость подключения виртуального интерфейса:

sudo ethtool bond0

В выводе смотрим параметр Speed (скорость):

Settings for bond0:
Supported ports: [ ]
Supported link modes: Not reported
Supported pause frame use: No
Supports auto-negotiation: No
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 200Mb/s
Duplex: Full
Port: Other
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
Link detected: yes

В нашем случае, скорость 200Mbit/s, в то время как ранее, до объединения сетевых интерфейсов, была всего 100Mbit/s, далее пробуем пропинговать как-нибудь из существующих ip-адресов Вашей сети, есть связь есть, значит bonding работает. Спасибо за внимание!

Поделиться!