Proxmox:LACP 模式下绑定网卡的数据包丢失

Proxmox:LACP 模式下绑定网卡的数据包丢失

遇到了一个奇怪的问题。我有一台运行 Proxmox 5.3 的机器,它的硬件中有一个 4 端口英特尔 NIC 卡(千兆,PCI-e),主板上还有一个第五个千兆以太网。

我已将机器配置为板载 NIC 作为机器的管理接口,并且 4 个千兆位 NIC 通过 LACP 绑定在一起(并连接到 HP ProCurve 1810G 托管交换机)- 机箱上的所有 VM 和容器都通过绑定的 NIC 获得网络连接。显然,交换机是托管的并支持 LACP,并且我在交换机上为 4 个端口配置了中继设置。

一切似乎都运行良好,至少我是这么认为的。

周末我在 Proxmox 主机上安装了 netdata,现在我不断收到关于 bond0(4 个绑定网卡)数据包丢失的警报。我有点困惑为什么会这样。

查看 bond0 的统计数据,似乎 RX 数据包以合理的频率被丢弃(当前显示在过去 10 分钟内丢弃了 ~160 个 RX 数据包 - 似乎没有 TX 数据包被丢弃)。

下面的接口输出,您会注意到虚拟机的桥接接口没有丢包,这种情况只发生在 bond0 及其从属设备上。MTU 设置为 9000(交换机上启用了巨型帧)——当 MTU 为 1500 时,我仍然看到这个问题。enp12s0 是管理 NIC,其他 4 个 NIC 是绑定从属设备。

bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 9000
    ether 00:1b:21:c7:40:d8  txqueuelen 1000  (Ethernet)
    RX packets 347300  bytes 146689725 (139.8 MiB)
    RX errors 0  dropped 11218  overruns 0  frame 0
    TX packets 338459  bytes 132985798 (126.8 MiB)
    TX errors 0  dropped 2 overruns 0  carrier 0  collisions 0

enp12s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.3  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::7285:c2ff:fe67:19b9  prefixlen 64  scopeid 0x20<link>
    ether 70:85:c2:67:19:b9  txqueuelen 1000  (Ethernet)
    RX packets 25416597  bytes 36117733348 (33.6 GiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 16850795  bytes 21472508786 (19.9 GiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp3s0f0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 9000
    ether 00:1b:21:c7:40:d8  txqueuelen 1000  (Ethernet)
    RX packets 225363  bytes 113059352 (107.8 MiB)
    RX errors 0  dropped 2805  overruns 0  frame 0
    TX packets 15162  bytes 2367657 (2.2 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp3s0f1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 9000
    ether 00:1b:21:c7:40:d8  txqueuelen 1000  (Ethernet)
    RX packets 25499  bytes 6988254 (6.6 MiB)
    RX errors 0  dropped 2805  overruns 0  frame 0
    TX packets 263442  bytes 123302293 (117.5 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp4s0f0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 9000
    ether 00:1b:21:c7:40:d8  txqueuelen 1000  (Ethernet)
    RX packets 33208  bytes 11681537 (11.1 MiB)
    RX errors 0  dropped 2804  overruns 0  frame 0
    TX packets 42729  bytes 2258949 (2.1 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp4s0f1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 9000
    ether 00:1b:21:c7:40:d8  txqueuelen 1000  (Ethernet)
    RX packets 63230  bytes 14960582 (14.2 MiB)
    RX errors 0  dropped 2804  overruns 0  frame 0
    TX packets 17126  bytes 5056899 (4.8 MiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
    inet 192.168.1.4  netmask 255.255.255.0  broadcast 192.168.1.255
    inet6 fe80::21b:21ff:fec7:40d8  prefixlen 64  scopeid 0x20<link>
    ether 00:1b:21:c7:40:d8  txqueuelen 1000  (Ethernet)
    RX packets 54616  bytes 5852177 (5.5 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 757  bytes 61270 (59.8 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

最初怀疑是某种缓冲区问题,我在 sysctl 中做了一些调整以确保缓冲区大小足够。 sysctl 调整可以在这里找到(这些似乎没有任何区别):

https://paste.linux.community/view/3b5f2b63

网络配置为:

auto lo
iface lo inet loopback

auto enp12s0
iface enp12s0 inet static
    address  192.168.1.3
    netmask  255.255.255.0

iface enp3s0f0 inet manual

iface enp3s0f1 inet manual

iface enp4s0f0 inet manual

iface enp4s0f1 inet manual

auto bond0
iface bond0 inet manual
    bond-slaves enp3s0f0 enp3s0f1 enp4s0f0 enp4s0f1
    bond-miimon 100
    bond-mode 802.3ad
    mtu 9000

auto vmbr0
iface vmbr0 inet static
    address  192.168.1.4
    netmask  255.255.255.0
    gateway  192.168.1.1
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0

我采取的故障排除步骤:

a) sysctl 调整(如附件所示)b) 增加 MTU 并在交换机上启用巨型帧(无变化)c) 重置交换机并重新创建 LACP 中继(无变化)

有什么想法我下一步该尝试什么吗?我开始认为我对 NIC 组合有些不了解。正如我所说,一切似乎都运行良好,但我对高数据包丢失有点担心。

网络上连接到交换机的其他机器没有这个问题(机器上的第 5 个 NIC 也没有问题)。

答案1

我以前见过这种情况:HP 交换机似乎有时会向 LACP 中继的所有成员发送广播数据包。然后内核将这些数据包视为重复数据包并丢弃它们(当然,除了第一个到达的数据包)。

虽然这当然不够优雅,但在现实生活中似乎不会造成问题。您可以通过故意发送许多广播数据包并检查这是否与丢弃统计数据一致来验证是否是这种影响。

相关内容