网络负载平衡(Network Load Balancing)的工作原理

原文网址:http://www.joycode.com/ghj/archive/2009/03/17/115513.joy
==========================================================

最近正在研究如何把CSDN的论坛WEB服务器实现负载平衡(NLB)。下面就是我整理资料笔记:

NLB 的工作原理

NLB算法的特点:

  • 在NLB群集中,每台服务器都会有一个属于自己的静态IP地址,同时NLB群集中的所有服务器还有一个共同的IP地址—NLB群集地址;
  • 当 客户向NLB群集(NLB的虚拟IP地址)发起请求时,其实客户的请求数据包是发送到所有的NLB节点(即:NLB算法需要NLB群集中的所有主机都能看 到发往群集的每一个数据包。),然后运行在NLB节点上的NLB服务根据同样的NLB算法来确定是否应该由自己进行处理,如果不是则丢弃客户的请求数据 包,如果是则进行处理。 
  • 网络负载平衡使得单个子网上的所有群集主机可以同时检测群集 IP 地址的传入网络通信。在每个群集主机上,网络负载平衡驱动程序充当群集适配器驱动程序和 TCP/IP 堆栈间的过滤器,以便在主机间分配通信。

要确保上面算法的特点,单播(Unicast ),多播(Multicast)实现NLB就会有以下的特点:

NLB中的单播(Unicast)

      在单播模式下,NLB重新对每个NLB节点中启用NLB的网络适配器分配MAC地址(此MAC地址称为群集MAC地址),并且所有的NLB节点均使用相同 的MAC地址(均使用群集MAC地址),同时NLB修改所有发送的数据包中的源MAC地址,确保使交换机不能将此群集MAC地址绑定在某个端口上。

      工作在单播模式下的NLB可以在所有网络环境下正常运行,但是由于它的工作特性,具有以下两个限制:

  • 由于NLB所使用的群集MAC地址没有绑定在某个具体的交换机端口上,所以所有的NLB通讯均通过在交换机的所有端口上广播进行,而不管此端口是否连接了NLB节点,这造成了额外的网络流量负担;
  • 由于所有的NLB节点具有相同的MAC地址,NLB节点之间不能通过自己原有的专用IP地址进行通讯。

     单播模式的优点也很明显:它可以无缝地与大多数路由器和交换机协同工作。

     如下图所示:

Image1189

单播的其他注意项:

  • 在Windows server 2003 SP1中,微软修改了NLB单播模式的驱动,从而支持阵列成员通过自己原有的专用IP地址进行通讯,详细信息请参见KB898867,Unicast NLB nodes cannot communicate over an NLB-enabled network adaptor in Windows Server 2003。
  • 若我们在NLB创建时选择单播的模式,在“群集IP配置”中的“网络地址”是以“02 - BF”开头,后面紧跟IP地址的十六进制表示,该网络地址与实际主机的MAC地址相同,后续加入的主机也将修改为此MAC地址。

参考:

单播模式下的单个网络适配器
http://technet.microsoft.com/zh-cn/library/cc757150.aspx
单播模式下的多个网络适配器
http://technet.microsoft.com/zh-cn/library/cc786134.aspx

NLB中的多播(Multicast)

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

      但是在多播模式中,NLB节点发送的针对群集IP地址MAC地址ARP(Address Resolution Protocol,地址解析协议)请求的ARP回复会将群集IP地址映射到多播MAC地址,而许多路由器或者交换机(包括CISCO的产品)会拒绝这一行 为。当出现这种情况时,你必须在路由器和交换机上手动添加静态映射,将群集IP地址映射到群集的多播MAC地址。

         这种模式的优点是可以通过在交换机的“内容可寻址存储器”(CAM) 表中创建静态项,从而使得入站流量仅到达群集中的主机。

      还有一个缺点就是很多路由器不会自动将单播 IP 地址(群集的虚拟 IP 地址)与多播 MAC 地址关联起来。如果进行静态配置的话,一些路由器可以存在这种关联。若我们在NLB创建时选择多播的模式,在“群集IP配置”中的“网络地址”是以“03 -BF”开头,后面紧跟IP地址的十六进制表示。

      如下图所示:

 

 

