UMGUM.COM (лучше) 

Linux Debian + LACP ( Агрегирование каналов c помощью LACP для сервера под управлением "Linux Debian/Ubuntu". )

4 октября 2011  (обновлено 31 января 2015)

OS: "Linux Debian/Ubuntu".
Apps: "ifenslave".

Задача: обеспечить высокий уровень надёжности передачи данных для серверов под управлением "Linux Debian/Ubuntu" вкупе с увеличением пропускной способности каналов.

В Linux агрегирование сетевых интерфейсов называется "бондингом". Управление агрегированием осуществляется с помощью утилиты "ifenslave", а работа, как таковая, с помощью модуля ядра "bonding".


Установим ifenslave:

# aptitude install ifenslave

Модуль "bonding" давно уже идёт в составе ядра, даже "ванильного". Для пробы загрузим модуль:

# modprobe bonding

В UNIX, если на ввод команды не последовало никакой реакции - значит хорошо (не случилось ничего плохого, о чём стоило бы сообщать). Проверим, на всякий случай:

# lsmod | grep bond

bonding    83808  0

Поддерживаются следующие режимы агрегирования:

1. "balance-rr" - (round-robin) - режим циклического выбора активного интерфейса для исходящего трафика (рекомендован для включения по умолчанию, не требует применения специальных коммутаторов);
2. "active-backup" - активен только один интерфейс, остальные в режиме горячей замены (самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов);
3. "balance-xor" - режим, в котором каждый получатель закрепляется за одним из физических интерфейсов, который выбирается по специальной формуле (не требует применения специальных коммутаторов);
4. "broadcast" - трафик идет через все интерфейсы одновременно (примитивный и потенциально конфликтный режим);
5. "802.3ad" - (dynamic link aggregation) - в группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);
6. "balance-tlb" - (adaptive transmit load balancing) - исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт);
7. "balance-alb" - (adaptive load balancing) - включает в себя balance-tlb, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).

В нашем случае есть все предпосылки для использования IEEE 802.3ad. Технология LACP (Link Aggregation Control Protocol, описывается стандартом IEEE 802.3ad) обеспечит нам контроль за состоянием физических "линков" и перераспределение с балансировкой трафика между доступными. Использование LACP потребует поддержки технологии обеими сторонами канала передачи данных, но предоставит самые лучшие возможности для применения из известных мне вариантов резервирования и балансирования.

"Бондинг" принято настраивать двумя способами: через определение параметров при загрузке модуля или при инициализации сетевого интерфейса. Второй способ мне нравится больше, хотя бы и потому, что все сетевые настройки будут собраны в одном месте.

На стороне Linux указываем параметры модуля, применяемые при поднятии интерфейса:

....
auto bond0
iface bond0 inet static
  address 192.168.1.2
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1
  dns-nameservers 192.168.1.1
  bond_mode 802.3ad
  bond_miimon 100
  bond_downdelay 200
  bond_updelay 200
  slaves eth0 eth1
  # Альтернативный способ управления подчинёнными интерфейсами
  # up /sbin/ifenslave bond0 eth0 eth1
  # down /sbin/ifenslave -d bond0 eth0 eth1
....

Надо понимать, что с активацией интерфейса bond0 интерфейсы eth0 и eth1 переводятся в особый подчинённый режим, полностью теряя свои собственные настройки и функциональность (потому конфигурацию физических интерфейсов можно удалить; хотя, можно и оставить на случай выхода из строя "бондинга"). Деактивируем задействованные в схеме интерфейсы и активируем агрегированный канал:

# ifdown eth0 eth1 bond0
# ifup bond0

Ясно, что пока сервер и коммутатор не настроены полностью на работу с агрегированием, не стоит подключать все "линки", ограничившись одним. Стандарт IEEE 802.3ad хорош уже и тем, что позволяет связанному оборудованию работать при минимально достаточных условиях, не требуя каких-то особых синхронных плясок на всех этапах налаживания взаимодействия; связь будет работать даже тогда, когда настроена только одна из сторон, что позволяет не прерывать предоставление сервиса в процессе настройки. Далее я буду приводить примеры вывода утилит уже после успешного согласования протоколов агрегирования.

Просматриваем статистику по агрегированному каналу:

# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
....

802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
....

Удостоверяемся в том, что агрегированный канал получил необходимую настройку, а физические интерфейсы переведены в подчинённое состояние:

# ifconfig

bond0 Link encap:Ethernet  HWaddr MAC
  inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
  UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
....

eth0  Link encap:Ethernet  HWaddr MAC
  UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
....

eth1  Link encap:Ethernet  HWaddr MAC
  UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
....

После подготовки сервера проведём аналогичные работы по агрегированию интерфейсов на стороне сетевого партнёра. Как сделать это для Cisco Catalyst я уже писал здесь.

Теперь можно передёргивать не только шнуры питания (как правило у серверов по два блока питания), но и провода подключения к коммутатору - связь не прервётся.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )