![交换机可以处理同一端口上的多个 LACP 组](https://linux22.com/image/804778/%E4%BA%A4%E6%8D%A2%E6%9C%BA%E5%8F%AF%E4%BB%A5%E5%A4%84%E7%90%86%E5%90%8C%E4%B8%80%E7%AB%AF%E5%8F%A3%E4%B8%8A%E7%9A%84%E5%A4%9A%E4%B8%AA%20LACP%20%E7%BB%84.png)
如果我使用支持 SRIOV 的适配器进行虚拟化,并在 2 个客户机中设置 2 个不同的 LACP 链路,那么交换机端的相同端口上可能会有 2 个 LACP 链路,交换机可以处理这种情况吗?
例如:
交换机端口 0 <=> 适配器端口 0
PF(主机): eth0
VF1(Guest1-eth0):LACP 团队 1
VF2(Guest2-eth0):LACP 团队 2
===================
交换机端口 1 <=> 适配器端口 1
PF(主机):eth1
VF1(Guest1-eth1):LACP 团队 1
VF2(Guest2-eth1):LACP 团队 2
提前致谢。
答案1
这不会像您期望的那样工作。交换机不知道 PF 和 VF,它只是要使用 LACP 绑定两个以太网接口(整个过程,而不仅仅是流向一个或另一个 VF 的流量)
我必须这样做:在 PF 上启用 LACP 并绑定它们。然后,当 VF 传递给客户机时,您还必须绑定它们。正如 jamieb 提到的,mac 欺骗检查将是一个问题,但有办法解决这个问题。使用 Intel SR-IOV nics,您可以设置一个选项,告诉它允许 VF 设置自己的 MAC,并且您可以使用“ip link”关闭欺骗检查。如果您有类似 Broadcom NetExtremeII nics(bnx2 系列驱动程序)的东西,您不能关闭 MAC 欺骗或允许客户机设置自己的 MAC。
如果使用 Broadcoms,则需要进行一些预配置,然后客户机才能正确使用它们。启动后,启用 VF,设置它们的 MAC 地址(它们最初将 MAC 设置为全零,这是不可用的),然后您必须禁用并重新启用 VF,以使这些 MAC 地址与您设置的 MAC 地址实际可用。我将它们成对分配相同的 mac,例如,port0-vf0 将 mac 设置为 22:27:1a:2a:d5:3a port1-vf0 将 mac 设置为相同,将两个 VF 传递给客户机(我使用 KVM),并在 qemu xml 中分配与您在 VF 上手动设置的 MAC 地址相同的 MAC 地址。然后在客户机中使用模式 2 将它们绑定,然后绑定将正常工作。
使用英特尔,您只需告诉 PF 您想要关闭 MAC 监听并允许 VF 设置其自己的 MAC 地址,然后您就可以允许 kvm 管理 MAC 地址,而您不需要对绑定进行任何特殊操作,它会像普通适配器一样工作。
重要的是您仅在 PF 上运行 LACP。完成此操作后,来自 PF 的 VF 对基本上已在交换机端绑定,并且必须在客户机端为来自这些 PF 的所有 vf 绑定。LACP 是一种链路层协议,而不是基于 MAC 地址的协议。它不会通过 LACP 将路径绑定到特定的 MAC 地址,而是将物理端口绑定在一起,这些物理端口承载 PF 和所有 VF 的流量。
答案2
您需要在 SR-IOV 交换机上禁用欺骗检查。当您在客户机中绑定接口时,绑定会更改接口 MAC。SR-IOV 交换机通常会丢弃任何不是来自其自己的 PF 或 VF 的帧。这称为欺骗检查。
除此之外,这应该可以正常工作。