Image1193

 

 

IGMP Multicast(IGMP多播)

      NLB算法需要NLB群集中的所有主机都能看到发往群集的每一个数据包。NLB不允许交换机将群集的MAC地址关联到交换机的某个特定端口,从而实现了这 个目的。但是,这种做法也会带来不想要的副作用,就是发往NLB群集的所有数据包会在交换机上的所有端口上造成数据“洪水”。这不仅非常麻烦,而且必将会 造成网络资源的浪费。

      为了解决这个问题,一个被称作IGMP支持的新特性被引入到了Windows Server 2003之中。该特性有助于将数据“洪水”限制到交换机上与NLB计算机相连接的端口上。通过这种方式,非NLB的计算机不会看到发往NLB群集的数据, 而与此同时,所有的NLB计算机都可以看到发往群集的数据,因此满足了NBL算法的要求。但是,应该指出的是:IGMP支持只有在NLB被配置多播 (multicast)模式时才能启用。

      在选择多播模式时,后面还有个复选项“IGMP Multicast(IGMP多播)”,若复选此项,就像多播操作模式一样,NLB 保留原厂 MAC 地址不变,但是向网络适配器中增加了一个 IGMP 多播地址。此外,NLB 主机会发出这个组的 IGMP 加入消息。如果交换机探测到这些消息,它可以使用所需的多播地址来填充自己的 CAM 表,这样入站流量就不会扩散到 VLAN 上的所有端口。这是这种群集模式的主要优点。缺点是有一些交换机不支持 IGMP 探测。除此之外,路由器仍然支持单播 IP 地址到多播 MAC 地址的转换。在IGMP多播模式下,将采用“01 – 00 - 5E”开头的MAC地址。在多播的模式下,实体主机之间可以互相通信。

如下图所示:

cc758275_d1687ea3-0f58-46ce-ae65-208ee3aab8dc(en-us)

 

NLB对路由器的要求

当群集已配置为在多播模式下工作时,如果网络负载平衡客户端正在通过路由器访问一个群集,请确保路由器满足以下要求:

  • 接受地址解析协议 (ARP) 应答,此应答在 ARP 结构的有效负载部分有一个媒体访问控制 (MAC) 地址,但正如以太网报头所确定的,它看上去像来自具有另一个 MAC 地址的站点。
  • 接受单播 IP 地址的 ARP 应答,此应答在其 ARP 结构的有效负载部分有一个多播 MAC 地址。

单播模式对路由器没有要求。

 

 

参考:

多播模式下的单个网络适配器
http://technet.microsoft.com/zh-cn/library/cc759683.aspx

多播模式下的多个网络适配器
http://technet.microsoft.com/zh-cn/library/cc779600.aspx

 

附:单播(Unicast),多播(Multicast),广播(Broadcast) 的区别:

单播:

主 机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相 同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将 IP单播数据传送到其指定的目的地。
单播的优点:
1. 服务器及时响应客户机的请求
2. 服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。
单播的缺点:
1. 服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
2. 现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞,只要有5%的客户在全速使用网络,其他人就不要玩了。而将主干扩展20倍几乎是不可能。

多播(组播):

主 机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机 可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多 个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。
组播的优点:
1. 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
2. 由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个(268435456)组播,所以其提供的服务可以非常丰富。
3. 此协议和单播协议一样允许在Internet宽带网上传输。
组播的缺点:
1.与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
2.现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。

广播:

主 机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路 径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数 据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
广播的优点:
1. 网络设备简单,维护简单,布网成本低廉
2. 由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
广播的缺点:
1.无法针对每个客户的要求和时间及时提供个性化服务。
2. 网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供 500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
3. 广播禁止在Internet宽带网上传输。

