Product SiteDocumentation Site

101.5. Настройка объединения интерфейсов (bonding)

Объединение интерфейсов (bonding) — это технология, позволяющая объединить два и более физических сетевых интерфейса в один логический для повышения отказоустойчивости (если один интерфейс выходит из строя, трафик переключается на другой) или увеличения пропускной способности (в режимах балансировки нагрузки).
В таблице Режимы агрегации Linux Bond приведены режимы агрегации Linux Bond.

Таблица 101.2. Режимы агрегации Linux Bond

Режим
Название
Описание
Отказоустойчивость
Балансировка нагрузки
balance-rr или mode=0
Round-robin
Режим циклического выбора активного интерфейса для трафика. Пакеты последовательно передаются и принимаются через каждый интерфейс один за другим. Данный режим не требует применения специальных коммутаторов
Да
Да
active-backup или mode=1
Active Backup
В этом режиме активен только один интерфейс, остальные находятся в режиме горячей замены. Если активный интерфейс выходит из строя, его заменяет резервный. MAC-адрес интерфейса виден извне только на одном сетевом адаптере, что предотвращает путаницу в сетевом коммутаторе. Это самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов
Да
Нет
balance-xor или mode=2
XOR
Один и тот же интерфейс работает с определённым получателем. Передача пакетов распределяется между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Режим не требует применения специальных коммутаторов. Этот режим обеспечивает балансировку нагрузки и отказоустойчивость
Да
Да
broadcast или mode=3
Широковещательный
Трафик идёт через все интерфейсы одновременно
Да
Нет
LACP (802.3ad) или mode=4
Агрегирование каналов по стандарту IEEE 802.3ad
В группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки)
Да
Да
balance-tlb или mode=5
Адаптивная балансировка нагрузки при передаче
Исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт). Входящие пакеты принимаются только активным сетевым интерфейсом
Да
Да (исходящий трафик)
balance-alb или mode=6
Адаптивная балансировка нагрузки
Включает в себя балансировку исходящего трафика, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки)
Да
Да
В таблице Режимы выбора каналов при организации балансировки нагрузки приведены алгоритмы выбора каналов (распределения пакетов между физическими каналами, входящими в многоканальное соединение) для режимов balance-alb, balance-tlb, balance-xor, 802.3ad (значение параметра xmit_hash_policy).

Таблица 101.3. Режимы выбора каналов при организации балансировки нагрузки

Режим
Описание
layer2
Канал для отправки пакета однозначно определяется комбинацией MAC-адреса источника и MAC-адреса назначения. Трафик между определённой парой узлов всегда идёт по одному каналу. Алгоритм совместим с IEEE 802.3ad. Этот режим используется по умолчанию
layer2+3
Канал для отправки пакета определяется по совокупности MAC- и IP-адресов источника и назначения. Трафик между определённой парой IP-хостов всегда идёт по одному каналу (обеспечивается более равномерная балансировка трафика, особенно в случае, когда большая его часть передаётся через промежуточные маршрутизаторы). Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм совместим с IEEE 802.3ad
layer3+4
Канал для отправки пакета определяется по совокупности IP-адресов и номеров портов источника и назначения (трафик определённого узла может распределяться между несколькими каналами, но пакеты одного и того же TCP/UDP-соединения всегда передаются по одному и тому же каналу). Для фрагментированных пакетов TCP и UDP, а также для всех прочих протоколов 4 уровня, учитываются только IP-адреса. Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм не полностью совместим с IEEE 802.3ad
Пример настройки объединения (bond) интерфейсов enp0s9 и enp0s10 в логический интерфейс bond0 с режимом active-backup:
  1. Создать или изменить файлы options для каждого интерфейса (enp0s9 и enp0s10):
    # cat <<EOF > /etc/net/ifaces/enp0s9/options
    TYPE=eth
    DISABLED=no
    NM_CONTROLLED=no
    CONFIG_IPV4=YES
    EOF
    
    # cat <<EOF > /etc/net/ifaces/enp0s10/options
    TYPE=eth
    DISABLED=no
    NM_CONTROLLED=no
    CONFIG_IPV4=YES
    EOF
    
  2. Удалить IP-адреса и маршруты:
    # rm -f /etc/net/ifaces/enp0s9/{i,r}*
    # rm -f /etc/net/ifaces/enp0s10/{i,r}*
    
  3. Создать каталог для интерфейса bond0:
    # mkdir /etc/net/ifaces/bond0
    
  4. Создать файл options:
    # cat <<EOF > /etc/net/ifaces/bond0/options
    BOOTPROTO=static
    CONFIG_WIRELESS=no
    CONFIG_IPV4=yes
    HOST='enp0s9 enp0s10'
    ONBOOT=yes
    TYPE=bond
    BONDOPTIONS='miimon=100'
    BONDMODE=1
    EOF
    
    где:
    • BONDMODE=1 — режим агрегации Active Backup;
    • HOST='enp0s9 enp0s10' — интерфейсы, входящие в объединение;
    • miimon=100 —  интервал проверки состояния линка (100 мс).
  5. Создать файл ipv4address с IP-адресом для интерфейса bond0:
    # echo "192.168.0.62/24" > /etc/net/ifaces/bond0/ipv4address
    
  6. Создать файл маршрутов ipv4route:
    # echo "default via 192.168.0.1" > /etc/net/ifaces/bond0/ipv4route
    
  7. Применить изменения:
    # systemctl restart network
  8. Проверить результат:
    • просмотр статуса bonding:
      $ cat /proc/net/bonding/bond0
      Пример вывода:
      Ethernet Channel Bonding Driver: v6.12.41-6.12-alt1
      
      Bonding Mode: fault-tolerance (active-backup)
      Primary Slave: None
      Currently Active Slave: enp0s10
      MII Status: up
      MII Polling Interval (ms): 100
      Up Delay (ms): 0
      Down Delay (ms): 0
      Peer Notification Delay (ms): 0
      
      Slave Interface: enp0s10
      MII Status: up
      Speed: 1000 Mbps
      Duplex: full
      Link Failure Count: 0
      Permanent HW addr: 08:00:27:51:a2:b4
      Slave queue ID: 0
      
      Slave Interface: enp0s9
      MII Status: up
      Speed: 1000 Mbps
      Duplex: full
      Link Failure Count: 0
      Permanent HW addr: 08:00:27:76:e2:b7
      Slave queue ID: 0
      
    • просмотр интерфейса bond0:
      $ ip addr show bond0
      Пример вывода:
      9: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
          link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff
          inet 192.168.0.62/24 scope global bond0
             valid_lft forever preferred_lft forever
      
      просмотр всех интерфейсов:
      $ ip addr
      Пример вывода:
      …
      4: enp0s9: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
          link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff permaddr 08:00:27:76:e2:b7
      5: enp0s10: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP group default qlen 1000
          link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff
      9: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
          link/ether 08:00:27:51:a2:b4 brd ff:ff:ff:ff:ff:ff
          inet 192.168.0.62/24 scope global bond0
             valid_lft forever preferred_lft forever
      …
      

      Примечание

      Флаги SLAVE и MASTER подтверждают корректную настройку.