Apps: "ifenslave", "netplan", "KVM-Qemu".
Задача: обеспечить высокий уровень надёжности передачи данных для серверов под управлением "Linux Debian/Ubuntu" с подсистемой управления сетевой конфигурацией "Netplan" посредством LACP, вкупе с увеличением пропускной способности каналов.
В "Linux" агрегирование сетевых интерфейсов называется "бондингом". Управление агрегированием осуществляется с помощью утилиты "ifenslave", а работа, как таковая, с помощью модуля ядра "bonding".
Предварительная подготовка linux-системы.
Инсталлируем утилиту настройки агрегирования:
# apt-get install ifenslave
Проверяем, активен ли модуль агрегирования:
# lsmod | grep bonding
bonding ...
Модуль "bonding" давно уже идёт в составе ядра, даже "ванильного". На случай особо урезанных реализаций, если "bonding" неактивен, то настраиваем его автозагрузку и запускаем:
# vi /etc/modules
....
bonding
bonding
Конфигурирование сетевой конфигурации посредством "Netplan".
Пишем конфигурацию для современной системы управления сетевой конфигурацией "Netplan", включающую все обнаруженные физические порты сервера (в примере "Supermicro") в группу агрегирования, которую после включаем в мост, который используется системой виртуализации "KVM-Qemu":
# vi /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: networkd
ethernets:
eports:
match:
name: enp*
optional: true
bonds:
bond0:
interfaces: [eports]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
bridges:
br0:
dhcp6: no
addresses: [ 10.20.30.250/29 ]
gateway4: 10.20.30.249
nameservers:
search: [ example.net ]
addresses:
- "10.20.30.40"
interfaces:
- bond0
version: 2
renderer: networkd
ethernets:
eports:
match:
name: enp*
optional: true
bonds:
bond0:
interfaces: [eports]
parameters:
mode: 802.3ad
lacp-rate: fast
mii-monitor-interval: 100
bridges:
br0:
dhcp6: no
addresses: [ 10.20.30.250/29 ]
gateway4: 10.20.30.249
nameservers:
search: [ example.net ]
addresses:
- "10.20.30.40"
interfaces:
- bond0
Поддерживаются следующие режимы агрегирования:
1. "balance-rr" - (round-robin) - режим циклического выбора активного интерфейса для исходящего трафика (рекомендован для включения по умолчанию, не требует применения специальных коммутаторов);
2. "active-backup" - активен только один интерфейс, остальные в режиме горячей замены (самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов);
3. "balance-xor" - режим, в котором каждый получатель закрепляется за одним из физических интерфейсов, который выбирается по специальной формуле (не требует применения специальных коммутаторов);
4. "broadcast" - трафик идёт через все интерфейсы одновременно (примитивный и потенциально конфликтный режим);
5. "802.3ad" - (dynamic link aggregation) - в группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);
6. "balance-tlb" - (adaptive transmit load balancing) - исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт);
7. "balance-alb" - (adaptive load balancing) - включает в себя balance-tlb, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).
2. "active-backup" - активен только один интерфейс, остальные в режиме горячей замены (самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов);
3. "balance-xor" - режим, в котором каждый получатель закрепляется за одним из физических интерфейсов, который выбирается по специальной формуле (не требует применения специальных коммутаторов);
4. "broadcast" - трафик идёт через все интерфейсы одновременно (примитивный и потенциально конфликтный режим);
5. "802.3ad" - (dynamic link aggregation) - в группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки);
6. "balance-tlb" - (adaptive transmit load balancing) - исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт);
7. "balance-alb" - (adaptive load balancing) - включает в себя balance-tlb, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).
Внимательно перечитываем конфигурацию и применяем без предварительного тестирования (для "мостов" и "агрегирования" возврат к предыдущей конфигурации "Netplan" не поддерживается):
# netplan apply
Просматриваем статистику по агрегированному каналу:
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
....
802.3ad info
LACP rate: fast
Aggregator selection policy (ad_select): stable
....
Slave Interface: enp181s0f1
....
Slave Interface: enp181s0f0
....
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
....
802.3ad info
LACP rate: fast
Aggregator selection policy (ad_select): stable
....
Slave Interface: enp181s0f1
....
Slave Interface: enp181s0f0
....
Применение агрегированного канала в системе виртуализации "KVM-Qemu".
Указываем созданный поверх агрегированного линка мостовой интерфейс в качестве основного для системы виртуализации "KVM-Qemu":
# vi /etc/libvirtd/qemu/networks/default.xml
<network>
<name>br0</name>
<bridge name='br0'/>
<forward mode="bridge"/>
</network>
<name>br0</name>
<bridge name='br0'/>
<forward mode="bridge"/>
</network>
Применяем изменения конфигурации:
# virsh net-define /etc/libvirt/qemu/networks/default.xml
Network br0 defined from /etc/libvirt/qemu/networks/default.xml
Запускаем новую конфигурацию сетевой подсистемы "KVM-Qemu":
# virsh net-start br0
Активизируем автозапуск новой сетевой конфигурации:
# virsh net-autostart br0
Перезапускаем сервис виртуализации, чтобы применить изменения в сетевой подсистеме:
# service libvirtd restart