агрегация сетевых интерфейсов
Объединение нескольких жестких дисков для повышения производительности и надежности является широко распространенной практикой. В то же время многими администраторами незаслуженно забыта такая полезная вещь, как агрегация сетевых интерфейсов. Эта методика позволяет объединить несколько сетевых интерфейсов в один. В ОС Linux за ее реализацию отвечает драйвер «bonding».
Итак, первое, что вам понадобится для агрегации — это два сетевых интерфейса. Довольно часто можно встретить серверы с двумя сетевыми картами: одной встроенной и одной платой расширения. Для начала надо убедиться, что Linux видит обе карты. Для этого запустите ifconfig и проверьте, есть ли в списке eth0 и eth1. Если в списке присутствуют не все интерфейсы, проверьте, загружены ли необходимые модули ядра.
Установите пакет ifenslave (далее речь пойдет о дистрибутиве Debian и ifenslave-2.6).
Перед тем как приступить к работе, убедитесь, что драйвер «bonding» скомпилирован для вашего ядра. Попробуйте выполнить modprobe bonding. Если все в порядке, эта команда загрузит драйвер. Если же этого не произойдет, вам придется наведаться в конфигурацию ядра, в раздел «Device Drivers» и включить «Bonding driver support» модулем.
Количество опций слишком велико, чтобы описывать все в статье, поэтому за подробностями отправляем читателя смотреть файл Documentation/networking/bonding.txt, который поставляется с исходными кодами ядра Linux. Опции передаются модулю как параметры при загрузке. Первая опция определяет имя объединенного интерфейса, например, bond0. Необходимо также указать метод, с помощью которого драйвер будет осуществлять мониторинг состояния соединений и обнаруживать сбои. Метод MII (Media Independent Interface) неплохо зарекомендовал себя. Еще одна опция — mode, указывает драйверу, по каким правилам выбирать интерфейс для передачи пакетов. Также необходимо указать машине, как обрабатывать полученные пакеты. Каждая сетевая плата имеет свой собственный MAC-адрес. Машина, передающая пакет, должна указать адрес получателя. Для того чтобы использовать оба интерфейса для приема пакетов, вам понадобится умный Ethernet-коммутатор, или же вам придется перекрыть ARP. При написании статьи автор использовал режим balance-alb (перекрытие ARP). Подробнее об опциях можно почитать в вышеуказанном файле.
Когда драйвер установлен, необходимо настроить его автоматическую загрузку при запуске компьютера. Сделать это можно с помощью утилиты module- init-tools. Также необходимо указать опции. Например:
alias bond0 bonding
options bond0 mode=balance-alb miimon=100
Этим задается имя bond0 для интерфейса, режим работы balance-alb и мониторинг MII каждые 100 миллисекунд.
Bond0 настраивается с помощью ifconfig точно так же, как если бы вы настраивали обычный интерфейс. Например:
ifconfig bond0 123.123.123.4 netmask 255.255.255.0 up
Наконец, необходимо добавить «подчиненные» сетевые интерфейсы:
ifenslave bond0 eth0 eth1
Если все в порядке, интерфейс bond0 должен заработать. Чтобы интерфейс автоматически запускался при загрузке ОС, запустите ifenslave из /etc/network/interfaces с ключом up. Вот пример того, что получилось у автора (реальные IP-адреса в целях безопасности заменены на «xxx»):
auto bond0
iface bond0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.255.0
network xxx.xxx.xxx.0
broadcast xxx.xxx.xxx.255
gateway xxx.xxx.xxx.1
up /sbin/ifenslave bond0 eth0 eth1
Итак, теперь все готово и настало время тестирования. Попробуйте запустить ping, отключите по очереди сетевые кабели и наслаждайтесь результатом.
OPK, перевод Дмитрия Герусса.
Итак, первое, что вам понадобится для агрегации — это два сетевых интерфейса. Довольно часто можно встретить серверы с двумя сетевыми картами: одной встроенной и одной платой расширения. Для начала надо убедиться, что Linux видит обе карты. Для этого запустите ifconfig и проверьте, есть ли в списке eth0 и eth1. Если в списке присутствуют не все интерфейсы, проверьте, загружены ли необходимые модули ядра.
Установите пакет ifenslave (далее речь пойдет о дистрибутиве Debian и ifenslave-2.6).
Перед тем как приступить к работе, убедитесь, что драйвер «bonding» скомпилирован для вашего ядра. Попробуйте выполнить modprobe bonding. Если все в порядке, эта команда загрузит драйвер. Если же этого не произойдет, вам придется наведаться в конфигурацию ядра, в раздел «Device Drivers» и включить «Bonding driver support» модулем.
Количество опций слишком велико, чтобы описывать все в статье, поэтому за подробностями отправляем читателя смотреть файл Documentation/networking/bonding.txt, который поставляется с исходными кодами ядра Linux. Опции передаются модулю как параметры при загрузке. Первая опция определяет имя объединенного интерфейса, например, bond0. Необходимо также указать метод, с помощью которого драйвер будет осуществлять мониторинг состояния соединений и обнаруживать сбои. Метод MII (Media Independent Interface) неплохо зарекомендовал себя. Еще одна опция — mode, указывает драйверу, по каким правилам выбирать интерфейс для передачи пакетов. Также необходимо указать машине, как обрабатывать полученные пакеты. Каждая сетевая плата имеет свой собственный MAC-адрес. Машина, передающая пакет, должна указать адрес получателя. Для того чтобы использовать оба интерфейса для приема пакетов, вам понадобится умный Ethernet-коммутатор, или же вам придется перекрыть ARP. При написании статьи автор использовал режим balance-alb (перекрытие ARP). Подробнее об опциях можно почитать в вышеуказанном файле.
Когда драйвер установлен, необходимо настроить его автоматическую загрузку при запуске компьютера. Сделать это можно с помощью утилиты module- init-tools. Также необходимо указать опции. Например:
alias bond0 bonding
options bond0 mode=balance-alb miimon=100
Этим задается имя bond0 для интерфейса, режим работы balance-alb и мониторинг MII каждые 100 миллисекунд.
Bond0 настраивается с помощью ifconfig точно так же, как если бы вы настраивали обычный интерфейс. Например:
ifconfig bond0 123.123.123.4 netmask 255.255.255.0 up
Наконец, необходимо добавить «подчиненные» сетевые интерфейсы:
ifenslave bond0 eth0 eth1
Если все в порядке, интерфейс bond0 должен заработать. Чтобы интерфейс автоматически запускался при загрузке ОС, запустите ifenslave из /etc/network/interfaces с ключом up. Вот пример того, что получилось у автора (реальные IP-адреса в целях безопасности заменены на «xxx»):
auto bond0
iface bond0 inet static
address xxx.xxx.xxx.xxx
netmask 255.255.255.0
network xxx.xxx.xxx.0
broadcast xxx.xxx.xxx.255
gateway xxx.xxx.xxx.1
up /sbin/ifenslave bond0 eth0 eth1
Итак, теперь все готово и настало время тестирования. Попробуйте запустить ping, отключите по очереди сетевые кабели и наслаждайтесь результатом.
OPK, перевод Дмитрия Герусса.
Сетевые решения. Статья была опубликована в номере 03 за 2006 год в рубрике sysadmin