Совместное использование нескольких сетевых интерфейсов в Ubuntu, Debian.
"Склеивание" сетевых интерфейсов (NIC Teaming / Bonding) - не что
иное, как слияние нескольких сетевых соединений в одно параллельное.
Это позволяет увеличить пропускную способность канала и повысить
отказоустойчивость сети в случае отказа одной из сетевых карт.
Ядро linux идет со встроенным драйвером для агрегирования нескольких
сетевых интерфейсов в один, называемый bond0. В данном руководстве будет
объяснено как настроить данный интерфейс под debian-based системой на
конкретном примере.
В примере используется следующее оборудование:
- 2 x PCI-e Gig сетевые карты c поддержкой Jumbo-кадров
- RAID 6 w/ 5 enterprise grade 15k SAS жесткие диски
- Debian Linux 6.0.2 amd64
Также хочу заметить, что эта инструкция будет работать и на Ubuntu
Server. Ниже команды даны, исходя из того, что вы открыли root консоль,
используя su или sudo -i.
Рекомендуемое программное обеспечение.
Ifenslave используется для присоединения сетевых карт к
bond-интерфейсу. Bond0 будет считаться в системе как обычный сетевой
интерфейс, но будет посылать пакеты через присоединенные (slave)
устройства, используя планировщик на алгоритме round-robin. Это позволит
обеспечить простую и сбалансированную систему. Установим данное ПО с
помощью команды:
apt-get install ifenslave*
Настройка Linux bounding драйвера.
Создадим файл /etc/modprobe.d/bonding.conf
nano /etc/modprobe.d/bonding.conf
Со следующим содержимым:
alias bond0 bonding
options bonding mode=0 arp_interval=100 arp_ip_target=192.168.1.254, 192.168.1.12
Сохраним и закроем файл. В данном случае опции обозначают:
- mode=0 : Установить политики "склеивания" в значение balance-rr (round robin). Это значение по умолчанию.
- arp_interval=100 : Установить ARP link monitoring частоту в 100
миллисекунд. Без этой опции вы получите предупреждение, когда будете
запускать bond0 через /etc/network/interfaces.
- arp_ip_target=192.168.1.254, 192.168.1.12 : 192.168.1.254 (router
ip) и 192.168.1.2 IP адреса как ARP monitoring пиры, когда arp_interval
> 0. Это используется для наблюдения за состоянием соединения. Для
наблюдения за несколькими ip адресами разделяйте их знаком запятой. Как
минимум 1 адрес должен быть указан для функций ARP monitoring.
Максимально можно указать до 16 адресов.
Теперь загрузим драйвер, используя следующие команды:
modprobe -v bonding mode=0 arp_interval=100 arp_ip_target=192.168.1.254, 192.168.1.12
Проверьте журнал и наличие в системе интерфейса bond0.
tail -f /var/log/messages
ifconfig bond0
Настройка сетевых интерфейсов на совместное использование.
Первым делом остановим eth0 и eth1 (не делайте так в ssh сессии):
/etc/init.d/networking stop
Отредактируем /etc/network/interfaces, сделав его резервную копию (на всякий случай):
cp /etc/network/interfaces /etc/network/interfaces.bak
nano /etc/network/interfaces
Удалив из содержимого eth0 и eth1 конфигурацию и приведя файл к следующему виду:
############ WARNING ####################
# You do not need an "iface eth0" nor an "iface eth1" stanza.
# Setup IP address / netmask / gateway as per your requirements.
#######################################
auto lo
iface lo inet loopback
#
# The primary network interface
auto bond0
iface bond0 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.254
slaves eth0 eth1
# jumbo frame support
mtu 9000
# Load balancing and fault tolerance
bond-mode balance-rr
bond-miimon 100
bond-downdelay 200
bond-updelay 200
dns-nameservers 192.168.1.254
dns-search nixcraft.net.in
Сохраняем и выходим. В данном случае опции означают:
- address 192.168.1.10 : ip адрес для bond0.
- netmask 255.255.255.0 : маска сети для bond0.
- network 192.168.1.0 : сетевой адрес для bond0.
- gateway 192.168.1.254 : шлюз по умолчанию для bond0.
- slaves eth0 eth1 : настройка bond0 и привязка двух настоящих сетевых интерфейсов (eth0 and eth1) к нему.
- mtu 9000 : Установка MTU до размера 9000. Смотрите Настройка Linux JumboFrames configuration для подробной информации.
- bond-mode balance-rr : Установка профиля в значение "Load balancing
and fault tolerance". Смотрите ниже для более подробной информации.
- bond-miimon 100 : Установка MII link частоты наблюдения в 100
миллисекунд. Это значение определяет как часто будет проверяться
состояние соединения на каждом из интерфейсов.
- bond-downdelay 200 : Устанавливает время в 200 миллисекунд ожидания,
прежде чем отключить slave в случае отказа соединения. Эта опция
действует только на bond-miimon.
- bond-updelay 200 : Устанавливает время в 200 миллисекунд ожидания,
прежде чем включить slave после восстановления соединения. Эта опция
действует только на bond-miimon.
- dns-nameservers 192.168.1.254 : Устанавливает 192.168.1.254 как dns сервер.
- dns-search nixcraft.net.in : Устанавливает nixcraft.net.in как host-name lookup сервер по умолчанию (опционально).
Немного о других Bonding Policies.
Чуть выше мы установили bounding policy (mode) в значение 0, что означает balance-rr. Другие значения могут быть:
- active-backup или 1: Только один slave активен в единицу времени.
Второй slave активируется после аварии с первым slave. Данный режим
обеспечивает только отказоустойчивость.
- balance-xor или 2: Применяется хеш политика в виде MAC-источника XOR
MAC-получателя. Данный режим обеспечивает отказоустойчивость и
балансировку нагрузки.
- broadcast или 3: Передача идёт через все slave. Данный режим обеспечивает только отказоустойчивость.
- 802.3ad или 4: Должен применятся только если коммутатор поддерживает IEEE 802.3ad Dynamic link aggregation.
- balance-tlb или 5: Не требуется поддержка со стороны коммутатора.
Исходящий трафик распределяется в зависимости от текущей нагрузки
каждого slave. Входящий трафик поступает на текущий slave и если он
отказывает, то другой slave берёт работу на себя.
- balance-alb или 6: alb - Adaptive load balancing. Работает как balance-tlb + балансировка нагрузки rlb для IPv4.
Запуск bond0 интерфейса.
После внесения всех изменений в конфигурационные файлы необходимо запустить или перезапустить сервисы сети:
/etc/init.d/networking restart
или перезагрузка хоста.
Проверка работы.
Вводим в терминал следующую команду:
ifconfig
Вывод будет примерно следующим:
bond0 Link encap:Ethernet HWaddr 00:xx:yy:zz:tt:31
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::208:9bff:fec4:3031/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:9000 Metric:1
RX packets:2414 errors:0 dropped:0 overruns:0 frame:0
TX packets:1559 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:206515 (201.6 KiB) TX bytes:480259 (469.0 KiB)
eth0 Link encap:Ethernet HWaddr 00:xx:yy:zz:tt:31
UP BROADCAST RUNNING SLAVE MULTICAST MTU:9000 Metric:1
RX packets:1214 errors:0 dropped:0 overruns:0 frame:0
TX packets:782 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103318 (100.8 KiB) TX bytes:251419 (245.5 KiB)
Memory:fe9e0000-fea00000
eth1 Link encap:Ethernet HWaddr 00:xx:yy:zz:tt:31
UP BROADCAST RUNNING SLAVE MULTICAST MTU:9000 Metric:1
RX packets:1200 errors:0 dropped:0 overruns:0 frame:0
TX packets:777 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103197 (100.7 KiB) TX bytes:228840 (223.4 KiB)
Memory:feae0000-feb00000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 B) TX bytes:560 (560.0 B)
Используем cat, чтобы посмотреть текущее состояние bond драйвера и сетевых соединений:
cat /proc/net/bonding/bond0
В случае успеха вывод будет примерно следующим:
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:xx:yy:zz:tt:31
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:xx:yy:zz:tt:30 Автор статьи Platon Puhlechev aka iFalkorr разрешает печатать данный текст. http://vasilisc.com/ethernet-bonding
|