`
luotuoass
  • 浏览: 635060 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

最近正在研究如何把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地址进行通讯。

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

如下图所示:

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="Image1189" href="http://blog.joycode.com/images/metaapis/64/WindowsLiveWriter/a928a567624b_BFCB/Image1189_2.png" target="&quot;_blank&quot;" style='width:429pt;height:561.75pt' o:button="t"> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png" o:href="http://blog.joycode.com/images/metaapis/64/WindowsLiveWriter/a928a567624b_BFCB/Image1189_thumb.png" /> </v:shape><![endif]-->Image1189

单播的其他注意项:

  • Windows server 2003 SP1中,微软修改了NLB单播模式的驱动,从而支持阵列成员通过自己原有的专用IP地址进行通讯,详细信息请参见KB898867Unicast 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地址ARPAddress Resolution Protocol,地址解析协议)请求的ARP回复会将群集IP地址映射到多播MAC地址,而许多路由器或者交换机(包括CISCO的产品)会拒绝这一行为。当出现这种情况时,你必须在路由器和交换机上手动添加静态映射,将群集IP地址映射到群集的多播MAC地址。

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

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

如下图所示:

<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" alt="Image1193" href="http://blog.joycode.com/images/metaapis/64/WindowsLiveWriter/a928a567624b_BFCB/Image1193_2.png" style='width:6in;height:606pt' o:button="t"> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.png" o:href="http://blog.joycode.com/images/metaapis/64/WindowsLiveWriter/a928a567624b_BFCB/Image1193_thumb.png" /> </v:shape><![endif]-->Image1193

IGMP MulticastIGMP多播)

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

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

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

如下图所示:

<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" alt="cc758275_d1687ea3-0f58-46ce-ae65-208ee3aab8dc(en-us)" href="http://blog.joycode.com/images/metaapis/64/WindowsLiveWriter/a928a567624b_BFCB/cc758275_d1687ea3-0f58-46ce-ae65-208ee3aab8dc(en-us)_2.png" style='width:413.25pt;height:247.5pt' o:button="t"> <v:imagedata src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image005.png" o:href="http://blog.joycode.com/images/metaapis/64/WindowsLiveWriter/a928a567624b_BFCB/cc758275_d1687ea3-0f58-46ce-ae65-208ee3aab8dc(en-us)_thumb.png" /> </v:shape><![endif]-->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 BalanceNAS上的步骤
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

转载自:http://blog.joycode.com/ghj/archive/2009/03/17/115513.aspx

分享到:
评论

相关推荐

    Windows 2003 网络负载均衡配置 Network Load Balancing

    网络负载均衡配置教程,常见问题解决方法,给需要的兄弟。

    负载均衡()Network Load-balancing

    本文是关于负载均衡技术最初的设计理念,首次提到负载均衡技术的优势,现有的负载均衡技术都是基于该理论发展而来的!本文是一片英文文献,适合具有一定英语阅读能力、网络技术基础的人阅读。

    Windows NLB网络负载平衡

    负载平衡不但可以有效地解决单服务器的性能限制,而且可以实现故障的快速转移,保证服务的高可用性以及灵活的扩展性。...本文章主要讲述windows2003在网络负载平衡(Network Load Balancing )方面的应用。

    Windows2003负载平衡全攻略

    负载平衡不但可以有效地解决单服务器的性能限制,而且可以实现故障的快速转移,保证服务的高可用性以及灵活的扩展性。...本文章主要讲述windows2003在网络负载平衡(Network Load Balancing )方面的应用。

    负载平衡实战

    Judge network load balancing algorithms and when to use them Plan your network for optimal load balancing performance Configure single servers to take advantage of modern load balancing software ...

    论文研究-Proactive Pod-Based Load Balancing in Data Center Network.pdf

    基于pod主动下发式数据中心网络负载均衡,严骏驰,李秀华,为了提高对半带宽,数据中心网络普遍的采用了胖树结构。过去有很多关于胖树结构的负载均衡研究。静态的等价多路径路由很容易陷入

    论文研究-Weighted Load Balancing in Datacenter Networks.pdf

    在数据中心网络中的加权负载均衡,徐秀婷,刘礼彬,数据中心网络中的负载均衡需要考虑应对多种问题,比如各种各样的应用、动态变化的网络状况、以及网络拓扑非对称性。但是,先前的数�

    Linux Network Load Balancing-开源

    Linux 网络负载平衡驱动程序。 一个透明的网络驱动程序来制作去中心平衡的 linux 集群(不使用中央平衡站)

    论文研究-数据中心网络中基于SDN的大象流负载均衡的研究.pdf

    针对数据中心网络中大象流携带大量数据造成网络拥塞和负载不均衡的问题,提出基于SDN(software defined network)的大象流负载均衡(elephant flow load balancing,EFLB)。当网络负载超过阈值时,控制器利用...

    windows 2003集群服务技术概述

    服务器群集 说明:服务器群集是用来描述Microsoft® Cluster Service(MSCS)群集的常用术语,,一般与基于网络负载平衡(Network Load Balancing)的群集对比使用。

    Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案

    负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。...

    Mininet-Load-Balancing:基于Mininet SDN的负载平衡和改善服务器响应时间的实验

    Mininet SDN和负载平衡 介绍 创建了虚拟现实软件定义网络,并提供了功能丰富的Python API。 该项目/存储库涉及使用Mininet开发,测试和试验仿真网络。 到目前为止,已经创建了具有总共6个节点的两个拓扑树和星形,​...

    论文研究-基于流调度选择的DCN动态负载均衡算法.pdf

    针对数据中心网络(data center network,DCN)动态调度导致的负载不均衡问题,提出了基于流调度选择的动态负载均衡(dynamic load balancing based on flow scheduling selection,DLBFSS)算法。该算法首先计算...

    Windows_2003_NLB配置

    Network Load Balancing(NLB)是windows 2003提供的一种负载均衡技术,通过NLB可以将布署于不同服务器上的应用服务器进行压力分担。并可以实现在一台服务器错误时,自动转移至工作正常的服务器上,而访问应用服务器的...

    面向LEO卫星通信网络基于时间尺度的负载均衡组播路由算法 (2015年)

    而非仅仅是降低树开销或最小传输时延,提出一种面向LEO卫星通信网络的基于时间尺度的多度量负载均衡组播路由算法(load balancing muhicasting algorithm based on timescales for LEO satellite network,...

    Windows Server 2003 Resource Kit Tools

    Adlb.exe: Active Directory Load Balancing Tool,AD负载均衡 Admx.msi: ADM File Parser,ADM文件解析 Atmarp.exe: Windows ATM ARP Server Information Tool Atmlane.exe: Windows ATM LAN Emulation Client ...

    基于负载均衡的OFDMA双跳中继网络资源分配策略

    为适应蜂窝小区内不同的用户分布,针对基于正交频分多址接入技术的双跳中继网络,提出了一种基于负载均衡的资源分配策略.考虑难以得到联合分配的最优解,在降低计算复杂度的前提下,采用分步式次优化分配.采用比例公平...

    VANET中十字路口的增强型低开销且稳定的集群方案

    考虑到基于多个指标的整个网络和每个群集的负载平衡,提出了一种增强型低开销和稳定群集(EnLOSC)方案,以确保群集的稳定性和安全性并在这种情况下减少通信开销。 拟议的能力度量旨在发现方向相似且通道质量更好的...

    无线传感器网络中蚁群算法的能量优化

    因此,所提出的算法改善了能量负载平衡,无线传感器网络的稳定性,并最终延长了无线传感器网络的寿命。 仿真结果表明,改进的蚁群算法避免了一定局部节点的过多能量消耗,从而使每个节点的能量消耗更加均匀。

    coord-sim:用于节点间网络和服务协调的轻量级流量模拟器(例如,在cloudedge计算或NFV中)

    简单明了的界面,用于运行算法,以便在网络中的各个节点上对这些传入流进行扩展,放置以及调度/负载平衡。 每个节点内的协调超出范围。 界面可轻松与OpenAI Gym集成,以培训和评估强化学习算法 随时间推移收集指标...

Global site tag (gtag.js) - Google Analytics