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 ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).
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
....
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
# 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
....
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
....
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 я уже писал здесь.
Теперь можно передёргивать не только шнуры питания (как правило у серверов по два блока питания), но и провода подключения к коммутатору - связь не прервётся.