为满足企业不断的成长需求,实现企业服务器的高可伸缩性、高可用、高可靠性和高性能,提升服务器的SLA,Microsoft到目前为止,提出了五种解决方案:


网络负载平衡(NLB)详解!_休闲 
今天将就网络负载平衡(Network Load Balancing,以下简称NLB)解决方案来做详细讲述,帮助大家了解什么是NLB,NLB中每个参数代表什么意义、起什么作用,如何快速、成功的搭建NLB。
        网络负载平衡是 Microsoft 在所有 Windows 2000 Server 和 Windows Server 2003 操作系统上提供的一种负载平衡技术。NLB 使用一种分布算法将负载均衡分布到多台主机上,从而提高基于 IP 的关键型服务(例如 Web、虚拟专用网络、流媒体、终端服务、代理等等)的可伸缩性和可用性,同时可检测主机故障并自动将流量重新分配给其他操作主机,从而提供高可用性。
         该文章取自一个部署案例,是针对一 Web站点,利用NLB技术来实现其高可用、可伸缩、并承担更高访问量的要求。在实施NLB中,我将详细的对NLB中的技术参数做一整体的讲解,帮助各位对NLB技术的系统认识和掌握。
         在介绍NLB之前,先讲讲做这次NLB配置的相关参数设置:


网络负载平衡(NLB)详解!_其他_02
我们在哪里可以创建NLB呢?Windows 2003 Server在默认安装时就已经安装好了,我们只需要在管理工具中选择就可以了;在Windows 2000 Server中默认是没有安装NLB的,需要在添加删除程序中手动进行添加,今天我不针对在Windows 2000 Server上使用NLB来做阐述。在Windows 2000 Server中创建NLB和在Windows 2003 Server中创建NLB还有个很大的不同之处,在于Windows 2000 Server的NLB创建时,只能有一块网卡启动,Windows 2003 Server则没有这种限制,可以有多块网卡进行工作。
          在开始配置NLB之前,若在工作组模式下,请将准备创建NLB服务的帐户进行密码修改,NLB服务器的用户名和密码修改为一样,避免在后面添加多个主机时出现“Error code:0x800706d5”错误;在域环境中,所有帐户均在“AD用户和计算机”中进行管理,所以不用担心出现这种情况的发生。
          进入一台实体服务器(10.134.130.104),在“Start(开始)”菜单中点击“Administrative Tools(管理工具)”,单击“Network Load Balancing Manager(网络负载平衡管理器)”,启动NLB管理控制界面。
          进入后,我们就可以创建NLB了。右击“Network Load Balancing Clusters(网络负载平衡群集)”,因还没有创建好的群集,所以选择“New Cluster(新建群集)”,如图 一:


网络负载平衡(NLB)详解!_网络负载平衡_03
进入“Cluster  Parameters(群集参数)”配置界面,在 “Cluster IP configuration(群集IP配置)”中(如图 二),我们输入之前定义好的Virtual IP(10.134.130.100)到“IP address(IP地址)”中,此IP地址及我们对外提供访问的IP地址;在“Subnet mask(子网掩码)”中,我们输入与实体服务器相同的子网掩码“255.255.255.0”,请确保其正确;在“Full Internet name(完整Internet名称)”中输入相应名称,若在工作组环境中,我们输入的名称将作为其NLB描述,若在域环境中,该Internet名称将在DNS中注册,以提供域名形式访问站点,但VIP需要我们手动添加到DNS中。因该环境在工作组模式下,所以在此输入CnfanMonitor即可; “Network address(网络地址)”不需要我们手动输入,它会根据我们在下面的“Cluster operation mode(群集操作模式)”中选择的模式进行MAC地址的生成。[NextPage]

