搭建WindowsServer2008基于Web服务的网络负载平衡(NLB)一、WebFarm与网络负载平衡概述将企业内部多台IISweb服务器组成WebFarm后,这些服务器将同时为用户提供一个不间断的、可靠的网站服务,当WebFarm接收到不同用户的连接网站请求时,这些请求会被分散送给不同的web服务器来处理,因此可以提高网页访问效率。1、WebFarm的架构由于WindowsServer2008系统已经内置了NLB,因此如下图所示不用负载平衡器,改在前台webfarm上启用NLB功能,并利用它来提供负载平衡与容错功能。还有因为MicrosoftISAServer防火墙可能通过发行规则来支持webfarm,因此可以如下图所示来搭建webfarm环境,其中,ISAServer接收到外部连接内部网站的请求时,它会根据发行规则的设置,将此请求转交给webfarm中的一台web服务器处理。ISAServer也具备自动检测web服务器是否停止服务的功能,因此它只会将请求转给仍然正常运行的web服务器,不会转给已停止服务的web服务器。2、网页内容的同步如下图所示,可以将网页存储到每台web服务器的本地磁盘中,必须让每台web服务器中存储的网页内容相同,可以使用手动复制的方式将网页文件复制到每台服务器,这种方式网络管理难度很大。可以采用DFS(分布式文件系统)自动让每台web服务器的网页内容相同,这样只需要更新其中一台web服务器的网页文件,它们就会通过DFS复制功能自动复制到其他web服务器。也可以采用如下图所示将网页内容存储到SAN或NAS存储设备中,并利用它们来提供网页内容的容错功能。也可以如下图所示将网页存储到文件服务器中,而为了提供容错功能,应该架设多台文件服务器,同时还必须确保所有服务器中的网页内容相同,可以采用DFS复制功能自动让每台文件服务器中存储的网页内容相同。二、网络负载平衡概述1、概述WindowsServer2008中的网络负载平衡(NLB)功能可以增强Internet服务器应用程序[如在Web、FTP、防火墙、代理、虚拟专用网络(VPN)以及其他执行关键任务的服务器上使用的应用程序]的可用性和可伸缩性。运行WindowsServer2008的单个计算机提供有限的服务器可靠性和可伸缩性能。但是,通过将运行WindowsServer2008的其中一个产品的两台或多台计算机的资源组合到单个虚拟群集中,NLB便可以提供Web服务器和其他执行关键任务服务器所需的可靠性和性能。上图描述了两个连接的网络负载平衡群集。第一个群集由两个主机组成,第二个群集由四个主机组成。这是如何使用NLB的一个示例。每个主机都运行所需的服务器应用程序(如用于Web、FTP和Telnet服务器的应用程序)的单个副本。NLB在群集的多个主机中分发传入的客户端请求。可以根据需要配置每个主机处理的负载权重。还可以向群集中动态地添加主机,以处理增加的负载。此外,NLB还可以将所有流量引导至指定的单个主机,该主机称为默认主机。NLB允许使用相同的群集IP地址集指定群集中所有计算机的地址,并且它还为每个主机保留一组唯一专用的IP地址。对于负载平衡的应用程序,当主机出现故障或者脱机时,会自动在仍然运行的计算机之间重新分发负载。当计算机意外出现故障或者脱机时,将断开与出现故障或脱机的服务器之间的活动连接。但是,如果您有意关闭主机,则可以在使计算机脱机之前,使用drainstop命令维护所有活动的连接。任何一种情况下,都可以在准备好时将脱机计算机明确地重新加入群集,并重新共享群集负载,以便使群集中的其他计算机处理更少的流量。NLB群集中的主机会交换检测消息以保持有关群集成员身份的数据的一致性。默认情况下,当主机在五秒之内未能发送检测消息时,该主机便出现了故障。当主机出现故障时,群集中的剩余主机将聚合在一起并执行以下操作:确定哪些主机仍然是群集中的活动成员。选择优先级最高的主机作为新的默认主机。确保所有新的客户端请求都由仍然活动的主机进行处理。在聚合期间,仍然活动的主机会查找一致的检测信号。如果无法发送检测信号的主机开始提供一致的检测信号,则它会在聚合过程中重新加入群集。当新的主机尝试加入群集时,它会发送检测消息,该消息也会触发聚合。当所有群集主机对当前的群集成员身份达成一致之后,会向剩余主机重新分发客户端负载,并完成聚合。通常聚合只需几秒钟,因此由群集中断的客户端服务是非常少的。在聚合期间,仍然活动的主机会继续处理客户端请求,而不会影响现有连接。如果所有主机在几个检测期间报告的群集成员身份和分发映射都一致,则聚合结束。2、NLB新增功能对于WindowsServer2008,NLB包括以下改进:支持IPv6。NLB对所有通信都完全支持IPv6。所有NLB组件都支持IPv6地址,并且可以将这些地址配置为主要群集IP地址、专用IP地址和虚拟IP地址。此外,还可以作为纯IPv6以及在IPv6overIPv4模式下对IPv6进行负载平衡。支持NDIS6.0。NLB驱动程序使用NDIS6.0轻型筛选模型。NDIS6.0保持与早期NDIS版本的向后兼容性。NDIS6.0的设计包括增强的驱动程序性能和可伸缩性以及简化的NDIS驱动程序模型。WMI增强。MicrosoftNLB命名空间添加了对IPv6的多个专用IP地址支持,它们包括:MicrosoftNLB命名空间中的类支持IPv6地址(除了IPv4地址之外)。MicrosoftNLB_NodeSetting类支持多个专用的IP地址,方法是在DedicatedIPAddresses和DedicatedNetMasks中指定这些地址。改进了拒绝服务(DoS)攻击和计时器饥饿保护。使用回调接口,NLB可以在攻击期间或者节点负载过高时检测并通知应用程序。当群集节点过载或者受到攻击时,ISA服务器使用该功能。支持每个节点使用多个专用IP地址。NLB完全支持为每个节点定义多个专用IP地址。以前只支持每个节点使用一个专用IP地址。当客户端由IPv4和IPv6通讯组成时,ISA服务器可以使用该功能来管理每个NLB节点。支持滚动升级。NLB支持从WindowsServer2003到WindowsServer2008的滚动升级。有关NLB的部署信息(包括有关滚动升级的信息),请参阅=87253。通过网络负载平衡管理器综合管理。不再需要使用网络连接工具配置NLB群集,只需通过WindowsServer2008中的NLB管理器即可执行NLB群集配置。这样便可以最大程度地减少可能因群集主机之间设置不一致引起的NLB配置问题。3、网络负载平衡功能可伸缩性可伸缩性是度量计算机、服务或应用程序如何更好地改进以满足持续增长的性能需求的标准。对于NLB群集而言,可伸缩性是指当群集的全部负载超过其能力时逐步将一个或多个系统添加到现有群集中的功能。下表详细介绍了NLB的可伸缩性功能:平衡NLB群集上对各个TCP/IP服务的负载请求在一个群集中最多支持32台计算机平衡群集中多个主机之间的多个服务器负载请求(来自同一个客户端或者来自几个客户端)支持在负载增加时,能够在不关闭群集的情况下向NLB群集中添加主机支持在负载降低时,能够从群集中删除主机通过全部实现管道化提高性能并降低开销。管道允许向NLB群集发送请求,而无需等待响应上一个发送的请求高可用性通过最大程度地减少停机时间,高可用系统能够可靠地提供可接受级别的服务。NLB包括一些内置功能,可以通过自动执行以下操作来提供高可用性:检测发生故障或脱机的群集主机并对其进行恢复。在添加或删除主机时平衡网络负载。在十秒之内恢复并重新分发负载。可管理性NLB提供以下可管理性功能:使用NLB管理器,可以从单个计算机管理和配置多个NLB群集和群集主机。使用端口管理规则,可以为单个IP端口或一组端口指定负载平衡行为。可以为每个网站定义不同的端口规则。如果您对多个应用程序或网站使用相同的一组负载平衡服务器,则端口规则基于目标虚拟IP地址(使用虚拟群集)。使用可选的单主机规则,可以将所有客户端请求引导至单个主机。NLB将客户端请求路由到运行特定应用程序的特定主机。可以阻止对某些IP端口进行不需要的网络访问。可以在群集主机上启用Internet组管理协议(IGMP)支持,以控制交换机广播(在多播模式中操作时)。使用shell命令或脚本,可以从运行Windows的任何联网计算机上远程启动、停止和控制NLB操作。可以查看Windows事件日志以检查NLB事件。NLB在事件日志中记录所有操作和群集更改。易用性NLB提供了许多便于使用的功能:可以作为标准的Windows网络驱动程序组件安装NLB。NLB不需要更改任何硬件即可启用和运行。使用NLB管理器可以新建NLB群集。使用NLB管理器,可以从一台远程或本地计算机上配置和管理多个群集以及群集的所有主机。NLB允许客户端使用单个逻辑Internet名称和虚拟IP地址(称为群集IP地址,它保留每台计算机的各个名称)访问群集。NLB允许多宿主服务器具有多个虚拟IP地址。注意,如果是虚拟群集,则不需要服务器是多宿主服务器即可具有多个虚拟IP地址。可以将NLB绑定到多个网络适配器,这样您便可以在每个主机上配置多个独立的群集。支持多个网络适配器与虚拟群集不同,因为虚拟群集允许您在单个网络适配器上配置多个群集。不需要修改服务器应用程序即可在NLB群集中运行。如果群集主机出现故障并且后来又恢复联机,则可以将NLB配置为自动将该主机添加到群集。之后,添加的主机将能够开始处理来自客户端的新的服务器请求。可以在不打扰其他主机上群集操作的情况下使计算机脱机进行预防性的维护。4、NLB的容错功能如果NLB群集中的服务器成员有变动,如服务器故障、服务器脱离群集或增加新服务器,则NLB会启动一个称为聚合(convergence)的程序,以便让NLB集群中的所有服务器保持一致的状态并生新分配工作任务。例如,NLB群集中的服务器会随时监听其他服务器的心跳状态,以便检测是否有其他服务器出现故障。若有服务器出现故障,检测到此状况的服务器便会启动聚合程序,在聚合程序运行时,现有正常的服务器仍然会继续服务,同时正在处理中的请求也不会受到影响,当完成聚合程序后,所有连接webfarm网站的请求,会重新分配给剩下仍正常的web服务器来负责。5、NLB的相似性相似性用于定义源主机与NLB群集成员之间的关系。比如,如果群集中有3台web服务器,当外部主机(源主机)要连接webfarm时,此请求应由webfarm中的哪一台服务器来负责处理?是由NLB提供的3种相似来决定的。无(none):此时NLB是根据源主机的IP地址与端口,将请求分配给其中一台服务器处理,群集中每一台服务器都有一个主机ID(hostID),而NLB根据源主机的IP地址与连接端口计算出来的哈希值(hash)与主机ID有关联性,因此NLB群集会根据哈希值将此请求发给拥有主机ID的服务器负责处理。因为它同时根据源主机的IP地下与端口将请求分配给其中一台服务器处理,因此同一台外部主机提出的多个连接webfarm请求(源主机的IP地址相同、TCP端口不同),可能会分别由不同的web服务器来负责。单一(single):此时NLB仅根据源主机的IP地址将请求分配给其中一台web服务器处理,因此同一台外部主机提出的所有连接webfarm请求,都会由同一台服务器来负责处理。ClassC:它是根据源主机的IP地址中最高3个字节,将请求分配给其中一台web服务器处理。也就是IP地址中最高3个字节相同的所有外部主机,它所提出的连接webfarm请求都会由同一台web服务器负责。比如,63.11.11.1~63.11.11.254的外部主机的请求,都会由同一台web服务器来负责处理。虽然,NLB默认是通过相似性将客户端的请求分配给