Ivanovo Linux Users Group - Not logged in
Forum Help Search Login
Previous Next Up Topic Администрирование / Работа с сетью / Port aggregation (34871 hits)
- By cutter Date 28.11.08 14:19
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:Bonding
4. Cisco EtherChannel Technology
5. google.com
Parent - By Bercut Date 28.11.08 14:37
да слона то я и не приметил...

а где рулесы udev ??
меня они в первую очередь интересуют
русский язык подобен искуству кун-фу, и великий мастер никогда не применит его без необходимости...
Parent - By cutter Date 11.12.08 07:31

> Да, конечно, я постоянно работаю с этим и пока не было ни одного нарекания.
> С бондингом у меня работает около 300 серверов, и вылетания интерфейсов из связки ни когда не наблюдал.
> А если это и происходит в следствии кривого именования устройств, то надо тормошить udev


У меня не было проблем с и именованием интерфейсов и последующим их вылетанием из связки.

> да слона то я и не приметил...


> а где рулесы udev ??
> меня они в первую очередь интересуют


Высосать из пальца правила udev и вставить их для декорации?
cat > /etc/udev/rules.d/75-network-devices.rules
KERNEL=="eth?", ATTR{address}=="00:15:17:20:9e:46", NAME="eth0"
KERNEL=="eth?", ATTR{address}=="00:15:17:20:9e:47", NAME="eth1"

И после этого, на этой машине, почти любые манипуляции не приведут к некорректному именованию интерфейсов.
Карточка с мак-адресом 00:15:17:20:9e:46 всегда будет eth0, а 00:15:17:20:9e:47 -- eth1. Но это не переносимая конфигурация.
Если скопировать диски и вставить в другой сервер, то интерфейсы начнут именоваться с eth2, соответственно, в
bonding с прежним конфигом они не вставятся.
Parent - By Bercut Date 11.12.08 07:35
вощем не пойдет
читай мой предыдущий пост
который пока крайний с низу
русский язык подобен искуству кун-фу, и великий мастер никогда не применит его без необходимости...
Parent By cutter Date 11.12.08 07:43
Опиши свою проблему полностью. По-русски. Предложения начинаются
с заглавной буквы и закнчиваются точкой.  Иначе читать не буду :-)
Parent - By Bercut Date 10.12.08 16:24
ну дык и всеже по какому атрибуту привязываются имена сетевух, ась?
русский язык подобен искуству кун-фу, и великий мастер никогда не применит его без необходимости...
Parent - By LOE (Site/forum admin) Date 11.12.08 05:40
Осмелюсь предположить, что в настройке bond интерфейса:
        up ifenslave bond0 eth0 eth1
        down ifenslave -d bond0 eth0 eth1
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By Bercut Date 11.12.08 07:19
да не,
не в етом вопрос
вопрос в том, какой из этих атрибутов
udevinfo -a -p /class/net/eth1

  looking at device '/class/net/eth1':
    KERNEL=="eth1"
    SUBSYSTEM=="net"
    DRIVER==""
    ATTR{weight}=="64"
    ATTR{tx_queue_len}=="1000"
    ATTR{flags}=="0x1002"
    ATTR{mtu}=="1500"
    ATTR{operstate}=="down"
    ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
    ATTR{address}=="00:13:20:xx:xx:xx"
    ATTR{link_mode}=="0"
    ATTR{type}=="1"
    ATTR{features}=="0x113a9"
    ATTR{ifindex}=="3"
    ATTR{iflink}=="3"
    ATTR{addr_len}=="6"

уникален физически, чтобы можно было по нему именовать интерфейс
а то по маку не получается потому как именно он после
up ifenslave bond0 eth0 eth1
и меняется
сответственно после
down ifenslave -d bond0 eth0 eth1
второй раз up не сделаеш

есть мысль что эти атрибуты 
  ATTR{ifindex}=="3"
  ATTR{iflink}=="3"
но пока поперетыкал из слота в слот поперезагружал
и системы не заметил ... :-(
русский язык подобен искуству кун-фу, и великий мастер никогда не применит его без необходимости...
Parent - By Bercut Date 16.12.08 11:22
нда,
вощем как всегда, орать на перекрестке и меряться винчестерами, это можно.
а на сверхконкретный вопрос... а в ответ тишина...
вощем фигня это все... мультики -- это тема ;-)
русский язык подобен искуству кун-фу, и великий мастер никогда не применит его без необходимости...
Parent - By cutter Date 17.12.08 19:46
К чему все танцы с udev? Я не вижу где именно у тебя начинаются грабли.
Покажи ситуацию в которой bonding встаёт не в ту позу, в которую надо.
Parent - By Bercut Date 18.12.08 07:55
что из выше сказанного
--//а то по маку не получается потому как именно он после
up ifenslave bond0 eth0 eth1
и меняется
сответственно после
down ifenslave -d bond0 eth0 eth1
второй раз up не сделаеш//--
не понятно, если всё, то про 300 хостов я чет сомневаюсь
русский язык подобен искуству кун-фу, и великий мастер никогда не применит его без необходимости...
Parent By cutter Date 18.12.08 08:10
Про то, что мак-адрес на всех сетевых картах, после сборки их в bond, заменяется на один, я знаю.
Но когда у тебя разваливается или не собирается или не работает bond в следствии некорректного
именования сетевых карт (eth?), в какой ситуации, что-то я понять и увидеть не могу. Да похоже ты
и сам не можешь :-)
Previous Next Up Topic Администрирование / Работа с сетью / Port aggregation (34871 hits)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.075s with 11 database queries.