NIC 在 HyperV 2008 R2 上与 Broadcom 合作

Rui*_*isu 7 nic arp mac-address hyper-v-server-2008-r2 broadcom

我有一个由 3 个主机组成的 HyperV 集群。每台主机都连接到我在以太通道中运行的两台 Nexus 5548 交换机。交换机上的 LACP 和服务器端使用 Broadcom 802.3ad 的 NIC 组合。这为我提供了 2GB 的带宽并提供了容错能力。

我在执行实时迁移时遇到的问题。在实时迁移之前,两个 Nexus 交换机都会在 ARP 表中显示 VM 的 MAC。迁移后,一台交换机显示 VM 的 MAC,另一台显示它移动到的 HyperV 主机的 MAC。

我运行了一个数据包捕获,看到 HyperV 主机发送了一个免费的 ARP,其中包含 VM 的 IP 和主机的 MAC,而不是 VM 的 MAC。发生这种情况时,我会失去第 3 层连接。我必须手动清除交换机中的 ARP 条目或等待大约 7 分钟以使其自行更正。

我环顾四周,人们在使用 Broadcom 处理 NIC 组合时遇到了类似的问题。有没有人看到这个?有什么建议吗?

-------- 编辑在下面添加

我只在使用 Link Aggregation 802.3ad 进行组队时遇到这个问题。Broadcom 团队选项是...

  • 链路聚合 (802.3ad)
  • 智能负载平衡 (TM) 和故障转移
  • SLB(自动回退禁用
  • 通用中继 (FEC/GEC) / 802.3ad-Draft Static

我切换到 Smart Load Balancing 和 VM Live Migrate,而不会丢失任何网络连接。但是,Nexus 交换机上的 ARP 表是同步的,但它们显示的是主机的 MAC 地址,而不是 VM。这与我认为它会做的相反。交换机的 ARP 表不应该显示 VM 的 MAC 吗?如果没有,他们假设显示主机的 MAC,为什么?

Rui*_*isu 3

好的。经过三周的激烈战斗,我终于弄清楚了。

我向 Broadcom 支持部门立了一个案例,经过几天的反复讨论,以下是我从 Broadcom 软件开发人员那里收到的回复。


对于许多网络来说,在远程站或交换机上看到(vm_ipv4,host_mac_addr)或(vm_ipv6,host_mac_addr)对是可以的。Basp 将处理地址的复用并确保虚拟机获得正确的数据包。

但是,一些网络配置需要将 IP 地址映射到 vm_mac_addr。如果要使用 vm_mac_addr 而不是 host_mac_addr,则需要添加下面列出的 HyperVMode 注册表项。

如果不想复用虚拟机的 MAC 地址,即不将其替换为网卡的 MAC 地址,则需要在虚拟机运行的主机上设置以下注册表项,然后重新启动系统以使其生效影响。设置此注册表项会导致 basp 操作效率降低,但在某些设置中是必要的,例如当有 dhcp 服务器需要使用虚拟机的 MAC 地址来分配 IP 地址时。通过设置此注册表项,您还应该在虚拟机连接到的所有远程站的 arp 表中看到虚拟机的实际 MAC 地址。

可以在创建团队之后、创建使用该团队的 hyper-v 虚拟适配器之前添加此注册表条目。值 1 将配置 basp 在负载平衡流时使用虚拟机的 mac 地址,而不是 slb 组中网卡的 mac 地址。值为 0 或不存在时,会将 basp 配置为将虚拟机的 MAC 地址与团队中某个网卡的 MAC 地址进行复用/解复用。

将注册表路径中的“1”设置为要应用此模式的正确团队编号,然后重新启动系统。请注意,删除团队时此注册表项将被删除,并且每次创建团队时都必须重新创建。BACS 的未来版本将有一个复选框,用于设置此注册表项,并防止在创建团队和重新启动系统时添加它。此注册表项仅在 >=basp6-1.5.1 上可用。

Windows 注册表编辑器版本 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Blfp\Parameters\1] “HyperVMode”=dword:00000001

附言。除了此注册表项仅在 >=basp6-1.5.1 上可用之外,它仅适用于 slb 团队类型,不适用于 lacp 或 gec 团队。


话虽如此,我还是尝试了一下。首先,我应用创建了注册表项。然后,我将虚拟交换机更改为专用虚拟机网络模式。我快速重启了服务器。最后,当服务器重新上线时,我将虚拟交换机配置回外部模式并选择 BASP 虚拟适配器。我测试了实时迁移,一切正常,Nexus 中的 ARP 表显示了 VM_IP 和 VM-MAC。耶!!!!