网络负载平衡常见问题

关于 Windows 2000 和 Windows Server 2003

本页内容
基本原理基本原理
NLB 和其他群集技术NLB 和其他群集技术
可伸缩性可伸缩性
高可用性高可用性
原理原理
部署问题部署问题
安装和配置安装和配置
管理和操作管理和操作
会话支持会话支持
应用程序和协议支持应用程序和协议支持

基本原理

问:什么是群集?
答:

群集指的是一组相互独立的计算机,这些计算机共同运行一组应用程序,向客户端和应用程序提供一个系统映像。计算机之间通过电缆实现物理连接,并通过群集软件实现程序连接。Microsoft 提供两种群集产品:Microsoft Cluster Services (MSCS) 用于状态应用程序的故障转移,而“网络负载平衡”(NLB) 则用于平衡网络流量。

问:什么是“网络负载平衡”?
答:

“网络负载平衡”是 Microsoft? 在所有 Windows? 2000 Server 和 Windows Server 2003 操作系统上提供的一种负载平衡技术。NLB 使用一种分布算法将负载均衡分布到多台主机上,从而提高了基于 IP 的任务关键型服务(例如 Web、虚拟专用网络、流媒体、终端服务、代理,等等)的可伸缩性和可用性。它同时可检测主机故障并自动将流量重新分配给操作主机,从而提供高可用性。

问:
答:

NLB 和其他群集技术

问:NLB 和服务器群集之间有什么不同?
答:

服务器群集是一组服务器,它们共同提供了一个用于承载应用程序的高可用性平台。在由于维护而产生的停机时间以及由于硬件、操作系统或应用程序故障而产生的意外停机时间里,应用程序可以进行故障转移,从而确保了高可用性。服务器群集为类似于 SQL Server 这样的应用程序、Exchange Server 数据存储以及文件和打印服务器提供了一个高可用性平台。服务器群集用于依赖某些从一个请求到下一个请求的状态上下文的状态应用程序。

“网络负载平衡”(NLB) 群集可根据一组流量处理规则将传入的 TCP 和 UDP 流量分配给群集成员。NLB 群集为类似于 IIS 和 ISA server 这样的应用程序提供了一个高可用性和可伸缩性平台。NLB 用于无状态应用程序,例如那些不构建任何状态作为请求结果的应用程序。

在复杂的体系结构中,NLB 和服务器群集互为补充:NLB 用于将请求负载均衡分布到多台前端 web 服务器中,而服务器群集则为后端数据库访问提供高可用性。

问:我可以在一组服务器中同时使用 NLB 和服务器群集吗?
答:

不能,您不能在一组机器中同时使用 NLB 和服务器群集。这两种群集技术都需要控制和配置网络适配器。由于它们不能够相互支持,因此配置其中一个会影响另外一个。

问:
答:

可伸缩性

问:我的群集可以有多大?
答:

一个 NLB 群集最多可以有 32 个成员。实际的限制根据负载平衡应用程序的特点而有所不同,因此它通常要少于 32 个成员。

