В данной статье расскажем про возможности объединения сетевых интерфейсов в 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 (balance—tlb) (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