вторник, 6 сентября 2011 г.

Совместное использование нескольких сетевых интерфейсов в 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.
  • Рекомендуемое программное обеспечение:
Ifenslave command: Используется для присоединения сетевых карт к bond-интерфейсу. bond0 будет считаться в системе как обычный сетевой интерфейс, но будет посылать пакеты через присоединенные (slave) устройства, используя планировщик на алгоритме round-robin. Это позволит обеспечить простую и сбалансированную систему. Установим данное ПО с помощью команды:
# apt-get install ifenslave-2.6
  • Конфигурация сети в нашем примере:
  • Настройка 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 is > 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
# 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
# vi /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. Другие значения могут быть:
[Подробней на Documentation/networking/bonding]
  • Запускаем bond0 интерфейс.
После внесения всех изменений в конфигурационные файлы необходимо запустить или перезапустить сервисы сети:
# /etc/init.d/networking start
или
# /etc/init.d/networking stop && # /etc/init.d/networking start
  • Проверяем работу наших настроек.
Вводим в терминал следующую команду:
# /sbin/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

Комментариев нет :

Отправить комментарий