Пользователь
0,0
рейтинг
25 апреля 2009 в 00:29

Администрирование → Объединение сетевых интерфейсов в linux

Так уже получилось что писал статью для howtoforge. И естественно тут же все это оказалось в русском варианте на других сайтах. Только вот незадача: в статье были допущены неточности, и публицисты с других «сайтов» вставили as-is.
Хочу попробовать исправить это оплошность.
Для чего это надо?
Объясню на примере: был у меня фтп с 2мя сетевыми картами, но использовалась одна. Со временем весь 1Гб/с начал забиваться по вечерам — и людям плохо, и у меня iowait растет. Но есть вторая сетевая карта. Так вот такое объединение позволит использовать 2 (3, 4, 5...) как одну с 2Гб/с.
Но это не «потолок», вот полный список режимов:
mode=0 (balance-rr)
Последовательно кидает пакеты, с первого по последний интерфейс.
mode=1 (active-backup)
Один из интерфейсов активен. Если активный интерфейс выходит из строя (link down и т.д.), другой интерфейс заменяет активный. Не требует дополнительной настройки коммутатора
mode=2 (balance-xor)
Передачи распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.
mode=3 (broadcast)
Все пакеты на все интерфейсы
mode=4 (802.3ad)
Link Agregation — IEEE 802.3ad, требует от коммутатора настройки.
mode=5 (balance-tlb)
Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Не требует настройки коммутатора.
mode=6 (balance-alb)
Тоже самое что 5, только входящий трафик тоже распределяется между интерфейсами. Не требует настройки коммутатора, но интерфейсы должны уметь изменять MAC.
Настройка
Очень простая. Вы выбираете режим, втыкаете в коммутатор второй кабель.
Дальше в зависимости от системы, я делал это на Debian Lenny
#apt-get install ifenslave-2.6
Дальше есть 2 варианта:
Вариант №1 Подправить /etc/network/interfaces к примеру так.
iface bond0 inet static
address 10.0.1.5
netmask 255.255.255.0
network 10.0.1.0
gateway 10.0.1.254
up /sbin/ifenslave bond0 eth0 eth1
down /sbin/ifenslave -d bond0 eth0 eth1

и подправить /etc/modprobe.d/arch/i386 примерно так
alias bond0 bonding
options bonding mode=5 miimon=100 downdelay=200 updelay=200

Естественно указать свой режим и настройки сети.
# update-modules
# ifdown eth0 eth1
# ifup bond0
# /etc/init.d/networking restart

Вариант №2 Все настройки через /etc/network/interfaces
iface bond0 inet static
address 10.0.1.5
netmask 255.255.255.0
network 10.0.1.0
gateway 10.0.1.254
bond_mode balance-tlb
bond_miimon 100
bond_downdelay 200
bond_updelay 200
slaves eth0 eth1

Сохраняем и пишем:
update-modules
# ifdown eth0 eth1
# ifup bond0
# /etc/init.d/networking restart

