原文地址

http://bbs.vmsky.com/thread-35010-1-1.html


      最近对esx5i负载均衡策略中的默认“基于源虚拟端口ID的路由”做了一些分析,非常有意思分享给大家。
   先描述一下场景:
     一台ESX5i服务器有6台VM(姑且用VM1、VM2、VM3、VM4、VM5、VM6来称呼),两块物理网卡做负载均衡(依次显示vmnic0和vmnic1)—默认的做法,两网卡分别依次对应到对端Cisco 2950上的fa0/1和fa0/2口上,通过分析cisco2950上MAC表来分析vmnic0或vmnic1承载VM的数量。

     1:依次启动VM虚拟机,VM1走vmnic0,VM2走vmnic1,VM3走vmnic1,VM4走vmnic0,VM5走vmnic0,VM6走vmnic1。
          VM1、VM4、VM5走的是vmnic0网口
          VM2、VM3、VM6走的是vmnic1网口

     2:shutdown vmnic1对应的网口后,VM2、VM3、VM6自动转移到vmnic0上承载。后重新开启vmnic1后,VM2、VM3、VM6自动又转移回vmnic1上

     3:人为关闭VM2、VM3、VM6虚拟机,VM1、VM4、VM5并没有自动转移到vmnic1上,哪怕是一个VM,关闭VM1后又重启,发现VM1走到了vmnic1上了。

    总结:
       1:在默认的“基于源虚拟端口ID的路由”策略下,每一个VM的数据流(上下行)实际上跑的是一个网口(vmnic1或vmnic0),也就是说任何一个VM虚拟机的数据流并没有被这两个网口分担。
       2:初始开启的VM虚拟机使用哪一个网口来负载的判断原则是网口上承载VM的数量,而不是网口自身资源的负载压力,这样的判断原则有可能会出现有的网口压力非常大,而有的网口非常闲置。
       3:系统正常运行中(上述1),添加网口vmnic2,则虚拟机会重新分配负载平衡,数量是2—2—2模式(三网卡模式下)。
       4:添加和删除网口,对极个别VM会造成一个包的丢失。
       5:建议大家根据VM的要承载数据量的大小,使用vmnetwork端口组中负载均衡设置,人为的指定承载网口和待定网口,最优化使用网口资源。

----------------------------------------------

基于端口的负载均衡 (Route based on the originating virtual port ID)
这种方式下,负载均衡是基于vPort ID的。一个vPort和Host上的一个pNIC(从vSwitch角度看就是某个uplink)捆绑在一起,只有当这个pNIC失效的时候,才切到另外的pNIC链路上。这种方式的负载均衡只有在vPort数量大于pNIC的数量时才生效。