网络负载平衡(NLB)详解!_休闲_04
进入“Cluster operation mode(群集操作模式)”设置该NLB是以“Unicast(单播)”还是“Multicast(多播)”的模式来运行。在此,将详细的讲述在NLB中,单播和多播的区别。
          单播:在每个群集成员上,NLB 覆盖网络适配器上制造商提供的 MAC 地址。NLB 对所有成员都使用相同的单播 MAC 地址。这种模式的优点是它可以无缝地与大多数路由器和交换机协同工作。缺点是到达群集的流量会扩散到交换机虚拟 LAN (VLAN) 上的所有端口,并且主机之间的通信不能通过 NLB 绑定到的适配器,也即实体主机间不可以互相通信。若我们在NLB创建时选择单播的模式,在“群集IP配置”中的“网络地址”是以“02 - BF”开头,后面紧跟IP地址的十六进制表示,该网络地址与实际主机的MAC地址相同,后续加入的主机也将修改为此MAC地址。
          多播:保留原厂 MAC 地址不变,但是向网络适配器中增加了一个第 2 层多播 MAC 地址。所有入站流量都会到达这个多播 MAC 地址。优点是这种方法可以通过在交换机的“内容可寻址存储器”(CAM) 表中创建静态项,从而使得入站流量仅到达群集中的主机。缺点是因为 CAM 项必须静态关联一组交换机端口,如果没有这些 CAM 项,入站流量仍然会扩散到交换机 VLAN 上的所有端口。还有一个缺点就是很多路由器不会自动将单播 IP 地址(群集的虚拟 IP 地址)与多播 MAC 地址关联起来。如果进行静态配置的话,一些路由器可以存在这种关联。若我们在NLB创建时选择多播的模式,在“群集IP配置”中的“网络地址”是以“03 -BF”开头,后面紧跟IP地址的十六进制表示。在选择多播模式时,后面还有个复选项“IGMP Multicast(IGMP多播)”,若复选此项,就像多播操作模式一样,NLB 保留原厂 MAC 地址不变,但是向网络适配器中增加了一个 IGMP 多播地址。此外,NLB 主机会发出这个组的 IGMP 加入消息。如果交换机探测到这些消息,它可以使用所需的多播地址来填充自己的 CAM 表,这样入站流量就不会扩散到 VLAN 上的所有端口。这是这种群集模式的主要优点。缺点是有一些交换机不支持 IGMP 探测。除此之外,路由器仍然支持单播 IP 地址到多播 MAC 地址的转换。在IGMP多播模式下,将采用“01 – 00 - 5E”开头的MAC地址。在多播的模式下,实体主机之间可以互相通信。
         在了解了单播和多播的概念后,我们就可以进行下一步的NLB配置了。一般来说,在NLB的创建时,单网卡多播,双网卡单播。双网卡单播时,因为主机之间不能互相通信,将设置内网通讯的网卡,也就是群集设置中的心跳。在微软官方推荐在NLB设置时,首先考虑单播模式,除非单播不能满足其要求,若要解决流量扩展的方法,推荐使用VLAN。
         当我们清楚地了解了单播和多播的区别后,结合我们的自身特点,选择相应的模式进行NLB创建,在此我选择“单播”模式(如图 三)。


网络负载平衡(NLB)详解!_网络负载平衡_05
在“Allow remote control(允许远程控制)”设置中,没有进行相关设置,如果有需要提供远程控制,需输入远程控制密码。
         配置完成后,点击“Next”进入下一设置页面“Cluster IP Addresses(群集IP地址)”。因只提供一个VIP进行对外访问,所以在此不用进行其他群集IP地址添加(如图 四)。

网络负载平衡(NLB)详解!_其他_06
在“Allow remote control(允许远程控制)”设置中,没有进行相关设置,如果有需要提供远程控制,需输入远程控制密码。
         配置完成后,点击“Next”进入下一设置页面“Cluster IP Addresses(群集IP地址)”。因只提供一个VIP进行对外访问,所以在此不用进行其他群集IP地址添加(如图 四)。

网络负载平衡(NLB)详解!_其他_06
点击“Next”进入“Port Rules(端口规则)”设置页面。在此设置页面的动作非常重要,它将决定NLB如何工作,利用哪个端口进行工作等等。这页面的设置也是唯一NLB主机中可以不一样的地方,但必须满足规则“兼容”。在默认情况下,NLB已经为我们创建出一条端口规则,该规则满足所有的TCP/UDP端口实现负载均衡(如图五)。

网络负载平衡(NLB)详解!_休闲_08 
显然,这条规则是不安全的,我们需要根据实际的要求,对该规则进行修改或者添加其他的端口规则。
         鼠标点击“Edit(编辑)”,进入“Add/Edit Port Rule(添加/编辑端口规则)”界面,对默认规则进行修改设置。
        “Cluster IP address(群集IP地址)”:此设置项是用来指定达到哪个群集IP的接受处理方式将按照以下设置进行。因我们没有在“Cluster IP Addresses(群集IP地址)”添加其他的群集IP,在此我们将不进行单独设置,选择“All”即可。
        “Port range(端口范围)”:默认情况下,TCP或UDP的0 ~ 65536端口都是可以NLB使用的,但为了NLB的安全,我们只针对所提供的服务进行特定设置。在此我们提供Web站点服务,站点使用80端口进行对外访问,所以我们将此端口范围修改为“From 80 To 80”。
        “Protocols(协议)”:选择使用哪种协议来提供服务,在此选择TCP协议。
        “Filtering mode(筛选模式)”:在此选项设置中,将选择“Multiple host(多主机)”以何种方式提供服务。多主机之间进行负载平衡时,“Affinity(相似性)”可以选择“None”、“Single”、 “Class C”三种。相似性在此是设置在多主机负载平衡时,对客户端的IP做出的相应反应。选择“Single(单一)”,即表示第一次用户端访问VIP分配到实际的物理主机时,以后所有的请求都由这台主机提供处理;若选择“Class C”模式,则表示一个C类地址的客户端请求将全部由第一次处理请求的主机负责。
         “Single Host(单一主机)”:若选择此选项,该端口范围内的所有请求都将由一台主机来进行处理,此选项将配合后面的主机优先级来进行主机判定。
          “Disable this port range(禁用此端口范围)”:一般这个选项会在端口例外中进行设置,也就是说,当我们指定了一个比较大的范围端口时,其中有一个或几个端口我们不需要客户端用户访问到,这时我们将利用这个规则来进行设定,防止用户访问此端口请求。   
         针对本次NLB搭建,我的端口规则设定如图 六。
