30
ноября
1

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



Для обеспечения отказоустойчивости и повышения пропускной способности сетевых интерфейсов сервера используется агрегация линков, так называемый bonding. Эта технология позволяет объединить два или более физических сетевых интерфейсов в один виртуальный.

Настройку бонда произведем на примере RedHat 6.5. Переходим в директорию /etc/sysconfig/network-scripts/ и создаем файл ifcfg-bond0 c соответствующими настройками:

[root@test ~]# cd /etc/sysconfig/network-scripts/
[root@test ~]# vim ifcfg-bond0

DEVICE="bond0"
BOOTPROTO="none"
ONBOOT="yes"
NM_CONTROLLED="no"
IPADDR="192.168.10.10"
NETMASK="255.255.255.0"
BONDING_OPTS="mode=1 miimon=100"

Также необходимо сконфигурировать интерфейсы бонда, в нашем примере это будут eth0 и eth1. Необходимо добавить параметры MASTER = и SLAVE = в их конфигурационные файлы:

[root@test ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=2C:44:FD:7A:9D:B0
TYPE=Ethernet
UUID=646896be-47f1-4947-bb01-dc7e14e2e25d
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

[root@test ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=2C:44:FD:7A:9D:B1
TYPE=Ethernet
UUID=84f6480f-91a9-43e6-b10b-09a5a4fef598
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

Рассмотрим более подробно некоторые параметры конфигурационного файла бонда. Существует 7 режимов работы бонда (параметр mode в нашем примере равен 1 — active-backup):

mode=0 — Round robin
Этот режим позволяет расширить пропускную способность канала.
mode=1 — Active-backup
Работает только один интерфейс, при выходе из строя основного, автоматически подключает резервный взамен отказавшего.
mode=2 — XOR
Исключение. Режим, в котором физический интерфейс для передачи пакета рассчитывается по формуле «(src hw addr XOR dst hw addr) % slave cnt», где «src hw addr» и «dst hw addr» — MAC-адреса отправителя и получателя, а slave – число работающих физических интерфейсов. Интерфейс отправляющий пакет зависит от MAC адреса получателя, соответственно каждый физический сетевой интерфейс отправляет пакеты только определенной группе MAC адресов всего адресного пространства сети, благодаря чему происходит равномерное распределение нагрузки.
mode=3 — Broadcast
Вещание. Все пакеты передаются на все интерфейсы. Этот режим обеспечивает отказоустойчивость.
mode=4 — 802.3ad
Агрегация каналов (IEEE 802.3ad Dynamic link aggregation). В группу объединяются одинаковые по скорости и дуплексному режиму интерфейсы. Все интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad. Коммутатор может потребовать дополнительной настройки.
mode=5 — balance-tlb
Адаптивная балансировка передачи (Adaptive transmit load balancing). Не требует применения специальных коммутаторов. Исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах. Для данного режима необходима его поддержка в драйверах сетевых карт.
mode=6 — balance-alb
Адаптивная балансировка (Adaptive load balancing). Включает в себя balance-tlb плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов. Балансировка на приём достигается на уровне протокола ARP. Драйвер перехватывает ARP ответы локальной системы и, в зависимости от загрузки, перезаписывает физический адрес на адрес одного из сетевых интерфейсов.

Существуют два способа диагностирования (мониторинга) связанности бонда:

— с помощью статуса Media Independent Interface (MII);
— с помощью ARP-запросов и ответов.

Первый способ мониторинга задается с помощью параметра miimon:
miimon — определяет как часто производится мониторинг MII. 0 – мониторинг отключён (используется по-умолчанию). Рекомендуемое значение 100 мс. Он определяет есть ли активный линк на сетевой карте. Для того, чтобы определить поддерживает ли драйвер сетевой карты этот параметр необходимо выполнить команду:

[root@test ~]# ethtool eth0 | grep "Link detected:"

Если поддержка MII есть, то команда вернет:

Link detected: yes

Именно это состояние и проверяется с указанным интервалом (например, 100 мс).

У данного способа мониторинга есть ограничения. Давайте рассмотрим следующую топологию.

bonding

Компьютер ‘A’ имеет два физических интерфейса и их подключения обозначены как 1 и 2 соответственно. Они связаны с независимыми коммутаторами Ethernet с целью резервирования и высокой доступности. Эти коммутаторы подключены во внешнюю сеть (подключение обозначены как 3 и 4 соответственно), которая может быть корпоративной сетью или Интернетом.

У компьютера ‘A’ с bond0 есть активный интерфейс eth0, который взаимодействует  с внешней сетью, как показано на рисунке.

Сценарий 1: Когда линк №1 выйдет из строя, драйвер бонда через заданный период времени обнаружит это и активирует интерфейс eth1. Сервис будет восстановлен.
Сценарий 2: Когда линк №3 выйдет из строя, то драйвер бонда ничего об этом не узнает, так как два его физический интерфейса будут работоспособными. Доступа во внешнюю сеть не будет.

Для решения это проблемы используется ARP-мониторинг, который задается параметрами arp_ip_target и arp_interval:
arp_interval — с какой периодичностью в миллисекундах осуществлять ARP-мониторинг. Значение 0 — ARP-мониторинг выключен.
arp_ip_target — IP-адрес, по которому осуществлять ARP-мониторинг (в случае если значение arp_interval больше 0). Если с данного адреса нет ARP-ответов, значит канал, по которому посылались запросы, не работает.

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

[root@test ~]# service network restart

или

[root@test ~]# /etc/init.d/network restart

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

[root@test ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
ARP Polling Interval (ms): 200
ARP IP target/s (n.n.n.n form): 192.168.10.1

Slave Interface: eth0
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 1
Permanent HW addr: 2c:44:fd:7a:9d:b0
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 2c:44:fd:7a:9d:b1
Slave queue ID: 0

Параметра бонда также можно редактировать без выгрузки (и перезагрузки) модуля бонда из ядра с помощью редактирования файлов sysfs файловой системы. Это может быть полезно для тестирования различных параметров бонда. Sysfs это виртуальная файловая система, которая представляет объекты ядра как каталоги, файлы и символические ссылки. Sysfs может использоваться для запроса информации об объектах ядра, а также может управлять этими объектами с помощью обычных команд файловой системы. Виртуальная файловая система sysfs прописана в /etc/fstab и смонтирована в директорию /sys/ . Все имеющиеся бонды можно настроить динамически редактирую файлы в директории /sys/class/net/

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

[root@test ~]# cat /sys/class/net/bonding_masters
bond0

Перед конфигурацией бонда его надо деактивировать:

[root@test ~]# ifconfig bond0 down

Далее редактируем файлы соответствующего бонда. Например, установим режим бонда в «round robin» (mode=0):

[root@test ~]# echo 0 > /sys/class/net/bond0/bonding/mode

После тестирования и определения наилучших параметров для бонда их необходимо записать в конфигурационные файлы /etc/sysconfig/network-scripts/, как это было рассмотрено в начале статьи.

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

Понравилась статья?
Подписаться на RSS feed
Один комментарий:
  1. k_mikhail 7 января, 2016

    Спасибо за доступно изложенный материал! Вопрос — не могли бы Вы сделать аналогичный обзор по VRRP (Virtual Router Redundancy Protocol)? Ибо похожая технология, но немного иная, и в ядро не включённая. Но в ней есть такие вещи, как указание приоритета каждого из интерфейсов, назначение id и.т.п. Просто иногда путаешься в похожих в своём предназначении технологиях. Спасибо!

Оставить комментарий