今天讨论拓扑中负载均衡部署在冗余网络结构下,服务器双网卡的切换问题。

图一

图一拓扑中四台服务器与负载均衡直接相连,每台服务器双网卡各连接一台负载均衡,负载均衡热备模式部署,服务器双网卡也绑定为主备模式。当负载均衡发生主备切换时,服务器的主备网卡也跟随切换。其实这样的应用需求非常的普遍,但实际网络拓扑更常见是的如图二所示结构。服务器不直接与负载均衡连接,服务器数量也不必受到负载均衡物理接口数量的限制,这样的网络架构,一对负载均衡设备可以为几百台服务器提供应用交付。

图二

先看看图二中主备切换时,服务器网卡是如何切换的。服务器双网卡绑定为主备模式,主备网卡的切换条件通常配置为链路检测,发现链路中断时,主备网卡自动切换。从服务器的角度看,冗余链路的主备切换分两种,第一种,服务器到交换机连接链路down掉的主备切换,交换机死机和链路故障都属于这类切换,此时服务器网卡也会进行主备切换;第二种,连接链路是up时的主备切换,此时服务器主备网卡不发生切换,但交换机之间启用VRRPHRSP协议,两台交换机之间的连接线除了传输交换机的状态信息外,也可以传输业务数据。服务器数据报文传输链路如图三所示,网络发生主备切换时,服务器依然能正常接入网络。

图三

但第二种主备切换发生在图一拓扑中时就会遇到问题,原因是负载均衡HA心跳线只传输ha相关数据,不传输业务数据,因此当负载均衡主备切换,而服务器网卡不能主备切换时,服务器是无法接入网络的。

这里提供两种解决方案:

方案一、改变服务器双网卡主备模式的检测方法:以linux服务器为例,服务器双网卡绑定在网络上常见的配置参数如下,millmon=100是对链路状态检测的配置项,这也是上述无法主备切换的原因。

/etc/modprobe.d/bonding.conf 

alias bond0 bonding

options bond0 mode=1 miimon=200

mode=1表示主备模式

millmon=100,表示每100ms监测一次链路连接状态

 

可以将链路状态检测改为arp请求检测,当负载均衡发生主备切换时,主网卡向原来的主负载均衡发送arp请求,由于floating-ip已经漂移到新的主设备上,原来的主设备不会回应服务器的arp请求,服务器arp请求超时后,主备网卡发生切换。服务器双网卡绑定检测方式更改如下:

/etc/modprobe.d/bonding.conf 

alias bond0 bonding

options bond0 mode=1 arp_interval=60 arp_ip_target=2.2.2.1 arp_validate=all

mode=1表示主备模式

arp_interval =100表示100毫秒发一次arp请求

arp_ip_target=2.2.2.1表示主网卡发出的arp请求,IP一般是服务器网关地址,这网关地址在图一拓扑中是负载均衡的floating-ip

arp_validate=all arp保持验证,一定要配置不然无法实现预期的网卡切换。

方案二、负载均衡实现服务器vlan的数据透传:当服务器受操作系统或其他原因限制,无法通过更改服务器配置实现双网卡主备切换时,可以采用此解决方案。两台负载均衡设备之间除了HA心跳线,还需要一条打通主备负载均衡上服务器段vlan的链路,最简单方法是在两台设备之间再增加一条连接链路,其作用是实现如图三所示的数据传输。

负载均衡新增配置较为简单,主备设备只需将新增链路接口划入服务器所在vlan,接口类型为tagged即可。

vlan 10

untagged ethernet 1 to 4

tagged ethernet 7

router-interface ve 10

name " servers"

从整体上来说,方案一实现服务器双网卡的主备切换更为合理,方案二是非常规环境下,负载均衡设备完全通过自身配置调整的解决之道,是没有办法的办法。

(ZWM)