Коммутация, объединение линков (агрегация линков)

Материал из sysadm
Перейти к навигации Перейти к поиску

Обзор

Термины CISCO

  • Port Channel - название виртуального интерфейса в CISCO IOS, объединяющего линки
  • Ether Channel - термин CISCO, обозначающий технологию объединения группы физических линков в один виртуальный

Протоколы агрегации линков

  • LACP (Link Aggregation Control Protocol) - (IEEE 802.3ad) открытый протокол
  • PAgP - проприетарный протокол CISCO
  • Duralink Trunking - проприетарный протокол Adaptec
  • MLT (multi link trunking) - проприетарный протокол Nortel

Управление нагрузкой

  • можно управлять только нагрузкой исходящего трафика, чтобы распределять нагрузку в обе стороны, необходимо настраивать распределение нагрузки на другой стороне агрегированного линка.
  • если вы на стороне вашего устройства объединяете линки с разных коммутаторов (не объединенных в стек), то вы можете управлять только исходящим трафиком, входящий трафик может приходить через любой из коммутаторов, путь трафика может зависеть от места подключения источника.
  • агрегация линков не увеличивает пропускную способность между двумя хостами, но трафик между различными парами хостов может идти параллельно по разным линкам увеличивая общую пропускную способность

Настройка на CISCO

Подробно смотрите здесь

Задача

  • Есть два коммутатора SW1, SW2
  • Необходимо объединить их двумя линками с агрегацией канала

Требования к портам:

  • Одинаковый Duplex
  • Одинаковая скорость интерфейсов
  • Одинаковые разрешенные VLAN-ы и Native VLAN
  • Одинаковый режим интерфейсов (access, trunk)

ВАЖНО: Нельзя объединять коммутаторы линками до настройки агрегации портов, либо порты должны быть предварительно выключены, иначе может возникнуть петля

КОНФИГУРАЦИЯ ПРИВЕДЕННАЯ НИЖЕ НЕ ПРОВЕРЯЛАСЬ

SW1

# создание группы для объединения портов
(config)# interface port-channel 5

# настройка и подключение портов
(config)# int gi 0/1-2
(config-if-range)#
switchport mode trunk
switchport trunk allowed vlan 20,30,40
channel-group 5 mode active
no shutdown

SW2


# создание группы для объединения портов
(config)# interface port-channel 5

(config)# int gi 0/1-2
(config-if-range)#
switchport mode trunk
switchport trunk allowed vlan 20,30,40
channel-group 5 mode passive
no shutdown

Физически соединяем линки SW1(gi0/1)-SW2(gi0/1), SW1(gi0/2)-SW2(gi0/2)

Проверка

show etherchannel port-channel

Особенности:

  • passive автоматически включает LACP при получении пакета LACP от активного порта
  • по умолчанию балансировка, нагрузки производится по src-mac
  • если к SW1 подключены рабочие станции, а к SW2 роутер или сервер, то со стороны SW2 лучше переключить схождение на dst-mac

Режимы

channel-group 1 mode {auto [non-silent] | desirable [non-silent] | on} | {active | passive}

# auto - включает PAgP, только если на другой стороне обнаружено устройство с включенным PAgP
# desirable - включает PAgP в активном режиме
# on — Forces the port to channel without PAgP or LACP. With the on mode, a usable EtherChannel exists only when a port group in the on mode is connected to another port group in the on mode.
# non-silent — (Optional) If your switch is connected to a partner that is PAgP capable, configure the switch port for nonsilent operation when the port is in the auto or desirable mode. If you do not specify non-silent, silent is assumed. The silent setting is for connections to file servers or packet analyzers. This setting allows PAgP to operate, to attach the port to a channel group, and to use the port for transmission.

# active — Enables LACP only if a LACP device is detected. It places the port into an active negotiating state in which the port starts negotiations with other ports by sending LACP packets.
# passive — Enables LACP on the port and places it into a passive negotiating state in which the port responds to LACP packets that it receives, but does not start LACP packet negotiation. 

Настройка cisco коммутатора, если на другой стороне хост

Если на другой стороне хост, то желательно использовать LACP в пассивном режиме (на стороне хоста если LACP включен, то как правило он активен).

Также желательно определить VLAN для не тегированного трафика.

Пример настройки access порта

switchport mode access
switchport access vlan 10

Пример настройки гибридного порта

switchport mode trunk
switchport trunk native 10
switchport trunk allowed vlan 20,30,40

RHEL 7,8,9 bonding

RHEL 7,8 teaming

Примечание: в RHEL 9 механизм teaming удален, для агрегации доступен только bonding

Teaming - новый механизм создания агрегированных линков в Linux, более архитектурно правильны. Состоит из ядерной части, которая реализует базовые механизмы обработки трафика, и части пространства пользователя, которая отвечает за сигнализацию и управление ядерной частью.

Необходимые опции ядра (отмечаем только те режимы коммутации, которые будем использовать):

CONFIG_NET_TEAM=m
CONFIG_NET_TEAM_MODE_BROADCAST=m
CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
CONFIG_NET_TEAM_MODE_RANDOM=m
CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
CONFIG_NET_TEAM_MODE_LOADBALANCE=m

Конфигурационный файл (/etc/network/team0.conf):

{
  "device": "team0",
  "runner": { 
    "name":"lacp",
    "active":true, 
    "fast_rate":true, 
    "tx_hash":["eth", "ipv4", "ipv6"]
  }, 
  "link_watch": {"name": "ethtool"}, 
  "ports": {
    "eth0": {},
    "eth2": {}
  }
}

Стоит заметить, что интерфейсы-порты должны быть в состоянии down, иначе агрегированный линк не запустится.

Запускаем демон teamd:

teamd -g -f /etc/network/team0.conf -d

Проверяем работу:

# teamdctl team0 state
setup:
  runner: lacp
ports:
  eth0
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
    runner:
      aggregator ID: 2, Selected
      selected: yes
      state: current
  eth2
    link watches:
      link summary: up
      instance[link_watch_0]:
        name: ethtool
        link: up
    runner:
      aggregator ID: 2, Selected
      selected: yes
      state: current
runner:
  active: yes
  fast rate: yes

Добавляем адрес

ip link set up dev team0
ip address add X.X.X.X/X dev team0

Выключаем

teamd -t team0 -k