有关如何确定群集大小的信息和示例,请参见“Microsoft Windows Server 2003 开发工具包”的第 10 章“设计网络负载平衡” (http://go.microsoft.com/fwlink/?linkid=18370)。

问:随着群集的增大,性能上要注意什么问题吗?
答:

群集的缩放性能与负载平衡应用程序的特点关系密切。Microsoft 已经测试过 web 站点流量,以确定群集性能如何随着群集大小的增加而扩展。在测试环境中,web 客户端从群集中下载了 10 KB 的静态 web 页。下面两幅图说明了测试结果。

在群集大小超过 8 到 10 个成员时,扩展因子显著偏离了线性扩展。您的站点的扩展因子可能会有所不同;它是由群集消耗的出入站带宽的比例决定的。

nlbfaq01.gif
查看大图

nlbfaq02.gif

下图说明了 NLB 产生的 CPU 开销,它是总吞吐量的函数。这里没有显示出来,其实 NLB 的 CPU 开销也是群集大小的函数。随着群集大小的增加,NLB 会筛掉给定群集成员的更大比例的入站流量。这是造成上面所说的次级线性扩展的根本原因。

nlbfaq03.gif

问:预计我们的前端群集将会超过 32 台机器。我们是否应当使用 NLB,即使它的群集大小限制为 32?
答:

您可以在多个 NLB 群集之间使用 Round Robin DNS,这样可以使您的站点具有超过 32 台机器,如下图所示。

nlbfaq04.gif
查看大图

问:
答:

高可用性

问:NLB 如何检测服务器故障?
答:

在服务于客户端请求时,每个 NLB 成员都会向群集中的其他主机发出心跳信号。如果某台主机出现故障而停止发送心跳信号,群集中的其他主机就会经历一个称为收敛的过程。通过收敛,整个群集协商成员关系,并删除掉出现故障的成员。群集中的其他成员会处理先前由故障成员处理的负载。

问:从群集中删除出现故障的服务器需要多长时间?
答:

故障检测需要五秒钟。此外,收敛还需要两到三秒钟。这些时间可以通过注册表设置来控制。有关 NLB 注册表设置的更多信息,请参见本 FAQ 中的“安装和配置”一节。

问:
答:

原理

问:心跳信号会消耗很多带宽吗?
答:

不会。心跳信号由一个 Ethernet 帧组成。默认情况下,每台主机一秒种发送一个心跳信号。

问:发送心跳信号需要依靠后端网络吗?
答:

不用,心跳信号通过负载平衡网络接口传输。这是不能更改的。

问:如何在“网络捕获”中查看心跳信号?
答:

出于效率原因,NLB 默认不会在网络堆栈上将心跳信号向上转发到 netmon。NLB 注册表值 NetmonAliveMsgs 控制这个行为。有关 NLB 注册表设置的更多信息,请参见本 FAQ 中的“安装和配置”一节。如果您修改了此设置,在您完成工作后请记住将其再转换回来。

问:什么是心跳信号的源 MAC 地址和目标 MAC 地址?
答:

NLB 心跳信号是原始的 Ethernet 帧。Ethernet 帧的标头中具有源 MAC 地址和目标 MAC 地址。对于心跳信号,NLB 在 Ethernet 标头中使用的地址取决于群集的模式(有关群集模式的讨论,请参见本 FAQ 的部署问题一节),如下表所示。

群集模式共享的 MAC源 MAC目标 MAC

单播

????MaskSourceMAC?????

????= 1

02-BF-aa-bb-cc-dd

02-nn-aa-bb-cc-dd

FF-FF-FF-FF-FF-FF

单播

????MaskSourceMAC?????

????= 0

02-BF-aa-bb-cc-dd

00-nn-aa-bb-cc-dd

FF-FF-FF-FF-FF-FF

多播

03-BF-aa-bb-cc-dd

burnt-in MAC

03-BF-aa-bb-cc-dd

IGMP 多播

01-00-5E-bb-cc-dd

burnt-in MAC

01-00-5E-bb-cc-dd

共享 MAC 是负载平衡流量的目标 MAC 地址。共享地址具有一个固定的组成部分(比如说 02-BF),其后跟随的内容则取决于配置的主群集 IP 地址。例如,一个主群集 IP 地址为 10.100.0.200 的多播群集的共享 MAC 是 03-BF-0A-64-0-C8。

源 MAC 是 NLB 心跳信号的 Ethernet 源 MAC 地址。配置为“单播”模式时,MaskSourceMAC NLB 注册表值确定了 MAC 地址。(有关 NLB 注册表设置的更多信息,请参见本 FAQ 中的安装和配置一节。)源 MAC 地址第二字节的值(上表中的 nn)来自发送心跳信号的服务器的 NLB 主机优先级。对于多播和 IGMP 多播模式,NLB 不会修改源 MAC,而会使用网络适配器制造商提供的网络地址。

目标 MAC 是 NLB 心跳信号的 Ethernet 目标 MAC 地址。对于“单播”模式,这是 Ethernet 广播地址。对于多播模式,NLB 会将心跳信号定向到共享 MAC 地址。

问:NLB 是内核组件吗?
答:

是的。NLB 由一个 NDIS 内核模式的驱动程序以及用于管理的用户模式组件组成。

问:相对于 Round-Robin Domain Name Service (RRDNS) 来说,NLB 的优越之处是什么?
答:

使用 NLB,您几乎可以立即从负载中删除机器,并且可以选择在不中断向终端用户提供服务的情况下这么做。但是另一方面,一个 DNS 更改要花费数小时进行传播,并且没有办法可以知道客户端什么时候取得更新。

问:负载平衡算法的原理是什么?
答:

NLB 利用一个完全分布式过滤算法将传入的客户端映射到群集主机。这种算法使得群集主机可以针对每个传入的数据包独立进行负载平衡决策。它经过优化,可以为发出大量相对较小的请求(例如通常向 Web 服务器发出的那些请求)的大型客户端填充提供统计上平均的负载平衡。当客户端填充较小并且/或者客户端连接对服务器产生多种不同的负载时,负载平衡算法的效率就会下降。但是,NLB 算法的简单性和速度使得它可以在很多非常有用的客户端/服务器应用程序中提供较高的性能,包括较高的吞吐量和较短的响应时间。

对于一个基于 TCP 的负载平衡服务,NLB 会根据每个群集成员配置的端口规则负荷量将新的 TCP 连接负载平衡到每个群集成员中。每台主机的负载百分比都可以在每个端口规则的“NLB 属性”对话框中进行设置。这个算法不会动态响应每个群集主机的负载更改(例如 CPU 负载或内存使用情况)。但是,在群集成员更改时负载分布会更改,负载百分比也会相应地重新调整。

在检查某个达到的数据包时,所有主机都会独立将数据包的所有权映射到某个群集成员。这种映射使用一个随机函数,它根据客户端的 IP 地址、端口和其他信息来计算主机的优先级。相应的主机会在网络堆栈上将数据包转发到 TCP/IP,而其他群集主机则会丢弃它。

除非群集主机的成员关系变化,否则这种映射是不会变的。这可以确保给定客户端的 IP 地址和端口始终映射到相同的群集主机。但是,您无法预先确定客户端的 IP 地址和端口会映射到的群集主机,因为随机函数会将当前和过去的群集成员关系考虑在内,以减少重新映射的次数。

一般说来,在限定的客户端连接数量内负载分配的质量是良好的,但这会受到端口规则配置中选择的客户端关系的显著影响。作为实践原则,群集主机应查看预期负载分配的客户端至少还要多五倍。有关客户端关系的更多信息,请参见本 FAQ 中的“会话支持”一节。

问:群集收敛的原理是什么?
答:

收敛是群集中的机器协商成员关系以及如何分配客户端负载的过程。任何群集成员都可以开始收敛,并且这个过程会一直进行下去,直到达成共识。收敛仅仅是正常的心跳信号交换,因此外部观察者甚至可能都不会知道这个过程。有关详细的协商过程超出了本 FAQ 的范围。

问:NLB 能够根据 CPU/Memory 的使用情况来平衡负载吗?
答:

不能,NLB 不能根据服务器负载的变化(例如 CPU 和内存的使用情况)或负载平衡应用程序的运行状况作出反应。

问:
答:

部署问题

问:什么是 AOL Proxy(或 Mexaproxy)问题?
答:

所有例如 AOL 或 MSN 这样的大公司或大型服务机构 (megaservice) 发出的连接都通过客户端代理。但是,无法保证同一个客户端发出的两个 TCP 连接可以遍历同一个代理。

由于 NLB 根据源 IP 地址和端口来判断客户端的身份,因此这样的两个连接对于 NLB 来说将是来自不同的客户端,它们可能会被负载平衡到相同群集的不同服务器中。如果这些连接隐式共享 NLB 成员上存储的会话信息,则该会话将会中断。

这引起了更大的会话状态维护问题,应当通过将会话状态保持为高可用性共享后端来解决这个问题。如果不能使用这种办法,群集管理员可以将端口规则的客户端关系设置为 C 类,以尽量减少这种 megaproxy 问题。

注意: 这种办法假定代理服务器的 IP 地址落在 C 类 IP 地址范围内。

问:如果大多数客户端都通过客户端代理连接到 NLB 群集,是否可以得到平均的负载平衡?
答:

当不同客户端的连接都通过相同的客户端代理时,它们到达 NLB 群集时将具有相同的源 IP 地址。如果对于这种流量的端口规则被配置为单一客户端关系,那么 NLB 在进行负载平衡决策时将仅使用传入连接的“源 IP 地址”;一个群集成员将处理所有通过此代理的连接。若要分布来自遍历相同代理服务器的多个客户端的连接,请将端口规则的客户端关系设置为

问:多播和单播操作模式之间有什么不同?我应当在我的 NLB 安装中使用哪一个?
答:

NLB 依赖于将传入数据包定向到所有群集成员来实现。而接收/丢弃过滤决策则是各个群集成员自行决定。NLB 支持三种操作模式。

单播。在每个群集成员上,NLB 覆盖网络适配器上制造商提供的 MAC 地址。NLB 对所有成员都使用相同的单播 MAC 地址。这种模式的优点是它可以无缝地与大多数路由器和交换机协同工作。缺点是到达群集的流量会扩散到交换机虚拟 LAN (VLAN) 上的所有端口,并且主机之间的通信不能通过 NLB 绑定到的适配器。

多播NLB 保留原厂 MAC 地址不变,但是向网络适配器中增加了一个第 2 层多播 MAC 地址。所有入站流量都会到达这个多播 MAC 地址。优点是这种方法可以通过在交换机的“内容可寻址存储器”(CAM) 表中创建静态项,从而使得入站流量仅到达群集中的主机。当然,这种方法也有缺点,因为 CAM 项必须静态关联一组交换机端口。如果没有这些 CAM 项,入站流量仍然会扩散到交换机 VLAN 上的所有端口。还有一个缺点就是很多路由器不会自动将单播 IP 地址(群集的虚拟 IP 地址)与多播 MAC 地址关联起来。如果进行静态配置的话,一些路由器可以存在这种关联。

IGMP 多播 (Windows Server 2003)。就像多播操作模式一样,NLB 保留原厂 MAC 地址不变,但是向网络适配器中增加了一个 IGMP 多播地址。此外,NLB 主机会发出这个组的 IGMP 加入消息。如果交换机探测到这些消息,它可以使用所需的多播地址来填充自己的 CAM 表,这样入站流量就不会扩散到 VLAN 上的所有端口。这是这种群集模式的主要优点。缺点是有一些交换机不支持 IGMP 探测。除此之外,路由器仍然支持单播 IP 地址到多播 MAC 地址的转换。

问:如何减少 NLB 产生的交换机扩散?
答:

对于 Windows 2000,唯一的选择就是使用以下两种方法之一来隔离 NLB 主机。其一,可以让这些主机连接到它们自己的 LAN 或 VLAN。这种办法对于上述群集模式都有效。其二,对于多播模式,管理员可以在交换机的 CAM 表中创建静态项。

对于 Windows Server 2003,可以使用上述一种办法,或是使用 IGMP 多播模式。

注意:Microsoft 建议使用单播操作模式,除非它不能满足您部署的需要。建议的解决扩散的方法是通过 VLAN。

问:NLB 要求每台主机使用两个网络适配器吗?
答:

NLB 仅要求每台主机有一个网络适配器。但是,在一些情况下可能需要增加一个网络适配器:

单播模式下的主机间通信
单播模式下,每个群集成员都具有相同的 MAC 地址。因此,相同群集中的成员之间如果要进行通信就需要增加一个适配器。

隔离前端流量与后端流量
例如,如果 NLB 群集面向 Internet,那么就可以在 NLB 成员中增加一个用于管理流量的适配器。然后就可以使用策略将 NLB 接口锁定,以阻止管理活动。

问:NLB 可以使用 NIC 协作适配器吗?
答:

大多数主要的网络适配器供应商都提供 NIC 协作解决方案,以提供适配器容错 (AFT)。使用 NIC 协作可以将某个连接的网络适配器端口组织为一个物理网段。如果通过一个端口无法进行连接,那么另外一个端口就会自动激活。这种操作对于操作系统和网络上的其他设备来说是透明的。

NLB 可以使用某些协作适配器。但是,这要求 NLB 和协作适配器配置软件之间可以很好地协调。有关详细信息,请参考知识库文章将协作适配器用于网络负载平衡可能引发网络问题 (http://go.microsoft.com/fwlink/?LinkId=18366)。

问:NLB 可以替代 NIC 协作软件来提供适配器容错或提高吞吐量吗?
答:

不能,NLB 不能用于“协作”适配器,也就是说不能将适配器端口组织到一起。NLB 只能用于平衡负载平衡群集中多台主机之间的流量。

问:如何配置 NLB 的第 2 层交换机?
答:

如果您将 NLB 主机连接到交换机而非集线器,那么您就需要确保交换机没有将群集 MAC 地址与特定的交换机端口关联起来。知识库文章连接第 2 层交换机的 WLBS 主机配置选项 (http://go.microsoft.com/fwlink/?LinkId=18367) 介绍了如何配置 NLB 的第 2 层交换机。

问:如何配置 NLB 的第 3 层交换机?
答:

第 3 层交换机必须专门配置才能够与 NLB 一起使用。必须为群集成员建立一个 VLAN,并且这个 VLAN 必须配置为在第 2 层模式下运行。可能不是所有第 3 层交换机都支持此项功能,但是如果它们支持,则设置第 2 层 VLAN 的机制仅适用于特定构造和模式。在配置这种系统之前,请查询交换机文档。

问:如何避免交换机成为单点故障?
答:

创建一个跨越两个交换机的子网,并将一半 NLB 群集连接到一台交换机。您还需要两个路由器上行链路,每个链路连接一台交换机。您的路由器必须运行冗余路由协议(例如 HSRP)以防路由器链接故障。最后,交换机之间还需要两个交叉连接(否则交叉表就成为了单点故障)。

在这种配置中,每台交换机都具有两个连接网络的路径:一个是通过它所链接的路由器,一个是通过其他交换机。如果一台路由器出现故障,那么连接它的交换机将会使用交叉连接。如果一台交换机出现故障,那么群集的容量就会减半。

问:我的 NLB 群集中,每台服务器上都具有两个网络适配器。如何确保让所有出站流量都经过非负载平衡网络适配器?
答:

您可以通过设置网络适配器上的参数来控制这种行为。

问:我可以让一部分群集运行多播模式,另外一部分群集运行单播模式吗?
答:

不能,所有群集成员必须配置为使用相同模式。

问:NLB 支持多个虚拟 IP 地址吗?
答:

是的。有关详细信息,请参考知识库文章如何对 WLBS 配置多个虚拟 IP 地址 (http://go.microsoft.com/fwlink/?LinkId=18368)。

问:可以为同一组主机上的不同虚拟 IP 地址 (VIP) 指定不同的端口规则吗?
答:

Windows 2000:不能,端口规则应用于所有为群集配置的 VIP。请参考知识库文章如何对 WLBS 配置多个虚拟 IP 地址 (http://go.microsoft.com/fwlink/?LinkId=18368)。

Windows Server 2003:可以,端口规则可以指定它应用到的 IP 地址。

问:如果不同的子网添加了同一组主机上的多个 VIP,NLB 还有效吗?
答:

是的,只要 IP 地址被路由到相同的 LAN 就行。

问:同一群集中可以混合使用 NT 4.0 Server、Windows 2000 Server 和 Windows Server 2003 机器吗?
答:

可以。

注意:

当群集中存在使用下级操作系统的成员时,Windows Server 2003 的 NLB 将会运行在向后兼容模式下,而新的 NLB 功能将不可用。请参见群集技术提供了哪些新功能 (http://go.microsoft.com/fwlink/?LinkId=18369) 以获得 Windows Server 2003 的新 NLB 功能列表。

“NLB 管理器”无法管理使用下级操作系统的群集成员。

问:可以将 NLB 绑定到多个接口吗?
答:

Windows Server 2003。 从 Windows Server 2003 起,您可以将 NLB 绑定到多个网络适配器。每个 NLB 实例都是相互独立的,并且这些实例不必是相同群集的成员。

问: 在相同的子网上可以使用两个 NLB 群集吗?
答:

可以。

问:我们的一个群集需要跨越多栋建筑物。这样可以使用 NLB 吗?
答:

可以,如果群集成员连接到相同子网的话。

问:NLB 支持令牌环网络吗?
答:

不支持。令牌环网络不允许多台主机共用一个 MAC 地址,而这是 NLB 的基本要求。

问:
答:

安装和配置

问:可以从一个点上对 NLB 进行配置和管理吗?
答:

Windows Server 2003 中有一种称为网络负载平衡管理器NLB 管理器) 的新工具可以提供从一个点上对 NLB 进行配置和管理的功能。“NLB 管理器”的主要功能:

创建新的 NLB 群集,以及自动将公用设置传播给所有仍在使用特定主机设置的成员。

对 TCP/IP 添加和删除 IP 地址。

建立和解除 NLB 与网络适配器之间的绑定。

向 NLB 群集中添加主机,以及从 NLB 群集中删除主机。

控制群集成员和端口规则负载平衡状态

诊断配置不当的群集

注意:“NLB 管理器”仅支持 Windows 2003 Server 及更高版本。

问:我可以使用“NLB WMI 提供程序”远程绑定和配置 NLB 吗?
答:

不能。

问:我可以使用“NLB WMI 提供程序”远程向 TCP/IP 中添加 IP 地址吗?
答:

不能,但是您可以使用网络适配器配置提供程序。

命名空间:root\cimv2

类名:Win32_NetworkAdapterConfiguration

方法名:EnableStatic

问:如何获取有关 NLB 注册表设置的更多信息?
答:

请参见NLB 技术参考”的“NLB 工具和设置” (http://go.microsoft.com/fwlink/?LinkId=39207) 一节。您必须通知 NLB 对于注册表设置的更改,如果您希望立即加载它们的话。您可以通过在命令行处执行“nlb reload”来进行通知。注意:取决于更改模式,这种重新加载可能会断开通过 NLB 绑定到的网络适配器建立起来的网络连接。

问:“MaskSourceMAC”注册表值有什么用途?
答:

NLB 依赖于每个群集成员都可以看到达到群集的每个数据包。当群集成员连接到某台交换机时,该交换机会监视它接收到的数据包的源 MAC 地址,填充它的 CAM 表,并将 MAC 地址指定给交换机端口。如果不指定此行为,交换机就会将群集 MAC 地址与一个交换机端口关联起来(这个端口就是连接最后一个成员,并传输来自该地址的数据包的交换机端口)。

NLB 通过对它所传输的 Ethernet 帧屏蔽源 MAC 地址来缓和这个问题。这种技术仅适用于单播操作模式,而 MaskSourceMAC 注册表值控制此行为。(参见前面的 FAQ,以获得有关 NLB 注册表值的更多信息。)

问:从什么地方可以了解更多有关 NLB 安装和配置的建议?
答:

请先阅读联机帮助。通常您可以在那里找到所需的信息。

阅读Microsoft Windows Server 2003 开发工具包 (http://go.microsoft.com/fwlink/?linkid=18370) 中介绍如何规划和部署 NLB 群集的章节:《规划服务器部署》一书中的第 10 章“设计网络负载平衡”和第 11 章“部署网络负载平衡”。然后按照循序渐进步骤清单 (http://go.microsoft.com/fwlink/?LinkId=18371) 来安装和配置您的 NLB 群集。

阅读白皮书网络负载平衡:Windows 2000 和 Windows Server 2003 配置的最佳做法,(http://go.microsoft.com/fwlink/?LinkId=18394)。

阅读“Windows Server 2003 中的群集服务”(http://go.microsoft.com/fwlink/?LinkId=18373),以获得提供“网络负载平衡”一般性概述以及规划 NLB 部署建议的白皮书。

Windows Server 2003 操作 (http://go.microsoft.com/fwlink/?LinkId=39226) 具有一个指向 NLB 疑难解答指南的链接。

如果您具有上述资源中没有回答的问题,请访问“群集社区”页面,并将您的问题张贴到其中一个 NLB 或群集新闻组中。有关 Microsoft 社区的更多信息,请参见Microsoft 社区网站, (http://go.microsoft.com/fwlink/?LinkId=18374)。

问:
答:

管理和操作

问:如何保存“NLB 管理器”活动的记录?
答:

可以通过单击“NLB 管理器”的选项菜单中的日志设置来启用“NLB 管理器”的日志记录。选中启用日志记录复选框,然后指定日志文件的名称和位置。

“NLB 管理器”日志文件可能包含有关 NLB 群集和主机的敏感信息,因此这个文件必须得到适当保护。默认情况下,该日志文件继承它所在目录的安全设置,因此您可能需要更改这个文件的权限,以便限制对这个文件的读写访问。个人使用“NLB 管理器”并不需要这个文件的完全控制权限。

问:我可以使用 wlbs.exe 或 nlb.exe 远程管理 NLB 群集吗?
答:

可以,但这要求目标群集成员允许远程控制,出于安全原因,不推荐使用这种办法。如果您必须对某个 NLB 群集启用远程控制,请阅读文章网络负载平衡:Windows 2000 和 Windows Server 2003 的安全最佳做法 (http://go.microsoft.com/fwlink/?LinkId=18375)。尽管 wlbs.exe 可以控制节点加入群集,但它不能替代群集配置。在 Windows Server 2003 中,请使用“NLB 管理器”来远程配置和管理 NLB 群集。

问:这个 WLBS 事件有什么含义,我应该怎么做?
答:

文档“事件消息的网络负载平衡” (http://go.microsoft.com/fwlink/?LinkId=18495) 描述了每个 NLB 事件并讨论了相应的后续操作。

问:如果应付对于 NLB 群集的“拒绝服务”(DOS) 攻击?
答:

TCP/IP 堆栈可以检测和补偿 DOS 攻击。NLB 利用了此项功能来加强自身抵御 DOS 攻击的能力。请确保启用 TCP/IP SYN 攻击保护。以下知识库文章介绍了如何启用 TCP/IP DOS 攻击保护:如何在 Windows 2000 中加强 TCP/IP 堆栈抵御拒绝服务攻击的能力 (http://go.microsoft.com/fwlink/?LinkId=18377) 和如何在 Windows Server 2003 中加强 TCP/IP 堆栈抵御拒绝服务攻击的能力 (http://go.microsoft.com/fwlink/?LinkId=18376)。

Windows 2000 Server。在 DOS 攻击期间可能会出现心跳信号损失。如果损失太高,群集可能会分裂成多个群集,并导致客户端连接问题。在这种情况下,可以通过修改以下注册表值(参见本 FAQ 中的“安装和配置”一节,以获取有关 NLB 注册表设置的更多信息)来放宽 NLB 中的心跳信号损失标准:

将 AliveMsgTolerance 修改为 100(默认值是 5)。如果您从命令行处发出“wlbs reload”命令,NLB 将会加载此数量的更改。

将 AliveMsgPeriod 修改为 10000(默认值是 1000)。您必须重新启动服务器,或是先解除 NLB 到网络适配器的绑定,然后再重新建立绑定,更改才会生效。

Windows Server 2003。与 TCP/IP 堆栈的集成是动态的。不用进行任何人工干预。

问:如何保护我的 NLB 群集?
答:

NLB 假设它所连接到的 LAN 是可信的。确保只有受信机器连接到此 LAN 是保护 NLB 群集的第一步。作为附加措施,可以在所有主机上禁用 NLB 远程控制。如果您必须启用远程控制,请阅读以下文档:“网络负载平衡:Windows 2000 和 Windows Server 2003 的安全最佳做法” (http://go.microsoft.com/fwlink/?LinkId=18375)。

问:如何配置我的群集处理非对称负载?
答:

NLB 会根据适用于流量的端口规则,将负载分配给群集中的主机。默认情况下,端口规则会将负载均匀分配给每台主机。若要配置某台主机处理非均值负载,请编辑端口规则,取消选择“平均”负载比重复选框,然后输入一个介于 1 到 100 之间的负载比重。

负载比重指的是群集中有关成员的相对比重,它表明一台主机应当处理多少负载。为了确定某个群集成员将要处理的负载百分比,请用该主机的负载比重除以所有群集成员的负载比重总和。(选中“平均”复选框时端口规则的负载比重为 50。)

例如,请看以下这个双主机群集的案例。如果主机 1 的端口规则负载比重为 30,而主机 2 的端口规则比重为 10,则主机 1 将处理 30/(30+10),即 75% 的负载。主机 2 将处理 25% 的负载。

对于 Windows 2000 的警告:通过修改某个端口规则的负载比重,由此群集成员处理的连接数将会下降。这包括与其他端口规则有关的连接,但不包括达到专用 IP 地址的流量(如果存在的话)。无论使用何种版本的 Windows,更改群集的任何其他属性都会重设该端口上的当前连接。)

问:
答:

会话支持

问:NLB 支持“粘滞会话”吗?
答:

NLB 支持有限形式的会话粘滞:

单一关联。启用“单一”关联时,不会使用客户端的端口号,映射算法使用客户端的完整 IP 地址来确定负载分布。其结果是,所有来自相同源 IP 地址的请求都会映射到群集中的相同主机。由于不存在超时值(这是基于调度程序的实现的典型特点),这种情况会一直保持下去,直到群集成员关系更改。

C 类关联。在“单一”关联中,没有使用客户端端口号来计算负载分布。启用“C 类”关联时,映射算法是以客户端 IP 地址的“C 端口”(上面的 24 位)作为依据来分配负载的。在“单一”关联中,如果群集成员关系更改的话,会话可能不会保留。

TCP 会话。NLB 在 TCP 连接的有效期内保留 TCP 会话的粘性。但是,来自相同客户端的多个 TCP 连接可能会由相同的群集成员来处理,也可能不由相同成员处理。

IPSec 会话和 VPN 会话。在 Windows Server 2003 上,NLB 具有针对 IPSec 会话和 VPN 会话的专门支持。即使群集成员关系更改,NLB 也会保留这些会话。

问:单一关联模式与无关联模式有何不同?平衡应用程序负载时应当使用哪一个?
答:

使用单一客户端关联,NLB 仅根据传入连接的“源 IP 地址”来平衡流量负载。使用客户端关系,NLB 会根据传入连接请求的“源 IP 地址”和“源端口”来平衡流量负载。

您应当选择的模式取决于负载被平衡的应用程序。如果应用程序使用了跨越多个 TCP 连接的负载,您应当使用单一关联。否则请使用客户端关联,因为如果客户端不多的话,它可以提供更好的负载分布。

问:如果我的客户端使用 SSL 来连接前端 Web 服务器,我是否仍然可以使用 NLB?
答:

可以。出于效率原因,请将端口规则配置为单一客户端关联。但是,请注意以下情况:

负载平衡的质量会比客户端关联的质量更低。

在群集成员增加或减少时,“SSL 会话”会中断,但是协议将会透明地重新协商一个新的 SSL 会话。

如果所有会话都通过一个客户端代理,那么所有负载都将由一个群集成员处理。

问:
答:

应用程序和协议支持

问:NLB 可以用于平衡终端服务器的负载吗?
答:

可以,请参见“平衡终端服务器群集的负载” (http://go.microsoft.com/fwlink/?LinkId=18378)。

有关使用终端服务器会话目录平衡负载的详细信息,请参见“使用终端服务器的会话目录和负载平衡” (http://go.microsoft.com/fwlink/?LinkId=18379)。

问:NLB 有没有在 WINS 中注册 VIP?
答:

没有,WINS 名称不应被自动注册给在 NLB 接口中配置的 IP 地址。WINS 注册不能识别 NLB,因此专用 IP 地址和虚拟 IP 地址都将使用服务器的名称注册。在 WINS 中可以静态映射该 IP 地址。

问:NLB 有没有在 DNS 中注册 VIP?
答:

NLB 不会自动在 DNS 中注册群集名称。管理员必须静态配置 DNS。请注意,必须将该 IP 地址静态指定给 NLB。不要使用 DHCP。

问:我可以对 NLB 群集使用 L2TP/IPSec 吗?如何配置 NLB?
答:

可以,在 Windows Server 2003 中,NLB 支持 PPTP 和 L2TP VPN 会话。请参见以下知识库文章:“如何配置网络负载平衡以便与 IPSec 配合使用” (http://go.microsoft.com/fwlink/?LinkId=18380)。

问:可以对由 NLB 平衡负载的应用程序使用 Kerberos 吗?
答:

可以,请参见经负载平衡的 Web 站点的 Kerberos 身份验证 (http://go.microsoft.com/fwlink/?LinkId=18496)。

问:可以对“主机标头名称”使用 NLB 吗?
答:

可以。

问:可以对 .NET Remoting 使用 NLB 吗?
答:

.NET Remoting 通过一个 TCP 连接将方法调用经管道方式从客户端传递到服务器,这意味着一旦连接建立,它就会被后续的方法调用重复使用,并且只有在空闲时间达到一个预先配置的值时,连接才会关闭。NLB 可以平衡这些连接的负载,但负载平衡的质量可能不高,因为负载平衡的单元是 TCP 连接,而不是客户端“拴住”特定服务器后的方法调用,只有在很多客户端同时连接到群集时,负载才会分布得很好。每个客户端都获得负载平衡,但是连接将会在很长的一段时间内保持开发状态。

问:我使用 NLB 来平衡 COM+ 负载,但负载并没有分布开来。为什么呢?
答:

COM+ 使用客户端的连接池,一旦 TCP 连接建立后,这个连接池会导致在现有 TCP 连接上建立方法调用的管道。NLB 可以平衡 TCP 连接负载,但不是 COM+ 请求。请使用 COM+ 负载平衡,而不要使用 NLB。

问:我可以使用 NLB 作为防火墙吗?
答:

不能。NLB 并非设计用作防火墙。

问:我可以平衡 NetBIOS 流量负载吗?
答:

可以,这是可以的,尽管并不推荐“文件和打印服务”使用它。请确保满足以下条件:

1.

NetBIOS 要求 TCP/IP 中的第一个 IP 地址必须用于访问共享。因此,您不能定义专用 IP 地址。有关更多信息,请参见知识库文章使用 Windows NT 负载平衡服务时产生了系统错误 53 (http://go.microsoft.com/fwlink/?LinkId=18381)。

2.

参见 DisableStrictNameChecking 注册表值,遵照以下知识库文章的指示操作:“连接到基于 Windows 2000 的服务器上的 SMB 共享可能无法使用别名” (http://go.microsoft.com/fwlink/?LinkId=18382)。

问:
答:
返回页首返回页首