我有以下简化的配置:
本质上,我有一个带有两个物理网络适配器的 ESXi 主机。每个适配器插入不同的开关。每个交换机都通过一个中继端口连接。一台 PC 连接到其中一个交换机。具有 VMKernel 端口和 VM 端口的 vSwitch 配置为在 Active/Active 配置中使用两个物理 NIC:
我已经运行esxtop
,可以看到 ESXi 主机选择了连接到交换机 2 的物理网卡作为 VMKernel 端口。从 PC 上,如果我 ping ESXi 主机的管理 IP 地址,则 ping 是间歇性的。他们上上下下。
如果我在每台交换机上显示 MAC 地址表,我会看到交换机 2 始终将 VMKernel 的 MAC 地址分配给连接到 ESXi 主机的交换机端口。但是,交换机 1 在其各自的物理端口上不断添加和删除 VMKernel 的 MAC 地址。每当交换机 1 将 VMKernel 的 MAC 分配给其物理端口时,ping 都会失败。
失败的原因是显而易见的。Switch 1 例行获取 ESXi VMKernel 端口的 MAC 地址的原因是问题所在。ESXi 主机已选择连接到交换机 2 的接口作为活动端口。连接到 Switch 1 的接口应该处于非活动状态。但是,看起来它可能正在响应 ARP 请求?
值得注意的是,这台主机上的所有虚拟机都没有这个问题。它们都是可访问的,并且一次只出现在一个 MAC 表中。此问题特别影响 VMKernel 端口。
这个配置有问题怎么办?我正在寻找某种类型的文档或解释来解决这个问题。我知道将 VMKernel 端口设置为活动/待机模式可能会解决问题。但是,我找不到任何记录为什么这个当前配置是一个问题。
更新:
- 我在 vSwitch 上禁用了 CDP,认为它可能会导致通过非活动 NIC 进行通信。
- 我覆盖了 VMKernel 端口的 vSwitch 设置,并将其设置为使用显式故障转移和 Active/Standby。我还将备用网卡放在未使用的池中。没有任何帮助。解决这个问题的是改变端口顺序。因此,当连接到交换机 1 的端口变为活动状态时,我看不到问题。MAC 地址在 Switch 2 上根本没有激活。这是两张截然不同的网卡,我想知道这是否不是某种驱动程序问题。
一定是某些原因导致 VMKernel MAC 地址在交换机 1 的端口上出现,但它每隔几秒钟就会出现一次。
STP 和端口的交换机配置:交换机 1
!
spanning-tree mode rapid-pvst
spanning-tree portfast edge default
spanning-tree extend system-id
!
interface Port-channel1
switchport access vlan 11
switchport trunk encapsulation dot1q
switchport mode trunk
!
interface GigabitEthernet1/0/7
switchport access vlan 11
switchport mode access
!
interface GigabitEthernet1/0/23
switchport access vlan 11
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode desirable
!
interface GigabitEthernet1/0/24
switchport access vlan 11
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode desirable
开关 2
!
spanning-tree mode rapid-pvst
spanning-tree portfast edge default
spanning-tree extend system-id
!
interface Port-channel1
switchport access vlan 11
switchport trunk encapsulation dot1q
switchport mode trunk
!
interface GigabitEthernet1/0/3
switchport access vlan 11
switchport mode access
!
interface GigabitEthernet1/0/23
switchport access vlan 11
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode desirable
!
interface GigabitEthernet1/0/24
switchport access vlan 11
switchport trunk encapsulation dot1q
switchport mode trunk
channel-group 1 mode desirable
ESXI 中的管理 vmk 在初始设置期间假定第一个 PCI 插槽中的 Nic 的 MAC 地址。这就是它永远有效的方式。只有当物理设备也开始发送数据包时,这才会破坏事情。这通常不会发生,物理网卡不发送流量,它们传递流量。如果您决定将物理网卡从一台主机移动到另一台主机,也需要注意此行为,这会在物理交换机出现故障时导致 2 个主机连接中断。我的猜测是,这个 Nic 开始报告 CDP/LLDP 流量,这是您的交换机看到 MAC 重复的时候。最简单的解决方案是通过命令行重建 vmk。这需要通过直接控制台访问 (DCUI)(KVM、ILO、IDRAC 等)来完成。
这是命令;(调整 IP/子网掩码/端口组名称等...以满足您的需要。)
esxcli 网络 ip 接口删除 --interface-name=vmk0
esxcli network vswitch 标准端口组添加 -p Management_Network -v vSwitch0
esxcli 网络 ip 接口添加 --interface-name=vmk0 --portgroup-name=Management_Network
esxcli network vswitch 标准端口组设置 -p Management_Network --vlan-id 50
esxcli 网络 ip 接口 ipv4 设置 --interface-name=vmk0 --ipv4=192.168.50.116 --netmask=255.255.255.0 --gateway=192.168.50.1 --type=static
esxcli network ip interface tag add -i vmk0 -t 管理
这将使用 VMware MAC 地址重建管理 vmk 以消除此问题。但是,我建议您联系硬件供应商/制造商,了解如何关闭来自物理卡的 CDP/LLDP。这将解决这一 ESXi 主机问题,但如果您允许卡继续执行此功能,您最终会遇到其他问题。如果这问题真的像你原先想的那么大,VMware 就不会是大公司了,这不是很常见……
多年来,我一直在运行非常相似的设置,没有任何问题。
你是如何配置交换机端口的?您不应该做任何特别的事情(没有(M)LAG/LACP),因为 ESXi 会处理所有事情。堆叠交换机很好,只是不要聚合端口,配置任何链路状态镜像或类似的东西。
Switch2 应该在面向 ESXi 的端口上永久拥有 VMkernel 端口的 MAC,在面向交换机 2 的端口上永久拥有 switch1。
MAC 来回摆动可能是由另一个问题引起的,例如频繁的 STP 拓扑更改(ESXi 通常不可见,但可能仍然存在)。检查交换机的日志是否有任何异常。
没有任何 LAG,只有在主机实际将带有 VMK 端口 MAC 的帧发送到交换机 1 时才会发生这种情况。除非到 switch2 的链接失败,否则它通常不会这样做。
对于 VMK 端口,是的。可能有 VM 流量附加到同一端口组。
ARP 与否,带有 VMK 端口 MAC 的帧不会无缘无故地来自另一个端口。
您发布的交换机端口配置显示您正在使用催化剂交换机上的端口通道。
只是不要那样做!对于独立的 ESXi 主机,这不受支持。ESXi 仅在软件内自行处理负载平衡和故障转移。如果您绝对想使用基于外部交换机的端口通道,那么这需要您使用 vCenter 和分布式交换机。
有关详细信息,请参阅https://kb.vmware.com/s/article/82609和https://kb.vmware.com/s/article/1001938。