Hi,
В терминах Linux, агрегация нескольких сетевых ethernet интерфейсов в один называется bonding, в
терминах Cisco, тоже самое называется EtherChannel (FastEtherChannel, GigabitEtherChannel и т.д.).
Опишу процесс поднятия агрегированного интерфейса под Debian (не составит труда адаптировать эту
конфигурацию на Slackware), ну и приведу кусок конфигурации коммутатора Cisco, с которым дружится
наш агрегированный сетевой интерфейс.
1. Устанавливаем софт.
Что бы бондинг заработал нужно два компонента: юзер-спейс утилита ifenslave и модуль ядра bonding.
Установка ifenslave:
aptitude --assume-yes install ifenslave
Модуль bonding - ванильный и есть в дистрибутивном ядре. Если ядро само-сборное и из него всё выброшено,
включая bonding, -- пересобирайте ядро полностью, или скомпилируйте только нужный модуль, кому как
нравится.
2. Настройка режима работы и опции модуля.
В моем случае бондинг работает как в режиме резервирования одной одной из сетевых карт, без
распределения нагрузки между ними (mode=1), так и в режиме балансировки нагрузки (mode=balance-rr)
Режим работы задается параметром модуля, при его загрузке. Можно описать параметры
непосредственно при поднятии интерфейса, а можно и алиасом (но в моём случае, все же, все
прописано в одном месте, см. ниже ):
cat >> /etc/modprobe.d/aliases
alias bond0 bonding
options bond0 mode=1 miimon=100
Вот коротко о параметрах:
options bond0 mode=2, где mode=
0 - balance-rr (Round-robin выбор интерфейса)
1 - active-backup (работает только один интерфейс, остальные в режиме горячей замены)
2 - balance-xor - для всех пересылок на MAC закрепляется один из интерфейсов
3 - broadcast - трафик идет через оба интерфейса одновременно
4 - 802.3ad - для коммутаторов с поддержкой IEEE 802.3ad Dynamic link aggregation
5 - balance-tlb,
6 - balance-alb
3. Настройка интерфейса.
(редактируем /etc/network/interfaces)
a). Случай резервирования сетевой карты:
auto bond0
iface bond0 inet manual
up modprobe bonding -o bond0 mode=1 miimon=100
up ifconfig bond0 10.10.10.1 netmask 255.255.255.0
up ifenslave bond0 eth0 eth1
down ifenslave -d bond0 eth0 eth1
down ifconfig bond0 down
down rmmod bonding
В этом случае каждый физический интерфейс имеет смысл подключить к разным коммутаторам,
что бы еще и подстраховаться на случай выхода из строя одного из коммутаторов (ну или отключения
питания на нём и т.п.) При этом каждый из портов коммутатора, в которых живет сервер, настраивается
как обычный "access" порт, _не_ etherchannel (!)
б) Пример балансировки нагрузки c целью увеличения пропускной способности интерфейса:
auto bond0
iface bond0 inet manual
up modprobe bonding -o bond0 mode=balance-rr miimon=100 downdelay=400 updelay=400
up ifconfig bond0 0.0.0.0
up ifenslave bond0 eth0 eth1
down ifenslave -d bond0 eth0 eth1
down ifconfig bond0 down
down rmmod bonding
auto vlan39
iface vlan39 inet static
address 10.10.10.1
netmask 255.255.255.0
gateway 10.10.10.100
vlan_raw_device bond0
PS: для поднятия вланов на Debian нужно установить пакет vlan и должен быть доступен модуль 8021q.
Со стороны Cisco -коммутатора:
interface range GigabitEthernet1/7 - 8
switchport trunk encapsulation dot1q
switchport mode trunk
load-interval 30
spanning-tree bpdufilter enable
spanning-tree bpduguard enable
channel-group 1 mode on
!
interface Port-channel1
switchport
switchport trunk encapsulation dot1q
switchport mode trunk
load-interval 30
Дополнительная информация:
1. modinfo bonding
2. less /usr/src/linux/Documentation/networking/bonding.txt
3.
http://www.linuxfoundation.org/en/Net:Bonding4.
Cisco EtherChannel Technology5.
google.com