参考资料:  

Load Balancing and ASP.NET
http://www.hanselman.com/blog/LoadBalancingAndASPNET.aspx

Web Farming with the Network Load Balancing Service in Windows Server 2003
http://www.west-wind.com/presentations/loadbalancing/NetworkLoadBalancingWindows2003.asp

网络负载平衡算法 Works 内部怎样
http://support.microsoft.com/kb/556068/zh-cn?spid=3198&sid=770

WEB farm - Load Balancing in Asp.net
http://www.c-sharpcorner.com/UploadFile/gopenath/Page107182007032219AM/Page1.aspx

How to test web load balance
http://www.cnblogs.com/oscarxie/archive/2008/05/20/1203157.html

将asp.net迁移到Load Balance和NAS上的步骤
http://blog.joycode.com/hopeq/archive/2006/03/29/73762.aspx

微软知识库中的关于负载均衡的HowTo文章汇总
http://support.microsoft.com/ph/3198/zh-cn?sid=770&aid=1&GSA_AC_More1

TechNet 关于 网络负载平衡群集  的内容
http://technet.microsoft.com/zh-cn/library/cc759510.aspx     中文
http://technet.microsoft.com/en-us/library/cc759510.aspx      英文

下面文章中间谈到了负载均衡的工作原理
http://technet.microsoft.com/zh-cn/library/aa998796%28EXCHG.65%29.aspx

NLB配置中单播与多播区别
http://hi.baidu.com/hneli/blog/item/656725d3e5471433970a16bd.html

NLB群集
http://blog.sina.com.cn/s/blog_4b611a45010009hh.html

Using NLB with ISA Server Part 2: Layer 2 Fun with Unicast and Multicast Modes
http://www.isaserver.org/articles/basicnlbpart2.html

IP多播概述
http://www.microsoft.com/china/technet/community/columns/cableguy/cg0202.mspx

TCP/IP学习笔记之九 --- 广播和多播
http://blog.csdn.net/kmajian/archive/2008/11/27/3389667.aspx

网络负载平衡关键特性
http://technet.microsoft.com/en-us/library/cc758275.aspx

Network Load Balancing
http://www.msxfaq.de/verschiedenes/nlb.htm

Network Load Balancing Technical Overview
http://technet.microsoft.com/zh-cn/library/bb742455(en-us).aspx

网络技术基础知识一之ARP协议概说
http://cisco.chinaitlab.com/TCP/38035.html

