我有一个全新的 Ubuntu 22.04,在 KVM 中运行,带有 6 个 virtio 接口模拟 e1000。它连接到 Open vSwitch,交换机和 Ubuntu 上都配置了 LACP。
问题总结如下:当我在 bond0 中的任何接口上执行 tcpdump 时,我可以看到 ovs 发送的 LACP pdu,但没有看到 Ubuntu 的响应。Ubuntu 似乎也不会自行发送 LACP pdu。
我的配置详细信息如下:
/etc/netplan/00-installer-config.yaml
bonds:
bond0:
addresses: [192.168.201.141/24]
interfaces:
- enp2s0
- enp3s0
- enp4s0
- enp5s0
- enp6s0
- enp7s0
parameters:
mode: 802.3ad
mii-monitor-interval: 100
ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:bd:d6:54 brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 32:4c:6b:d8:b0:dc brd ff:ff:ff:ff:ff:ff permaddr 52:54:00:aa:fb:bb
4: enp3s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 32:4c:6b:d8:b0:dc brd ff:ff:ff:ff:ff:ff permaddr 52:54:00:0d:61:fc
5: enp4s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 32:4c:6b:d8:b0:dc brd ff:ff:ff:ff:ff:ff permaddr 52:54:00:d4:cc:88
6: enp5s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 32:4c:6b:d8:b0:dc brd ff:ff:ff:ff:ff:ff permaddr 52:54:00:79:8e:a0
7: enp6s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 32:4c:6b:d8:b0:dc brd ff:ff:ff:ff:ff:ff permaddr 52:54:00:24:36:a7
8: enp7s0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bond0 state UP mode DEFAULT group default qlen 1000
link/ether 32:4c:6b:d8:b0:dc brd ff:ff:ff:ff:ff:ff permaddr 52:54:00:c7:90:3c
9: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 32:4c:6b:d8:b0:dc brd ff:ff:ff:ff:ff:ff
我可以看到所有链接都是UP的。
/proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v5.15.0-86-generic
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
802.3ad info
LACP active: on
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: 32:4c:6b:d8:b0:dc
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 0
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00
Slave Interface: enp7s0
MII Status: up
Speed: Unknown
Duplex: Unknown
Link Failure Count: 0
Permanent HW addr: 52:54:00:c7:90:3c
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: churned
Actor Churned Count: 0
Partner Churned Count: 1
details actor lacp pdu:
system priority: 65535
system mac address: 32:4c:6b:d8:b0:dc
port key: 0
port priority: 255
port number: 1
port state: 77
details partner lacp pdu:
system priority: 65535
system mac address: 00:00:00:00:00:00
oper key: 1
port priority: 255
port number: 1
port state: 1
<snip>
上述输出显示了参与者和合作伙伴的 pdu 详细信息,但 tcpdump 没有显示 Ubuntu 发送的 pdu。
此外,速度和双工也是未知的,很可能是因为底层接口是 virtio,但这可能是 Ubuntu 不发送 LACP pdu 的原因吗?
kvm 中接口的描述如下:
<interface type='bridge'>
<mac address='52:54:00:d4:cc:88'/>
<source bridge='ovsbr-lacp0'/>
<virtualport type='openvswitch'>
<parameters interfaceid='0e117751-fd45-4840-9c30-41ea8f76bdce'/>
</virtualport>
<model type='e1000'/>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</interface>
这是tcpdump
在 Open vSwitch 和 Ubuntu 上看到的输出。fe:54:00:c7:90:3c
是 ovs 中其中一个从属接口的 MAC,a6:a0:01:43:3a:41
是 ovs 中绑定接口的 MAC。
tcpdump -evni enp7s0
tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
19:41:47.129221 fe:54:00:c7:90:3c > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
Actor Information TLV (0x01), length 20
System a6:a0:01:43:3a:41, System Priority 65534, Key 15, Port 17, Port Priority 65535
State Flags [Activity, Aggregation, Collecting, Distributing, Default]
Partner Information TLV (0x02), length 20
System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0, Port Priority 0
State Flags [none]
Collector Information TLV (0x03), length 16
Max Delay 0
Terminator TLV (0x00), length 0
Ubuntu 似乎没有读取这个数据包,也没有向它发送响应,它甚至也没有生成自己的 LACP pdu。
我dmesg
可以看到这个日志:
[ 4722.457866] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[ 4752.513642] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
这很奇怪,因为我可以在 tcpdump 中看到 ovs 发送的数据包。
有一个相关的问题在 serverfault 中,这看起来就像我所处的情况。
我已经检查了ovs端的所有内容,并且此主题显示结果。
我已经对 debugfoo 感到筋疲力尽了,任何能使它工作的线索都将非常感谢。
X。
答案1
我在另一组 VM 上再次尝试了这个操作,现在它可以正常工作了!
我能看到的区别是我在 netplan yml 中添加了接口,即:
network:
ethernets:
ens1:
addresses:
- 192.168.200.148/24
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
routes:
- to: default
via: 192.168.200.1
enp2s11:
dhcp4: no
enp2s12:
dhcp4: no
enp2s13:
dhcp4: no
enp2s14:
dhcp4: no
enp2s15:
dhcp4: no
enp2s16:
dhcp4: no
enp2s17:
dhcp4: no
enp2s18:
dhcp4: no
bonds:
bond0:
addresses: [192.168.201.141/24]
interfaces:
- enp2s11
- enp2s12
- enp2s13
- enp2s14
- enp2s15
- enp2s16
- enp2s17
- enp2s18
parameters:
mode: 802.3ad
mii-monitor-interval: 100
renderer: networkd
version: 2
如果您注意到,设备 enp2s11 被添加了两次,第一次是在 ethernets 下,第二次是在 bond:interfaces 下。这是我能想到的与之前配置相比的唯一变化。
在OVS端:
sudo ovs-appctl bond/show bond0
---- bond0 ----
bond_mode: active-backup
bond may use recirculation: no, Recirc-ID : -1
bond-hash-basis: 0
lb_output action: disabled, bond-id: -1
updelay: 0 ms
downdelay: 0 ms
lacp_status: negotiated
lacp_fallback_ab: false
active-backup primary: <none>
active member mac: fe:54:00:7c:71:79(vnet365)
member vnet365: enabled
active member
may_enable: true
member vnet366: enabled
may_enable: true
member vnet367: enabled
may_enable: true
member vnet368: enabled
may_enable: true
member vnet369: enabled
may_enable: true
member vnet370: enabled
may_enable: true
member vnet371: enabled
may_enable: true
member vnet372: enabled
may_enable: true
我能够在同一个网络/交换机中的另一台主机之间进行 ping 操作,因此我猜它工作正常。
答案2
我遇到了完全相同的问题,当我运行以下命令时:
cat /proc/net/bonding/bond0
我看到了这一点:
Ethernet Channel Bonding Driver: v5.15.0-78-generic
Bonding Mode: load balancing (round-robin)```
因此mode: 802.3ad
没有应用,我必须重新启动服务器或执行此操作才能实际应用更改:
ip link del dev bond0 && netplan apply