Windows NLB(网络负载均衡)是 Microsoft 在Windows 2000 Server 开始在操作系统上提供的一种负载平衡技术。NLB 使用一种分布算法将负载均衡分布到多台主机上,从而提高基于 IP 的关键型服务(例如 Web、虚拟专用网络、流媒体、终端服务、代理等等)的可伸缩性和可用性,同时可检测主机故障并自动将流量重新分配给其他操作主机,从而提供高可用性。


Windows NLB有单播与多播两种模式,两种模式原理各有不同,


1、单播模式下,NLB服务会重新对每个节点中启用NLB的网卡分配MAC地址(此MAC地址称为群集MAC地址),并且所有的NLB节点均使用相同的MAC地址(均使用群集MAC地址),同时NLB会修改所有发送的数据包中的源MAC地址,这样就导致交换机不能将此群集MAC地址绑定在某个端口上。 工作在单播模式下的NLB可以在所有网络环境下正常运行(兼容性最好);


2、多播模式下,NLB不会修改NLB节点启用NLB的网络适配器的MAC地址,而是为它再分配一个二层多播MAC地址专用于NLB的通讯(此MAC地址称为群集MAC地址),这样NLB节点之间可以通过自己原有的专用IP地址进行通讯。

二、案例分析

下面通过一个最近在客户遇到的实际案例来解释两种模式的不同:


近期客户需要进行网络改造,但是在改造后一个Windows NLB群集无法使用。现场查看情况为此群集原采用多播模式使用,网络改造将原二层交换机变更为三层交换机。通过多播模式的特性分析,多播模式使用多播MAC地址专用于NLB的通讯这样就出现了一个多播MAC地址对应一个非多播IP(群集IP)的情况,这是会被不支持的三层交换机和路由器拒绝的一种情况。解决这种问题可以手工在路由器或交换机上添加群集IP对应多播MAC的静态数据。


但是经过客户验证,网络改造后的三层交换机不支持添加静态数据,所以唯一的解决方案只能将多播模式切换为单播模式。手工将NLB群集切换为单播模式后发现群集IP无法ping通,负载均衡管理器也无法连接管理,群集承载网站也无法访问。分析可能由于群集IP无法被找到所以出现这样的情况。查看群集各个节点网卡属性,发现启用负载均衡的网卡均只有自己的IP地址,而群集IP没有被添加成功,如下图在TCP/IP高级选项中进行手工添加群集IP后再验证,群集恢复正常,负载均衡也正常工作。

 
三、两种模式存在的问题及解决办法

通过这个案例及单播和多播的特性我们可以发现以下问题:

单播:

1、由于NLB所使用的群集MAC地址没有绑定在某个具体的交换机端口上,所以所有的NLB通讯均通过在交换机的所有端口上广播进行,这就出现了交换机泛洪的现象,可以通过将所有NLB节点添加到一个VLAN中隔离广播的办法解决。


2、由于所有的NLB节点具有相同的MAC地址,所以NLB节点之间不能通过自己原有的专用IP地址进行通讯。 (节点之间就无法ping通)。我们可以采用双网卡来解决节点间通信问题,一块网卡用于启用负责均衡,一块网卡用于节点间通讯。

多播:

1、多播模式下NLB节点之间可以通过自己原有的专用IP地址进行通讯,但是群集IP对应一个多播MAC进行通讯,可能会被不支的路由器或一些交换机拒绝,必须通过在网络设备中添加静态数据的方法解决。


2、由于交换机所有端口中都是使用各个节点实际IP与MAC注册而群集使用多播MAC,所以交换机收到群集的数据包发现交换机没有一个端口是对应群集多播MAC就仍然会广播到所有端口,这样就仍然有交换机泛洪的问题。解决方法也可以采用和单播一样的使用VLAN解决,此外还可以通过勾选IGMP 多播来解决交换机泛洪,但是需要交换机支持此功能。


最后建议如果NLB节点服务器只有一块网卡,请使用多播模式;如果NLB节点服务器拥有多块网卡,或者网络设备(如二层交换机与路由器)不支持多播模式,则可以采用单播模式。