Настройка объединения портов (bonding) Cisco IOS и CentOS LACP

Настройка объединения портов (bonding) Cisco IOS и CentOS LACP

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

В этой статье я расскажу как включить LACP между Cisco коммутатором и linux-сервером. Это очень полезно, потому что наш сервер обладает несколькими 1Gb NIC-картами, а трафик порой может превышать 1Gb/s.

Включение LACP между двумя портами Cisco очень просто. Первое что нам необходимо сделать - это связать порты в channel-group. Лучше сделать это действие сразу, поскольку изменение параметров интерфейса Port-Channel, автоматически применяется к GigabitEthernet интерфейсам, что, согласитесь, очень удобно.

Перед настройкой агрегирования лучше выключить физические интерфейсы. Достаточно отключить их с одной стороны, затем настроить агрегирование с двух сторон и включить интерфейсы.

Подключаемся к коммутатору и выполняем следующие действия:

1
2
3
4
5
catalyst(config)# interface range Gi1/1-2
catalyst(config-if-range)# shutdown
catalyst(config-if-range)# channel-group 2 mode active
Creating a port-channel interface Port-channel 2
catalyst(config-if-range)# no sh

Далее вносим изменений в конфигурацию созданного PortChannel2:

1
2
3
4
5
6
7
interface Port-channel2
description LACP Channel for CloudManager
switchport trunk encapsulation dot1q
switchport trunk native vlan 1
switchport trunk allowed vlan 1,2
switchport mode trunk
spanning-tree portfast trunk

Проверяем статус подключения портов:

1
2
3
4
5
...
Gi1/1 CloudManager eth0 connected trunk a-full a-1000 10/100/1000-TX
Gi1/2 CloudManager eth1 connected trunk a-full a-1000 10/100/1000-TX
...
Po2 LACP Channel for CloudManager connected trunk a-full a-1000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Port-channel2 is up, line protocol is up (connected) 
Hardware is EtherChannel, address is 8843.e1a1.5bcf (bia 8843.e1a1.5bcf)
Description: LACP Channel for CloudManager
MTU 1500 bytes, BW 2000000 Kbit, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Full-duplex, 1000Mb/s, media type is N/A
input flow-control is on, output flow-control is unsupported
Members in this channel: Gi1/1 Gi1/2
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output never, output hang never
Last clearing of "show interface" counters never
Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 13000 bits/sec, 15 packets/sec
2181 packets input, 229164 bytes, 0 no buffer
Received 494 broadcasts (427 multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 input packets with dribble condition detected
93506 packets output, 8530669 bytes, 0 underruns
0 output errors, 0 collisions, 0 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out

Проверяем конфигурацию на объединенных портах:

1
2
3
4
5
6
7
8
9
10
11
interface GigabitEthernet1/1
description CloudManager eth0
switchport trunk encapsulation dot1q
switchport trunk native vlan 1
switchport trunk allowed vlan 1,2
switchport mode trunk
no logging event link-status
no logging event trunk-status
duplex full
channel-group 2 mode active
end
1
2
3
4
5
6
7
8
9
10
11
interface GigabitEthernet1/2
description CloudManager eth1
switchport trunk encapsulation dot1q
switchport trunk native vlan 1
switchport trunk allowed vlan 1,2
switchport mode trunk
no logging event link-status
no logging event trunk-status
duplex full
channel-group 2 mode active
end

Проверяем внутренню информацию LACP

1
2
3
4
5
6
7
8
9
Flags:  S - Device is requesting Slow LACPDUs 
F - Device is requesting Fast LACPDUs
A - Device is in Active mode P - Device is in Passive mode

Channel group 2
LACP port Admin Oper Port Port
Port Flags State Priority Key Key Number State
Gi1/1 SA bndl 32768 0x2 0x2 0x10 0x3D
Gi1/2 SA bndl 32768 0x2 0x2 0x11 0x3D

На этом с настройками на коммутаторе закончим и приступим к настройке Linux-сервера.

Настройка LACP на сервере CentOS

RHEL 6/CentOS 6 настройка модуля ядра

Создаем файл и вносим данные в /etc/modprobe.d/bonding.conf

1
2
alias netdev-bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1

Можно использовать несколько объединенных интерфейсов. Для этого необходимо подгрузить модули объединения столько, сколько потребуется, например:

1
2
3
4
alias netdev-bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1
alias netdev-bond1 bonding
options bond1 miimon=100 mode=4 lacp_rate=1

Настройка сети в CentOS

Меняем настройки физических интерфейсов:

1
2
3
4
5
6
7
8
9
10
11
#/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=02:1E:37:12:D4:79
TYPE=Ethernet
UUID=f698d5a1-eda7-473e-9d78-9f43gee8623c45
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
1
2
3
4
5
6
7
8
9
10
11
#/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=00:12:67:14:38:78
TYPE=Ethernet
UUID=ca68a2b9-8b8b-4373-b2e3-3331e646117b
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

Объединяем интерфейсы в бондинг, создав новый файл ifcfg-bond0 со следующим содержимым:

1
2
3
4
5
6
7
8
9
10
11
12
DEVICE=bond0
ONBOOT=yes
USERCTL=no
BOOTPROTO=none
NM_CONTROLLED="no"
IPADDR=192.168.2.2
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="CloudManager Bond"
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer2+3"

Перезапускаем сервис

1
service network restart

Проверяем статус бондинга

cat /proc/net/bonding/bond0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2+3 (2)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 5
Number of ports: 2
Actor Key: 17
Partner Key: 2
Partner Mac Address: 82:43:e2:a1:3b:c0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 02:1E:37:12:D4:79
Aggregator ID: 5
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:12:67:14:38:78
Aggregator ID: 5
Slave queue ID: 0

Важно обратить внимание на 802.3ad info если “Partner Mac Address” равен 00:00:00:00:00:00 – это значит что обмен пакетами LACPDU не произошел и на коммутаторе скорее всего не настроен или не поддерживается LACP.

Список режимов

mode=0 (balance-rr)

Последовательно кидает пакеты, с первого по последний интерфейс.

mode=1 (active-backup)

Один из интерфейсов активен. Если активный интерфейс выходит из строя (link down и т.д.), другой интерфейс заменяет активный. Не требует дополнительной настройки коммутатора

mode=2 (balance-xor)

Передачи распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.

mode=3 (broadcast)

Все пакеты на все интерфейсы

mode=4 (802.3ad)

Link Agregation — IEEE 802.3ad, требует от коммутатора настройки.

mode=5 (balance-tlb)

Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Не требует настройки коммутатора.

mode=6 (balance-alb)

Тоже самое что 5, только входящий трафик тоже распределяется между интерфейсами. Не требует настройки коммутатора, но интерфейсы должны уметь изменять MAC.