середа, 10 липня 2013 р.

Совместное использование нескольких сетевых интерфейсов в 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 разрешает печатать данный текст.

Рекомендуемые темы:
Запрещаем приложению доступ в сеть.
21 пример использования iptables для администраторов.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments