在模式 4 下使用网络绑定时,RX 数据不平衡

在模式 4 下使用网络绑定时,RX 数据不平衡

我们采用802.3ad模式绑定的双网卡服务器。

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v5.14.21

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
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 rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: 0c:xx:xx:xx:99:40
Active Aggregator Info:
    Aggregator ID: 1
    Number of ports: 2
    Actor Key: 21
    Partner Key: 13
    Partner Mac Address: 00:xx:5e:00:01:00

Slave Interface: enP1p1s0f0
MII Status: up
Speed: 25000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 0c:xx:xx:xx:99:40
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
    system priority: 65535
    system mac address: 0c:xx:xx:xx:99:40
    port key: 21
    port priority: 255
    port number: 1
    port state: 61
details partner lacp pdu:
    system priority: 65535
    system mac address: 00:xx:5e:00:01:00
    oper key: 13
    port priority: 255
    port number: 14
    port state: 61

Slave Interface: enP1p1s0f1
MII Status: up
Speed: 25000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 0c:xx:xx:xx:99:41
Slave queue ID: 0
Aggregator ID: 1
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
    system priority: 65535
    system mac address: 0c:xx:xx:xx:99:40
    port key: 21
    port priority: 255
    port number: 2
    port state: 61
details partner lacp pdu:
    system priority: 65535
    system mac address: 00:xx:5e:00:01:00
    oper key: 13
    port priority: 255
    port number: 32782
    port state: 61

两块网卡上的传出数据是平衡的,但是传入的数据集中在一块网卡上。

bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
    inet xxx.xxx.165.215  netmask 255.255.255.192  broadcast xxx.xxx.165.255
    inet6 xxxx::xxx:a1ff:fe5a:9940  prefixlen 64  scopeid 0x20<link>
    ether 0c:xx:xx:xx:99:40  txqueuelen 1000  (Ethernet)
    RX packets 286959178  bytes 327689609899 (305.1 GiB)
    RX errors 0  dropped 24884  overruns 0  frame 0
    TX packets 394378427  bytes 477465769012 (444.6 GiB)
    TX errors 0  dropped 10 overruns 0  carrier 0  collisions 0

enP1p1s0f0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
    ether 0c:xx:xx:xx:99:40  txqueuelen 1000  (Ethernet)
    RX packets 7184101080  bytes 9239686504798 (8.4 TiB) <= MOST DATA
    RX errors 0  dropped 42969  overruns 0  frame 0
    TX packets 4769768089  bytes 6383749337305 (5.8 TiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enP1p1s0f1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
    ether 0c:xx:xx:xx:99:40  txqueuelen 1000  (Ethernet)
    RX packets 129986535  bytes 186499719199 (173.6 GiB)
    RX errors 0  dropped 1294  overruns 0  frame 0
    TX packets 4073423613  bytes 5403193492511 (4.9 TiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我有两个问题:

  1. 为什么两个网卡上的 RX 数据包不平衡?
  2. 为什么bond0的各个统计量不等于enP1p1s0f0与enP1p1s0f1的总和?

附加信息: 这台服务器链接到一个堆叠交换机,是否与不平衡有关?

答案1

为什么两个网卡上的 RX 数据包不平衡?

一般来说,它们不是。通过 LACP LAG 为 NIC Rx 端分配流量是交换机的工作。流量分配通常通过从源/目标 IP 地址和端口号的哈希值派生的索引来完成,但实际上没有标准方法 - 请查看手册/配置以了解详细信息。

基于哈希的分布可确保每个流内的数据包顺序不会改变 - 这会比最大化的物理链路对性能的损害更大。

答案2

(这实际上是@Zac67 的回答中一个想法的延续)

LACP 基于哈希的分布设计为,通过理想的哈希和无限数量的流,可以使分布均匀(但想想连接 L3 路由器的两侧基于“L2”的哈希;它们永远只加载一个链接)。其他任何事情都会导致不均匀的分布,并且与理想情况相反,分布会更糟。在单个流的极限下,它将采取一条路径或另一条路径,根本不平衡任何东西。

没有标准,但是有典型的配置:源和目标的 MAC 地址,或IP 和端口。阅读交换机手册,了解它能做什么。例如,如果您发现“L2”平衡(基于 MAC)对您来说很好,请坚持使用它。“L3+4”的行为不太可预测(但“平均而言更均匀”!),因为它取决于随机的端口号。

统计数据永远不会完全匹配。首先,这一切都是动态的,不可能以事务方式开始一切,因此所有统计数据都会同时开始计算。然后,您可以销毁并重新创建您的债券,而无需击落成员,这将重置其统计数据,但不会重置成员中的统计数据——瞧,什么都不匹配。看起来您的系统确实发生了类似的事情。您也可以分离并奴役成员,效果类似。或者您可以重置统计数据。

其次,成员还必须发送和接收 LACP DU,这些 DU 计入成员统计数据中,不会传播到绑定。而且,根据您配置的 LACP 速率,每秒可以发送 DU — 计数。

相关内容