原文地址:http://www.cnblogs.com/shanyou/archive/2010/04/28/1723276.html
在现行的许多网络应用中,有时一台服务器往往不能满足客户端的要求,那么有没有什么办法解决服务器的高可伸缩性、高可用、高可靠性和高性能,提升服务器的SLA? 使用Windows Server 2008/R2中的网络负载平衡(Network Load Balancing,以下简称NLB)和IIS 7的ARP模块就是解决这个问题的方法。
首先解释一下群集,群集是指一组服务器,通过彼此的协同作业,提供一个相同的服务或应用程序,用于提升服务或应用程序的可用性(availability)、可靠性(reliability)和可扩展性(scalability)。当群集内的服务器down掉以后,服务请求会转给其它群集内的节点,以实现24小时不中断的服务
网络负载平衡(NLB)是Microsoft在所有 Windows 2000 Server、Windows Server 2003、Windows Server 2008和Windows Server 2008 R2 操作系统上提供的一种负载平衡技术。网络负载平衡(NLB)是将网络连接客户与服务器应用分布在同一个NLB群集内的多个服务器上。NLB允许添加额外的服务器,因此具备了可扩展性。此外NBL允许用户替换运行不良的服务器,从而确保了可靠性。NBL对于需要将多个客户请求分布在一组服务器上的企业来说至关重要。特别是它能够确保运行在互联网信息服务(IIS)上的基于Web的应用,可通过添加额外的服务器增加工作负载量而使应用获得扩展。
网络负载平衡(NLB)包括以下功能:
² 可伸缩性
可伸缩性是度量计算机、服务或应用程序如何更好地改进以满足持续增长的性能需求的标准。对于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作为Windows网络驱动程序运行。它的操作对于TCP/IP网络堆栈是透明的。
上图显示了在NLB主机的典型配置中,NLB和其他软件组件之间的关系。
——不需要修改服务器应用程序即可在NLB群集中运行。
——如果群集主机出现故障并且后来又恢复联机,则可以将NLB配置为自动将该主机添加到群集。之后,添加的主机将能够开始处理来自客户端的新的服务器请求。
——可以在不打扰其他主机上群集操作的情况下使计算机脱机进行预防性的维护。
Windows Server 2008 R2 中的网络负载平衡的功能,为了支持更多的用户同时使用。 Windows Server 2008 R2 中的网络负载平衡的功能改进包括:
1. 更好的支持应用程序和服务的持久连接
在网络负载平衡 IP 粘性功能允许您配置客户端与群集节点之间长连接。 默认情况下,网络负载平衡每个请求分布在群集中的节点。某些应用程序例如购物的购物车应用程序的服务需要一个将保持与特定群集节点持久连接。
2. 改进对应用程序和服务的健康监测
在Windows Server 2008 R2网络负载平衡管理包允许您监视应用程序和在网络负载平衡群集中运行的服务的运行状况。
3. 支持下一代 TCP/IP
Windows Server 2008 R2 支持Internet 协议版本 4 (IPv4) 和 Internet 协议版本 6 (IPv6)。 NLB 支持IPv4同时 完全支持IPv6的所有通信。
4. 多个 IP 地址支持
现在,在 NLB 群集中的每个节点有多个专用的 IP 地址。
5. Microsoft ISA Server 集成
Microsoft ISA Server支持混合IPv4 和 IPv6 基础结构的网络环境的客户端通过Microsoft ISA Server访问每一个NLB节点。 ISA Server 还可以提供入侵检测服务,以保护您的 NLB 群集。
网络负载平衡的缺点
² NLB集群本身会消耗掉一部分CPU资源,因此实际应用中并不是集群节点越多性能越好。MS官方有提供这样一份测试报告,模拟web 客户端从群集中下载了 10 KB 的静态 web 页。在群集大小超过 8 到 10 个成员时,扩展因子会显著偏离了线性扩展。如下图所示
² NLB只能检测到服务器的状态,无法检测到应用程序的状态,假如某节点服务器的IIS不可用,但客户依然会被分配到该节点服务器,从而导致请求失败。要解决应用层面的问题,需要使用IIS 7的Application Request Routing(以下简称ARR),通过监控应用程序状态,反向控制节点服务器。同时NLB可以为IIS 7的ARR模块提供高可用性。
ARR简单的说就是一个IIS7的负载均衡模块,可以一次管理多个IIS 6/7的服务器集群,规则基于URL,或者基于HOST NAME,或者基于HTTP HEADER。微软的Application Request Routing(ARR) 2.0使得Web管理员,虚拟主机提供商,内容分发网络(CDN)通过基于规则路由,机器名匹配,HTTP请求的负载均衡和分布式磁盘缓存来提高Web应用程序的的可扩展性和可靠性。有了ARR技术,管理员可以优化资源以及应用服务器的管理成本。
² 负载均衡可以有效的提高资源的利用率
使用ARR,管理员可以创建强大的基于规则的URL,HTTP HEADERS 变量,并决定最合适的WEB应用服务器。ARR在应用层进行路由选择,并可以在其上加上BIG IP 5这类硬件负载均衡器或者是Windows 负载均衡技术,进行三层架构路由。典型的几种方式:使用ARR,管理员可以将*.aspx路由到一个独立应用服务器上。
² 使用标准的IIS MANAGER更容易管理多个WEB FARMS
ARR给予管理员,创建、管理、应用LOAD BALANCING(负载均衡)规则的能力,管理员可以需求轻松地添加一个服务器到WEB FARMS里去,ARR同时包含了对每台单独的服务器实时流量、URL测试的监视能力。管理员这时有能力在IIS 7的MANAGER中查看WEB FARMS中每个服务器的统计信息。
² 优化带宽的使用和通过缓存扩展服务器的能力
ARR可以在磁盘上缓存任何经过服务器的HTTP通信。 通过结合磁盘缓存连同层次化的IIS网站运行ARR的IIS web服务器,CDN和层次化服务器的能力可以大大降低到达源服务器的网络流量。
具体的配置文档这里就不再详细罗列,只给出IIS.NET上的文档链接。主要的配置步骤:
步骤1:按照这篇文档Install Application Request Routing安装ARR v2,重启服务器后接着完成后续的步骤。
步骤2:按照这篇文档Achieving High Availability and Scalability - ARR and NLB配置你的ARR Server Farm. 这里还有一个以F5的配置文档Achieving High Availability and Scalability - ARR and Hardware Load Balancer
应用程序具有扩展性还要求应用程序的架构上支持,对于ASP.NET的应用程序来说,主要是要解决两个问题ASP.NET Session State和ASP.NET Cache,这个在Windows Server AppFabric里头有很好地解决方案。可以参看文章Windows Server AppFabric Beta 2 for For Vistual Studio 2010已经发布,WizardWu有篇博文用 IIS 7、ARR 與 Velocity 建设高性能的大型网站 供参考。
下载:
ARR v2 x86: http://download.microsoft.com/download/4/D/F/4DFDA851-515F-474E-BA7A-5802B3C95101/ARRv2_setup_x86.EXE
ARR v2 x64: http://download.microsoft.com/download/3/4/1/3415F3F9-5698-44FE-A072-D4AF09728390/ARRv2_setup_x64.EXE
使用IIS ARR (Application Request Routing) 來做Exchange 2010的負載平衡器
Part 1: Reverse Proxy for Exchange Server 2013 using IIS ARR
Web farms in .NET and IIS using Web Farm Framework 2.2 part 1: how to set up a webfarm using WFF
Web farms in .NET and IIS using Web Farm Framework 2.2 part 2: provisioning a server farm
Web farms in .NET and IIS using Web Farm Framework 2.2 part 3: deployment and tests
Configure IIS ARR as a reverse-proxy replacement for TMG
Does IIS with ARR support fully transparent reverse proxy?
http://weblogs.asp.net/owscott/archive/tags/ARR/default.aspx