VMware ESX多网卡负载均衡引起的网络问题

发布时间:  2014-09-11 浏览次数:  869 下载次数:  0
问题描述


如上图组网,汇聚交换机为CE12808 V100R001C01SPC100,一台物理机上运行两台虚拟机,并且该物理机通过两个网卡进行网络流量负载均衡,分别连接到两台接入交换机上。
业务系统服务器端通过微软NLB负载均衡在两台虚拟机上,客户端从其他区域通过汇聚交换机进来访问该业务系统。设备上线后,发现有大约一半的客户端无法建立到服务器的连接,业务中断。
由于知道该业务系统使用NLB的组播模式,即该系统虚IP为单播IP地址,但是虚MAC为组播MAC地址,因此我们为该系统在汇聚交换机上配置了短静态ARP:arp static 1.1.1.3 03bf-0000-0001。这样,汇聚交换机就能自动学习该系统虚地址的ARP条目,指向正确的出接口。
其中,虚拟机1的IP地址为1.1.1.1,mac地址为0050-0000-0001,虚拟机2的的IP地址为1.1.1.2,mac地址为0050-0000-0002,该业务的NLB虚地址(即对外提供服务的地址)为1.1.1.3,mac地址为03bf-0000-0001.
告警信息
无。
处理过程
方法1:
为避免两种负载均衡结果不一致,最简单的办法就是取消其中一种负载均衡。由于NLB负载均衡属于应用层面,不宜进行改动,因此我们将网络层面的ESX多链路负载均衡取消,改为单链路上行,或仍保持双链路上行,但双链路都连接至同一台接入交换机,这样就能够保证在汇聚交换机上看到服务器虚地址的ARP条目出接口有且只有一个。

方法2:
创建多条汇聚交换机上服务器虚地址的ARP条目,分别对应不同的出接口,指向不同的接入交换机。
此方法要求将CE12808升级到V100R002版本,再使用如下命令:
[Switch_1] mac-address multiport 03bf-0000-0001 interface 10ge 1/0/1 to    10ge 1/0/2 vlan 10
其中10GE1/0/1与10GE1/0/2分别为汇聚交换机上分别连接接入交换机1和接入交换机2的端口号。
根因
从客户端发来的目的地址为NLB虚地址的请求数据包到达业务系统服务器所在的汇聚层交换机时,根据该交换机上的ARP条目信息,无论是静态配置的ARP还是自动学习的ARP,出接口通常只有一个,指向接入交换机1或接入交换机2,假设ARP条目的出接口指向接入交换机1。这种情况下,该业务请求报文只会发到虚拟机1上,虚拟机2不会收到该报文。而此时,如果微软NLB负载均衡将此业务分发到虚拟机2进行处理,那么虚拟机2由于没有收到报文,从而导致业务不正常。
而如果此时恰好NLB将该业务分发至虚拟机1进行处理,那么业务就正常。

总之,业务是否正常,决定于VMware ESX的负载均衡结果与NLB的负载均衡结果是否一致,如果一致,则业务正常;如果不一致,则业务出现问题。
建议与总结
当同时使用多种负载均衡时(包括网络负载均衡、应用负载均衡),需要注意多种负载均衡是否同步。

END