How NLB works

这两天试了一下 Microsoft NLB(Network Load Balance),顺手记些笔记。

1)Aim:higher availability, greater scalability, 使用一种分布算法将访问Clustern的负载均衡分布到多台Host Server上,并且可检测主机故障并自动将流量重新分配给其它Host Server。

2)配置起来非常简单,需要注意的就是单播和多播的方式,以及Port Rule的配置。

3)NLB的实现有单播和多播的方式,在单播模式下,所有的Host Server都被赋予一个虚拟的Mac地址(02-BF开头,其后跟随的内容则取决于配置的Cluster IP 地址, 这也正是Token Ring不支持NLB的原因,令牌环网络不允许多台主机共用一个 MAC 地址),并且所有的Host Server都会有相同的一个虚拟IP地址,访问这个虚拟地址的IP数据报将会被所有的Host Server接收到。说起来简单,其实为了应对各种Switch和Hub,NLB采用了几种方法来实现,比如HUB的Broadcast,比如对一些Switch的Disable Learning,等等。当所有的Host Server都接收到请求此NLB的包后,会由一个Distributed Mapping算法,根据客户端的IP,Port,预先配置的负载比重等其他信息,确定具体由哪一个Host具体执行这个请求,其它Host简单的丢弃这个Message。

如果是多播,就会分配一个二层多播MAC地址专用于NLB的通讯,但是需要在Router上添加静态的ARP映射,将Cluster IP映射到多播的MAC地址。其后是一样的。

对了,如果是单播,Host Server之间会无法访问,为什么?如果你熟悉ARP协议,这个问题应该不难想到。

4)Port Rule,也就是端口规则。其实不难理解,试想一个Web Application,如果Client对Server的每次访问被定向到不同的Host Server上,那么像Shopping Cart等这种基于Session的程序将无法工作。NLB提供了很多种Port规则,比如相同Client IP Mapping到同一个Host Server,相同IP和Port Mapping到同一个Host Server,或者相同IP C网段映射到同一个Host Server等等。

5)Host Server之间保持HeartBeat,来确定所有的Host Server都还活着,否则就要重新Converge。HeartBeat也是发送到Host Virtual IP的,具体的IP祯也需要修改其中的SRC MAC地址和DES MAC地址。

6)来张Architect图:

7)有篇介绍NLB技术具体实现的非常好的文章,读完就会明白它是怎么work的了。

http://www.microsoft.com/technet/prodtechnol/windows2000serv/deploy/confeat/nlbovw.mspx

Popularity: 27% [?]

Related entries:

2 Responses to “How NLB works”

  1. BunnyQ Says:

    不知有没有开源又好用的负载平衡系统

  2. Meng Yan Says:

    BunnyQ,backhand.org就提供一套针对Apache的Load Balance解决方案,不过我没有试过:)

Leave a comment

(required)

(required)


Information for comment users
Line and paragraph breaks are implemented automatically. Your e-mail address is never displayed. Please consider what you're posting.

Use the buttons below to customise your comment.


RSS feed for comments on this post | TrackBack URI