windows的NLB协议特殊性导致下挂在S93交换机的集群主机业务异常

发布时间:  2014-09-12 浏览次数:  300 下载次数:  0
问题描述
      + 内网 +
    +            +
  +                +  
S93-1++++++S93-2
  +                +
  +                +
  +                +
集群主机-1+++集群主机-2
  +                +
    +            +
       + 公网  +
集群主机提供代理服务器功能,两台S93起VRRP,心跳由S93间的线路完成,作为下挂集群主机的网关
主机间运行windows的NLB集群协议,主机间的连线不能透传其他数据,仅用于主机间的集群消息通信
告警信息
集群主机业务不正常,体现为时断时序
处理过程
1 查询arp表项,发现S93未正常学习集群主机ARP,通过抓包发现,集群主机发送的ARP报文中,二层头部的源MAC和ARP协议中的MAC字段不一致,更新S93补丁后,S93可以处理此类报文,ARP学习正常
ARP及MAC相关信息:
集群主机1 IP 1.1.1.2 MAC:02bf-0a46-ed3a 
集群主机2 IP 1.1.1.3 MAC:02bf-0b46-ed3a 
集群需地址:IP 1.1.1.1 MAC:02bf-0146-ed3a 
此时S93上学到的ARP,02bf-0146-ed3a ---1.1.1.1
2 但此时业务仍然时断时续,详细了解NLB协议后,发现windows推荐起NLB协议的主机下挂于二层交换机,如果挂于三层交换机,则要求交换机在报文转发时查询ARP表项后,需要再次查询MAC表项后转发。
NLB原理简单描述如下:
集群主机1/2能回应ARP报文,对应02bf-0146-ed3a ---1.1.1.1
但正常的业务报文中,二层头只以源MAC:02bf-0a46-ed3a或02bf-0b46-ed3a发送,源IP均为1.1.1.1,交换机不能正常学习到02bf-0146-ed3a的MAC,所以每次下行的报文均以广播方式发送到VLAN各端口下,各服务器再选择性处理相关报文。
S93交换机在发送报文时只查询ARP表项,在查询到此ARP对应两台主机的其中一个端口后,发送至其中一台服务器,所以导致业务时断时续。
在了解以上特性后,将组网改成以下方式,添加两台二层交换机,解决问题
两台S93起VRRP,心跳由S93间的线路完成,作为下挂集群主机的网关
S33纯二层透传,通过STP相关设置,正常状态下3号链路处于阻塞状态
此种组网下需务必保证2号和4号链路可靠
S93-1++4号链路++S93-2
  +                +
  +                +
1号链路           3号链路
  +                +
  +                +
S33-1++2号链路++S33-2
  +                +
  +                +
  +                +
  +                +
  +                +
集群主机-1+++集群主机-2
以上组网中
S93能正常学习ARP,02bf-0146-ed3a ---1.1.1.1---1号链路端口
业务下行报文,S93恒定通过1号链路发送至S33-1,S33-1无法查询到MAC:02bf-0146-ed3a ,广播发送至VLAN各端口,包括2号链路对端的S33-2下同VLAN端口
根因
1 主机集群异常
2 S93数据转发异常
建议与总结
由于WINDOWS的NLB协议特殊,对接交换机时请特别注意以下两点:
关键点1 起NLB负载均衡协议的主机发送的ARP报文中,二层头部的源MAC和ARP协议中的MAC字段不一致,要求交换机对此类ARP进行处理。通过查看ARP表项可以确认
关键点2 windows推荐起NLB协议的主机下挂于二层交换机,如果挂于三层交换机,则要求交换机在报文转发时查询ARP表项后,需要再次查询MAC表项后转发(交换机无法查询到ARP中的那个MAC,广播发送),如果交换机只查询ARP表项转发,则产生异常。可以通过“处理过程”中的组网新增二层交换机解决

END