网络负载平衡(NLB)详解!_休闲_09
如果大家在测试环境中实验,可能会发现我不写任何的端口规则,一样的可以进行下一步动作,进入到“Connect(连接)”界面。这时可能有人要问了,那NLB使用什么规则来提供服务呢?其实如果我们不进行端口规则设置的话,NLB所有的端口规则将默认使用单一主机来提供处理,处理的优先级将用来决定是那台主机提供相应的处理请求。[NextPage] 
         完成端口规则设定后,点击“Next”进入“Connect”设置进行主机设置。在“Host(主机)”处输入主机IP或者电脑名,点击 “Connect”,此时将会把连接到的主机信息显示在“Interfaces available for configuring a new Cluster(配置一个新的群集可用的接口)”中,因本次搭建的NLB有两块网卡,所以选择对外提供服务的网卡来进行NLB设置。
注:实体服务器不得使用DHCP获取的IP地址,必须手动设置,否则将出现如下提示(如图 七)。

网络负载平衡(NLB)详解!_职场_10
选择好连接的网卡后,点击“Next”进入“Host Parameters(主机参数)”设置界面(如图八)。在“Priority(优先级)”中设定该主机的NLB优先状态,因此主机是NLB的第一台,所以选择优先级为1。在“Dedicated IP Configuration(专用IP设置)”中,这里的IP设置必须是在同一网段的IP才可以,比如说,本次搭建NLB的服务器上有两片网卡,其中一片对外提供服务(10.134.130.104),一片内部通讯(192.168.1.104),可能有人会认为把专有IP类似于Cluster一样设置为内部通讯IP(192.168.1.104)即可。其实不然,这里的专有IP不能设置为内部通讯IP,因为不在同一网段,这是NLB的基本要求。但当我们主机只有一块网卡时,此处默认及为对外IP地址。设定好专用IP后,进行“Initial host state(初始主机状态)”设定,默认状态我设定为“Started(启动)”。

网络负载平衡(NLB)详解!_职场_11
完成全部的设置后,点击“Finish”,网络负载平衡管理器将完成我们之前的所有设定。在此过程中,将重新配置网卡IP,启动“负载均衡”协议,当完成后,我们将看到一个聚合好的NLB(如图 九),当然,现在我们还只添加了第一台主机。
网络负载平衡(NLB)详解!_休闲_12
后续要添加主机到该群集中,我们只需右键点击刚创建好的NLB,选择“Add Host To Cluster(主机加入到群集)”(如图 十),此设置将直接转到“Connect(连接)”界面,按照第一台主机的方式进行相关设置即可。
网络负载平衡(NLB)详解!_其他_13等第二台主机(10.134.130.105)也聚合完成后,我们即完成了Cnfan Web站点的负载均衡设置,在IE中直接输入[url]http://10.134.130.100[/url]将访问到相关站点。
          对外10.134.130.100将作为网站接口提供客户端用户连接,但实际在内部将由10.134.130.104和10.134.130.105进行请求处理。
         微软的网络负载平衡可以提供最多32台主机的负载平衡,当我们的Web站点需要分担更多用户访问请求的时候,负载均衡无疑是值得考虑的一个解决方案。当然NLB也有相应的限制,像广域网环境中,我们就不能使用NLB进行设置,因为其网络不允许使用同一个MAC地址,也就违反了NLB的基本要求。
          在安全方面,除了我们进行的端口规则设定,Windows 2003 Server本身基于TCP/IP 堆栈的集成是动态的,不用进行任何人工干预,这种设置有效的防止了DOS攻击等恶意攻击。除此之外,企业结合自身的网络安全,确保NLB站点的高效运作。

参考资料
服务器群集和网络负载均衡
[url]http://www.microsoft.com/china/t[/url] ... ering/newclust.mspx
网络负载平衡常见问题
[url]http://www.microsoft.com/china/t[/url] ... stering/nlbfaq.mspx