После этого должен появится один интерфейс bond0. Далее можно плодить интерфейсы bon0:0 и т.д.
UPD: Перенес из своего блога в нужный
UPD 2: Спасибо infotim, за правки.
Дмитрий @AccessForbidden
карма
7,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (42)

  • +5
    Вариант №1

    Устарел. Неправилен из-за правки конфигов в двух местах.

    Вариант №2
    Ребут.

    Не надо ребут. Совсем. :)

    # ifdown eth0 eth1
    # /etc/init.d/networking restart

    Этого достаточно.
    • 0
      2ой вариант не будет работать в debian etch. А по поводу ifdown я думал, но почему то передумал…
      • –10
        ололо, сверхгибкие никсы требуют перезагрузки после изменения конфигурации сетевого интерфейса??
        • 0
          Опять? Можно пример? :)
        • –2
          Нормальные никсы (Gentoo) требуют перезагрузки только после изменения ядра.
          Так что винда опять в отсосе, тролль.
      • 0
        2ой вариант не будет работать в debian etch.

        Etch всё-таки oldstable. Lenny давненько вышел. Можно пренебречь, я считаю.

        А по поводу ifdown я думал, но почему то передумал…

        Make sure to shutdown each of your slave interfaces using ifconfig (ifup will not
        work, as it refers to /etc/network/interfaces for interface config info which won't be
        there any more).

        Из комментариев к этому. Вполне логично.
        • 0
          Логично, я поправил — просто раньше мне почему то казалось что ребут это намного проще. Потом вспомнилось как на меня ругались когда я ребутал :)
          • 0
            После перезагрузки должен появится один интерфейс bond0.

            Поправьте уж окончательно. Не надо перезагрузки. :)
  • +1
    /etc/network/interfaces а в федоре к примеру этого нету

    вообщето у всех методов меняющих маки есть проблемы с общением с коммутаторами. Так как коммутатор маршрутизирует пакет по маку, то на части коммутаторов это будет безбожно глючить, на части коммутаторов тормозить, на части коммутаторов будут отключаться оба порта потомучто он решит что это макспуф.
  • 0
    thanks
    Как раз недавно появилась необходимость разобраться с такой возможностью.
  • 0
    оригинальный способ перенести статью из личного блога в тематический :)
    я уж думал у меня дежавю.
    • 0
      Ну пришлось так сделать, ибо когда появилась карма и я перенес, статья оказалась на 5ой станице.
  • +7
    А что у вас за конфигурация сервера (какие hd, сколько) и какой ftp-сервер? Мне очень интересно, как вы смогли забить 1Гб и не сдулись винты.
    • 0
      RAID5 на 3-х Seagate Barracude 750GB на хардварном 3Ware RAID-контроллере вполне сносно забивает 1Гбит/сек, а это не далеко не супер-дорогая конфигурация.

      Но чисто из спортивного интереса, я бы посмотрел на конфиг автора.
    • 0
      Кстати, ответ от автора появился ниже — я не заметил сразу.
  • +2
    я очень удивлен. интересен конфиг сервера, ПО и фс. не представляю как с обычного китайского писюка без фанатичных страйпов из гирлянды винтов выжать хотя бы пол гигабита…
    • +3
      Отвечаю на оба вопроса сразу — все дело исключительно в raid контроллере Areca. Стоил он 2-3 года назад в районе 3000$. Модель сейчас точно не скажу но это 24 портовое чудо с 2Гб оперы на борту + своя сетевуха для управления контроллером. Вот и все — остальное по части железа ничем не выдается — винты WD 5000ABYS и YS (Raid edition), мать supermicro, pentium d 3.0, 4 Gb оперы
      Сейчас конечно уже не так качают как зимой, но 1ГБ/с выжимает.
      P.S ПО — debian, vsftpd, microdc2.
      • 0
        А можно попросить еще немного конкретики?
        Какой у вас характер контента? средний размер файлов, характер доступа к нему. Сколько винтов и какой уровень их загрузки при раздаче на скорости 1Гб.
        Если не сложно, конечно ;)
        • 0
          Сетевая файлопомойка — фильмы, образы игр, музыка — всего пока 8ТБ. Средний размер файла наверно 1Гб. Характер доступа не совсем ясно что имеется ввиду — но все же попробую на вскидку — файл индексируется на медиа портале, директории на фтп закрыты на листинг — то есть все файлы анонсированы только на одно ресурсе + поддержка для людей в dc++ — доступ к файлам возможен только по TTH. Винтов 24 + 1 системный. Марки указаны выше. Уровень загрузки можно посмотреть только воткнувшись в контроллер — сейчас удаленно это сделать нереально, ответить не могу.
          • 0
            Спасибо за подробности.
            Ну для фильмов и на 24-винтах такие скорости вполне нормальны. Думаю это еще не предел.
            А под характером доступа имеется в виду следующее: например, либо абсолютно случайный доступ к большому количеству контента, либо большая часть запросов к одному и тому же контенту. Что дает возможность эффективно его закешировать в оперативке и снизить нагрузку на винты.
  • –1
    Вот почему бы было не погуглить и не дополнить руководство версией под другие дистрибутивы?
    • +2
      Потому что на других дистрибутивах я проверить все равно не смогу.
    • 0
      Статья содержит достаточно для самостоятельного поиска. :)
  • 0
    Соответственно, с двумя разными провайдерами это тоже работает без проблем?

    Эх… хочу такое на своем ASUS WL500gP настроить. :)
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        А иначе никак? Просто автоматом делить трафик в зависимости, скажем, от IP получателя?
        • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            Ну я имею в виду такую схему:
            есть два интерфейса, например 82.143.55.55 и 15.66.44.66

            По одному из них идет весь обмен только с IP, например, 1.x.x.x — 125.x.x.x, а по второму — с IP 126.x.x.x — 254.x.x.x
            • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          • 0
            Спасибо, надо углубиться в премудрости роутинга. :)
    • 0
      Вам нужно слегка другое — а именно роутер в двумя wan портами. А свой gP можно даже сейчас в легкую продать почти за теже деньги.
      • 0
        У него есть возможность один из LAN-портов отдать под WAN. Надо форум Олега помучать, где-то вроде было подобное…
  • 0
    Такая штука работает.
    Но когда я на своем сервере в ДЦ из двух портов 100 мбит сделал 200 мбит, все стало, конечно, быстро, но оказалось, что оба патчкорда были воткнуты в один свич, а на свиче не была включена поддержка бондинга, в итоге свич подыхал от процессорной нагрузки, так что будьте аккуратнее :)
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Это да. Но провайдеры от такого руками и ногами отмахиваются :) С ними проще на гигабит договориться, что я и сделал :)
    • 0
      Позор тому ДЦ у которого свичи валятся от бондинга. Я тестировал на dell powerconnect 3324, стоит порядка 100$ — без дополнительной настройки, режим 5. Все хорошо.
      • 0
        Они не валятся, они попросили так не делать без предупреждения :)
  • 0
    а как с нагрузкой? какие-нибудь сиснтеминтерптсы стали расти или софтдемон какой жрать цп? что-то не верится, что все это работает на добром слове так хорошо
  • 0
    img237.imageshack.us/img237/9562/ftprybatskoenetcpuday.png
    Загрузка в картинках. В основном замес начинается когда на рейде остается меньше 6-7 процентов свободного места. Растет iowait.
  • 0
    Обычный коммутатор без поддержки транкинга не подойдет, да?
  • 0
    В статье не упомянут один очень важный параметр настройки бондинга — xmit_hash_policy

    xmit_hash_policy — Определяет хэш политику передачи пакетов через объединенные интерфейсы в режиме balance-xor или 802.3ad.
    Возможные значение:

    layer2 Использует только MAC адреса для генерации хэша. При этом алгоритме трафик для конкретного сетевого хоста будет отправляться всегда через один и тот же интерфейс. Алгоритм совместим с 802.3ad.
    Формула расчёта хэша:
    (source MAC XOR destination MAC) modulo slave count

    layer2+3 Использует как MAC адреса так и IP адреса для генерации хэша. Алгоритм совместим с 802.3ad.
    Формула расчета хэша:
    (((source IP XOR dest IP) AND 0xffff) XOR ( source MAC XOR destination MAC )) modulo slave count

    layer3+4 Используется IP адреса и протоколы транспортного уровня (TCP или UDP) для генерации хэша. Алгоритм не всегда совместим с 802.3ad, так как в пределах одного и того же TCP или UDP взаимодействия может передаваться как фрагментированные так и не фрагментированнные пакеты. В фрагментированных пакетах порт источника и порт назначения отсутствуют. В результате в рамках одной сессии пакеты могут дойти до получателя не в том порядке (так как отправляются через разные интерфейсы). Некоторое оборудование, совместимое с 802.3ad может некорректно отработать такую ситуацию.
    Формула расчета хэша:
    ((source port XOR dest port) XOR ((source IP XOR dest IP) AND 0xffff) modulo slave count

    посмотреть какой режим сейчас можно так — cat /sys/devices/virtual/net/bond0/bonding/xmit_hash_policy
    пример настройки через /etc/network/interfaces:
    auto bond0
    iface bond0 inet static
    address 123.123.123.123
    gateway 123.123.123.1
    netmask 255.255.255.0
    mtu 9000
    bond-mode 802.3ad
    bond-miimon 100
    bond-lacp-rate 1
    bond-slaves none
    bond-xmit-hash-policy 1
    dns-nameservers 8.8.8.8 8.8.4.4

    ссылки:
    1
    2

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.