В данной статье расскажем про возможности объединения сетевых интерфейсов в Linux  для обеспечения резервирования, отказоустойчивости и увеличения пропускной способности сетевых подключений. Скорее всего, вы уже слышали название в Linux – Bonding — интерфейс, а в Windows – TEAMingинтерфейс.

Типы агрегации (объединения) интерфейсов в Linux.

Для понимания вопроса ознакомимся с теорией. Интерфейсы Bonding являются виртуальными сетевыми интерфейсами, которые объединяют несколько физических сетевых интерфейсов для увеличения отказоустойчивости и пропускной способности канала. Различаются несколько типов объединения интерфейсов в Bond.

 1. mode=0 (balance-rr) или Round Robin

Если при настройке bond-интерфейса вы не указали параметр mode, то по умолчанию будет использоваться режим mode=0 (balance-rr), который обеспечивает балансировку нагрузки и отказоустойчивость.

Из названия Round Robin понятно, что в данном режиме пакеты отправляются «по кругу» от первого интерфейса к последнему и сначала, что решает вопросы отказоустойчивости и балансировки нагрузки., т.е. по очереди. При подключении bond-интерфейс в режиме balance-rr к коммутатору, на коммутаторе должно быть настроено статическое объединение портов (static port trunking).

2. mode=1 (active-backup)

В режиме Active-Backup активен только один сетевой интерфейс из двух объединённых. Второй интерфейс становится активным только в том случае, когда первый (активный) интерфейс перестает работать. Эта политика применяется для повышения отказоустойчивости, но не решает вопросы балансировки трафика интерфейсов; При такой политике MAC-адрес бонд-интерфейса виден снаружи только через один сетевой порт, во избежание появления проблем с коммутатором.

mode=2 (balance-xor)

В режиме XOR передача пакетов распределяется между сетевыми интерфейсами по формуле: ((«MAC-адрес источника» XOR «MAC-адрес назначения») % «число интерфейсов»). Получается,  один и тот же сетевой интерфейс передает пакеты одним и тем же получателям. Режим XOR применяется для балансировки нагрузки и обеспечения отказоустойчивости. При подключении bond-интерфейс в режиме balance-xor к коммутатору, на коммутаторе должно быть настроено статическое объединение портов (static port trunking).

3. mode=3 (broadcast)

В режиме Broadcast  (широковещательный трафик) происходит отправка всех сетевых пакетов через все интерфейсы, обеспечивая отказоустойчивость без балансировки. При подключении bond-интерфейс в режиме balance-broadcast к коммутатору, на коммутаторе должно быть настроено статическое объединение портов (static port trunking).

4. mode=4 (802.3ad)

В данном режиме используется протокол Link Agregation Control Protocol, LACP — IEEE 802.3ad.  Каждый LAG состоит из портов с одинаковой скоростью и установленной full-duplex операцией.

Это динамическое объединение портов, которое увеличивает пропускную способность, как входящего, так и исходящего трафика, используя все объединенные интерфейсы (без балансировки). Требуется поддержка режима LACP на коммутаторе и его настройка.

5. mode=5 (balancetlb) (Adaptive transmit load balancing)

При balance-tlb (Adaptive transmit load balancing) входящий трафик получается только активным интерфейсом, исходящий — распределяется в зависимости от текущей загрузки каждого интерфейса. Обеспечивается отказоустойчивость и распределение нагрузки исходящего трафика. Не требует специальной поддержки коммутатора.

6. mode=6 (balance-alb) (Adaptive load balancing)

Включает в себя режим mode=5 balance-tlb  плюс осуществляет балансировку входящего трафика. Не требует дополнительной настройки на коммутаторе. Балансировка входящего трафика достигается путем ARP-переговоров. Драйвер перехватывает ARP-ответы, отправляемые с локальных сетевых карт наружу, и переписывает MAC-адрес источника на один из уникальных MAC-адресов сетевой карты, участвующей в объединении. Таким образом, различные пиры используют различные MAC-адреса сервера. Балансировка входящего трафика распределяется последовательно (round-robin) между интерфейсами.

Перейдем к настройке режимов на Linux, в котором рассмотрим пример объединения физических интерфейсов eth1, eth2 в bonding интерфейс с протоколом LACP (mode=4 (802.3ad)):

Настройка Bonding-интерфейса.

1. В первую очередь установим пакет “ifenslave”, который необходим для boniding, вводим команду:

# apt-get install ifenslave

2. Отключим физические интерфейсы, которые мы собираем в Bond0-интерфейс:

# ifdown eth0 eth1
# /etc/init.d/networking stop

Или

# ifconfig eth0 eth1 down
# /etc/init.d/networking stop

3. Далее переходим к редактированию файла конфигурации сетевого интерфейса /etc/network/interfaces. Приводим его к следующему виду:

auto bond0
iface bond0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.254
bond-slaves eth0 eth1
bond-mode active-backup
bond-miimon 100
bond-downdelay 200
bond-updelay 200

Объяснимся по содержанию конфигурационного файла bond интерфейса

address <IP адрес> – IP адрес логического интерфейса bond0;

netmask <маска> – сетевая маска для IP адрес логического интерфейса;

mtu <значение> – параметр для задания MTU интерфейса; значение по умолчанию – 1500; при изменении MTU интерфейса bond0 меняется MTU и объединяемых интерфейсов eth1 и eth2;

slaves <интерфейсы> – имена физических интерфейсов, объединяемых в агрегированный канал;

bond_mode <тип>– настройка, отвечающая за протокол, который обеспечивает работу агрегации каналов (в данном примере – это LACP, который основан на стандарте 802.3ad);

bond_miimon <интервал> – параметр, определяющий интервал времени в миллисекундах. Через заданное время будет происходить проверка физических интерфейсов на их доступность;

bond_downdelay <интервал> —  время (в миллисекундах) задержки перед отключением интерфейса, если произошел сбой соединения. Эта опция действительна только для мониторинга MII (miimon). Значение параметра должно быть кратным значениям miimon.

bond_updelay <интервал> — время задержки в миллисекундах, перед тем как поднять канал при обнаружении его восстановления. Этот параметр возможен только при MII-мониторинге (miimon). Значение параметра должно быть кратным значениям miimon.

bond_xmit_hash_policy <интервал> – параметр, определяющий уровень (в соответствии с эталонной моделью OSI), на котором будет происходить вычисление хеш-функции для последующей балансировки трафика.

Введем команды, которые отключат интерфейсы eth1, eth2 и активируем bond0:

# ifdown eth1 eth2
# ifup bond0

4. Перезапускаем службу networking:

service networking restart
service networking start

5. Для проверки работы bond0 введите команду:

ip a

Для отображения интерфейсов и их настроек и команду:

more /proc/net/bonding/bond0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.