我有 2 台 dl380 g9 服务器,每台服务器有 2 个网卡和 4 个端口,运行 debian buster。我已将 7 根 0.50m cat6e 跳线直接连接到服务器,并在两台服务器上设置 /etc/network/interfaces(IP 地址略有不同),如下所示:
auto lo
iface lo inet loopback
iface eno1 inet manual
auto eno2
iface eno2 inet manual
auto eno3
iface eno3 inet manual
auto eno4
iface eno4 inet manual
auto eno49
iface eno49 inet manual
auto eno50
iface eno50 inet manual
auto eno51
iface eno51 inet manual
auto eno52
iface eno52 inet manual
auto bond0
iface bond0 inet static
address 10.10.10.11/24
bond-slaves eno2 eno3 eno4 eno49 eno50 eno51 eno52
bond-miimon 100
bond-mode balance-rr
auto vmbr0
iface vmbr0 inet static
address 10.0.0.234/16
gateway 10.0.0.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
计划是使用绑定连接在节点之间进行 zfs 复制。问题是我获得的每小时吞吐量被限制为 2.25gbps(取自 nload 的值)。情况奇怪的是,如果我绑定 3 个端口而不是 7 个端口……我再次获得 2.25gbps。这就像 4 个端口未被使用。有什么想法可以诊断问题吗?
答案1
不要使用循环:bond-mode balance-rr
此模式将导致大量无序的 TCP 流量并限制吞吐量,就像您所遇到的那样。
将绑定更改为bond-mode balance-xor
平衡绑定中每个成员的单个流。因此,单个流将以 1x NIC 速度(1 Gbps)运行,但您可以运行多个流并实现所有 NIC 的全速(7 Gbps)。
如果流量在同一个子网内,则默认值bond-xmit-hash-policy layer2
可能没问题,它会根据 MAC 地址执行负载平衡。
如果所有流量都通过默认网关,则查看设置bond-xmit-hash-policy layer2+3
或bond-xmit-hash-policy layer3+4
分别在 IP 地址和 TCP/UDP 端口上进行平衡。这将允许您平衡到多个主机的流量,或到同一主机的多个会话,或者只是改进平衡算法。
我假设您的交换机已正确配置了端口通道或以太网通道或其他类型的链路聚合组。balance-rr
无论如何,这对于您现有的模式都是必需的。交换机将重新拥有自己的负载平衡策略(类似于上面的第 2/3/4 层),因此请确保交换机也配置了有用的策略。
确保运行 irqbalance,以便多个 CPU 可以同时接收流量。如果不分散 IRQ,则所有流量都将由 CPU 核心 0 处理,这会成为瓶颈。
但是,如果您的目标是实现单个 7Gbps TCP 流,那么绑定或组合均不提供此功能,链路聚合也不是这样工作的。如果您想要一个更快的流,那么请升级到 10 Gbps 或更快。
答案2
网络接口绑定与交换机中的通道聚合并不完全相同。交换机端口很简单,所有端口都连接到同一个结构,但计算机接口很复杂。一些网络交换过程被卸载到网卡上,如果不卸载,它们将占用 CPU 时间。
它会导致很多问题 - 例如,您可以将 TCP 功能卸载到网卡,但您无法通过此连接上的其他卡发送数据包。
这意味着无论何时使用粘合,您都应该做好充分的计划并进行彻底的测试。您还必须为您的特定任务找到正确的解决方案。
您应该尝试不同的 bond-mode。我们在这里使用 balance-tcp,这限制每个连接使用一个接口,但允许将任何可能的功能卸载到 NIC。如果您有许多 tcp 连接,这将有效。
您可能想尝试组合而不是绑定。这实际上是绑定的新词,具有许多新功能和更低的开销。
每次更改设置时,您都应该以不同的方式进行测试 - 大块、小块、一个连接、多个连接、大量连接。查看 fio(1)。不要忘记在所有情况下监控 CPU 使用率。
HP dl380g9 具有出色的可选 10G 夹层卡,如果我在那里,我会考虑购买 10G 卡,而不是搞乱绑定。请注意不要在这些卡上使用铜以太网,只能使用光纤或直连电缆。