nlb负载均衡架设教程图解在Server 2008上搭建域控制器 打开服务器管理,如下图所示: 1. 2 选择【角色】然后点击右侧新建角色,在“添加角色向导”页面点击【服务器角色】,如下图所示: 2. 3 勾选“Active Directory域服务” ,根据提示添加相应组件,然后点击【下一步】,如下图所示: 3. 4 选择【下一步】,如下图所示: 4. 5 点击【安装】,如下图所示: 5. 6 安装完成后点击关闭,如下图所示: 6. 7 在运行中输入dcpromo.exe,如下图所示: 7. 8 弹出Active Directory域服务安装向导,点击下一步,如下图所示: 8. 9 继续下一步,如下图所示: 9. 10 选择新建域,如下图所示: 10. 11 输入自定义域名点击下一步,如下图所示: 11. 12 林功能级别选择Windows server 2008 R2,点击下一步,如下图所示: 12. 13 勾选DNS服务器,点击下一步,如下图所示: 13. 14 选择是,单击下一步,如下图所示: 14. 15 选择文件存放路径,点击下一步,如下图所示: 15. 16 设置还原密码后点击下一步,如下图所示: 16. 17 查看配置信息,点击下一步,如下图所示: 17. 18 完成安装,如下图所示: 18. 19 选择不立即重启,如下图所示: 19. 20 打开网卡的IP配置信息,将DNS服务器设置为本机ip,如下图所示: 20. 21 重启服务器。 END 检测域是否建立成功 1. 1 打开第二台机器修改主机的DNS为域服务器ip,如下图所示: 2. 2 点击更改域和工作组,如下图所示: 3. 3 填入创建的域名,如下图所示: 4. 4 输入域管理员账号和密码,等待加域成功,重启后生效。 负载均衡安装 网络负载平衡,英文简称为NLB,windows Server 2012 中该功能允许你将传入的请求传播到最多达32台的服务器上,即可以使用最多32台服务器共同分担对外的网络请求服务。网络负载平衡,保证即使是在负载很重的情况下它们也能够在很快的时间内做出反应。 网络负载平衡可以让客户端用一个逻辑Internet名称和虚拟IP地址(又称群集IP地址)访问群集,同时保留每台计算机各自的名称。网络负载平衡对外只须提供一个IP地址(或域名)。 当网络负载平衡中的服务器故障,不可用时,网络负载平衡会自动检测到不可用的服务器,并在剩余的服务器中,重新指派客户机通讯。从而实现服务器的高可用,并且,可以根据网络访问量的增多来增加网络负载平衡服务器的数量。 实验项目: 示例:利用Windows Server 2012实现网络负载平衡,并实现WEB站点的高可用 实验环境说明: server01是域控,server02和server03做负载平衡并安装Web服务,server05是客户机,做测试用,server02和server03两台服务器需要两块网卡,一块用于通信,一块做心跳线,如下图 步骤1:安装NLB角色 在server02、server03分别安装网络负载平衡管理器 打开服务器管理器,选择添加角色与功能 检查服务器信息 在功能中选择网络负载平衡 添加所需要的功能,并完成安装 步骤2: 配置NLB 此操作在server02上设置 打开服务器管理器,单击工具,选择网络负载平衡管理器 右键单击网络负载平衡管理器,选择新建群集 输入要做网络负载平衡服务器的名称,点击链接,选择用于通讯的IP地址 选择优先级,一般第一个服务器是1,第二个是2,以此类推 单击添加,添加群集IP地址 输入群集IP地址,单击确定 检查群集IP配置,注意群集群集操作模式选项,这里选择的是多播,单击下一步 这里我们来稍微介绍一下群集的操作模式 群集操作模式: 单播: 所有节点的MAC地址会被替换成统一的群集MAC地址 多播: 每个节点使用自己的MAC地址 配置端口规则,实验环境,默认即可,单击完成 这样我们就配置完成了一台服务器,下面我们来给群集添加服务器,右键单击群集IP地址,选择添加主机到群集 输入另一台主机的名称server03,单击链接,选择用于通讯的IP地址 大家会发现,这里的优先级变成了2,而且无法选择1,那是因为,优先级是1的,是最开始加入进来的服务器 余下的配置与刚才一样,只是少了添加群集IP地址,单击下一步,并完成配置 配置完的网路负载平衡如下图,在这里说一下,并不是配置完成,网络负载平衡就会马上生效,他会有一个配置的过程,真正完成配置的状态如下图 下面我们来测试一下 找一台客户机:长ping 192.168.10.100 然后,我们断开server02的网卡,模拟服务器故障,无法通讯 然后我们查看长ping的客户机,发现之断了一次,又正常通讯了 我们链接server02的网卡,断开server03的网卡 再次查看长ping的客户机,发现依然可以正常通讯 这说明,我们的网络负载平衡是正常的,只有在网络负载平衡正常的情况下,我们才能用实现WEB站点的高可用。 下面我们来实现WEB站点的高可用 我们现在server01上新建一个共享文件夹,放我们的网站 然后再server02和server03上安装IIS服务,并配置IIS服务器 Server02上的IIS配置相同 配置完成后,我们现在客户机上用浏览器访问http://192.168.10.100 然后断开server02的网卡,再次访问 我们发现,依然可以正常访问,到此Web服务器通过NLB实现高可用就算配置完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值