我有 2 个 dl380 g9 服务器,它们具有 2 个 nics 和 4 个端口,每个端口都运行 debian buster。我已将 7x 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 复制。问题是我得到的 thourhgput 限制为 2.25gbps(取自 nload 的值)。情况的奇怪部分是,如果我绑定 3 个端口 insetad 的 7.......我再次获得 2.25gbps。就像没有使用4个端口一样。知道如何诊断问题吗?
不要使用循环:
bond-mode balance-rr
这种模式会导致大量无序的 TCP 流量并像您遇到的那样限制吞吐量。
更改
bond-mode balance-xor
平衡单个流出债券的每个成员的债券。因此,单个流将以 1 倍 NIC 速度 (1 Gbps) 运行,但您可以运行多个流并实现所有 NIC 的全速 (7 Gbps)。如果流量在同一个子网内,那么默认值
bond-xmit-hash-policy layer2
可能没问题,这会根据 MAC 地址执行负载平衡。如果您的所有流量都通过默认网关,请分别查看 IP 地址和 TCP/UDP 端口的设置
bond-xmit-hash-policy layer2+3
或bond-xmit-hash-policy layer3+4
平衡。这将允许您平衡到多个主机的流,或到同一主机的多个会话,或者只是改进平衡算法。我认为您的交换机正确配置了端口通道或 EtherChannel 或其他类型的链路聚合组。
balance-rr
无论如何,这对于您现有的模式是必需的。交换机将拥有自己的负载平衡策略(类似于上面的第 2/3/4 层),因此请确保交换机也配置了有用的策略。确保您正在运行 irqbalance,以便多个 CPU 可以同时接收流量。如果您不传播 IRQ,那么所有流量都将由 CPU 内核 0 处理,这将成为瓶颈。
但是,如果您的目标是实现单个 7Gbps TCP 流,这不是绑定或组合提供的功能,也不是链路聚合的工作方式。如果您想要一个更快的流,则升级到 10 Gbps 或更快。
网络接口绑定与交换机中的通道聚合并不完全相同。交换机端口简单,所有端口都连接到同一个结构,但计算机接口复杂。一些网络交换进程被卸载到网卡,如果它们没有被卸载,它们将占用 CPU 时间。
它会导致很多问题 - 例如,您可以将 TCP 功能卸载到网卡,但您不能通过此连接上的其他网卡发送数据包。
这意味着无论何时使用粘合,您都应该精心计划并彻底测试。您还必须为您的特定任务找到正确的解决方案。
您应该尝试不同的键合模式。我们在这里使用 balance-tcp,这限制了每个连接使用一个接口,但允许将任何可能的功能卸载到 NIC。如果您有许多 tcp 连接,这将起作用。
您可能想尝试合作而不是结合。这实际上是结合许多新功能和降低开销的新词。
每次更改设置时,您都应该以不同的方式对其进行测试——大块、小块、一个连接、多个连接、很多连接。看看 fio(1)。不要忘记在所有情况下监控 CPU 使用情况。
HP dl380g9 有很棒的可选 10G 夹层卡,如果我在那里,我会考虑购买 10G 卡而不是搞乱绑定。并注意不要在那些上使用铜以太网,只使用光纤或直接电缆。