情况是这样的。出于容错和负载平衡的原因,我想使用双链路将我的 Linux 服务器连接到单个网络。这些服务器有 2 个或更多 1 千兆网卡,我计划将它们分别连接到位于单个堆栈中的不同交换机(即单个虚拟交换机)。所有交换机都是 Juniper EX4200 或 EX4500。
我知道我可以使用任何 Linux 绑定模式,但我想知道哪种模式最好。以前我使用主动备份模式,因为有些服务器连接到非堆叠交换机,但现在我们有了一个新的、一致的网络,我想使用除了容错之外还提供负载平衡的绑定模式。
我认为最佳模式是 802.3ad (LACP),因为这是所有网络设备使用的标准,但事实证明,当我在交换机端将一组端口配置为 LACP 通道时,连接就会中断,直到我也正确配置服务器端。这使我们的系统管理任务变得更加困难,因为在安装新服务器之前,我们必须删除交换机上的 LACP 配置(因为 PXE 启动和网络安装等功能在 LACP 端口上不起作用),并且安装后,我们必须再次更改交换机设置,但必须在服务器配置为使用 LACP 之后,否则连接将中断。
其他绑定模式(例如balance-alb)不需要在交换机端进行任何特殊配置,但从理论上讲具有相同的优势。
有什么理由选择 802.3ad 而不是 balance-alb 吗?
答案1
我对 Juniper 交换机不太熟悉,但你不必在它们上配置 LACP;是LACP 的要点。如果情况并非如此,则您的交换机配置存在问题。
LACP 仅指定用于动态聚合端口的协议。它不指定端口调度策略(发送和接收流量的位置)。此策略是单独设置的。我不记得 Linux 中的过程,但我知道 Linux 支持指定几种不同的策略,可能类似于 balance-alb。
balance-alb 有特定的缺点。主要是它半智能地为新连接选择一个传出端口,并且它们在连接的整个生命周期内都停留在该端口上(这实际上是通过 MAC 而不是端口来完成的,如果一个端口发生故障,MAC 将被分配给另一个端口,从而允许连接继续)。
但是,这并不完全“聚合”端口,因为连接将无法使用多个端口。因此,如果您有 2 个 1GbE 端口,则单个连接仍然限制为 1GbE。LACP 通常可以解决此问题,但这取决于您的调度策略和每端支持的活动端口数量。
答案2
在 balance-alb 中,发送和接收帧都使用更改 MAC 地址技巧进行负载平衡。这可能会导致应用程序级别出现问题。并非所有应用程序都适合此模式。
处理您的原始问题。以下是我以前的做法。
- 将交换机端口保留为默认值。
- 执行 pxe-Kickstart 安装。
- 无论是在 KS 安装后级别,还是在管理基础设施“puppet/chef”中,将交换机端口的配置更改为 LACP “假设您的网络上有一个受所有设备信任的服务器”
恰克里 -
答案3
如果您已将盒子连接的端口上的 LACP 设置为使用 LACP,则主机端唯一“正确”的设置是使用 LACP。EX 将根据以太网源和目标 MAC 平衡以太网流量,如果您的帧上有 IP 数据包,则将考虑 IP 流量的 IP 源/目标/端口。请考虑阅读瞻博 KB22943有关哈希算法的详细信息。如果您的交换机支持跨堆栈 LACP(4XXX EX 就是这种情况),如果您有堆栈,请使用 LACP。如果您有更复杂的 L2 拓扑(每个 VLAN 循环等),它也可以更容易调试。
答案4
LACP 工作时非常棒,它提供的性能几乎是单个 NIC 的两倍。如果您只有少量带有绑定 NIC 的机器,那就使用它吧。
但是,它的一个缺点是,如果你的预算有限,因此使用低端交换机,它们往往缺乏足够的 LACP 组,也没有 MLAG 或 SMLT 功能。至少,大多数来自 HP 和类似产品的交换机似乎只提供与端口数量一半相同的绑定组。有些甚至更少。我们曾经使用的 2k 超微交换机只有 8 个 LACP 组,尽管有 52 个端口。我猜这个数字是相对随意的。没有人认为你需要超过 1/2 的交换机端口数量。它可能只是固件中的硬编码数字,可能占用更多的内存。
但是,如果您使用 SR-IOV、绑定和虚拟机,这确实是一个巨大的限制。
如果您是一家希望在一个机架中托管数百或数千台机器的提供商,那么您不一定愿意花费数万美元购买高端交换机,这很重要,但没有必要昂贵,只是为了为单个机架的机器提供冗余和性能。我可以理解为什么像 Facebook 这样的公司想要创建自己的交换机。
因此在这种情况下,我会选择不同的模式,也许是平衡-白化。