我有一个由 3 个主机组成的 HyperV 集群。每个主机都连接到在以太通道中运行的两个 Nexus 5548 交换机。交换机上的 LACP 和服务器端使用 Broadcom 802.3ad 的 NIC 组合。这为我提供了 2GB 的带宽,还提供了容错能力。
我遇到的问题发生在执行实时迁移时。实时迁移之前,两个 Nexus 交换机都在 ARP 表中显示虚拟机的 MAC。迁移后,一个交换机显示虚拟机的 MAC,另一个交换机显示其移动到的 HyperV 主机的 MAC。
我运行了数据包捕获,发现 HyperV 主机发送了一个免费 ARP,其中包含虚拟机的 IP 和主机的 MAC,而不是虚拟机的 MAC。发生这种情况时,我会失去第 3 层连接。我必须手动清除交换机中的 ARP 条目或等待大约 7 分钟才能自行纠正。
我四处查看了一下,人们在使用 Broadcom 处理 NIC 组合时也遇到了类似的问题。有人遇到过这种情况吗?有什么建议吗?
-------- 下面添加编辑
我只在使用 Link Aggregation 802.3ad 进行组合时才遇到此问题。Broadcom 组合选项包括...
- 链路聚合(802.3ad)
- 智能负载平衡 (TM) 和故障转移
- SLB(自动回退禁用
- 通用中继 (FEC/GEC) / 802.3ad-Draft 静态
我切换到智能负载平衡,并且虚拟机实时迁移时没有丢失任何网络连接。但是,Nexus 交换机上的 ARP 表是同步的,但它们显示的是主机的 MAC 地址,而不是虚拟机的 MAC 地址。这与我的想法相反。交换机的 ARP 表不应该显示虚拟机的 MAC 吗?如果不是,它们应该显示主机的 MAC,为什么?
答案1
好的。经过 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 的操作效率降低,但在某些设置中是必要的,例如当存在需要使用虚拟机的 mac 地址来分配 ip 地址的 dhcp 服务器时。通过设置此注册表项,您还应该在虚拟机连接到的所有远程站的 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
PS. 除了此注册表项仅在 >=basp6-1.5.1 上可用之外,它仅适用于 slb 组类型,而不适用于 lacp 或 gec 组。
话虽如此,我还是尝试了一下。首先,我申请创建了注册表项。然后,我将虚拟交换机更改为专用虚拟机网络模式。我快速重启了服务器。最后,当服务器重新上线时,我将虚拟交换机配置回外部模式并选择 BASP 虚拟适配器。我测试了实时迁移,一切都运行正常,Nexus 中的 ARP 表显示了 VM_IP 和 VM-MAC。太棒了!!!!
答案2
这是 SCVMM 中的设置。我遇到的问题和你一样,直到我为主机打开中继模式。如果你在 SCVMM 中右键单击主机 --> 属性 --> 网络选项卡