Доброго времени суток!
Сегодня, будет продолжение первой части статьи об агрегации (объединении) сетевых интерфейсов для отказоустойчивости и балансировки нагрузки, но на этот раз для ОС Ubuntu server 16.04 (2 сетевых интерфейса):
Данный цикл статей реализован в 3 частях, для 3 разных ОС
Для начала, установим необходимые пакеты:
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 работает. Спасибо за внимание!