WindowsServer2008R2 NLB详细解

1 什么是群集?

群集是指一组服务器,通过彼此的协同作业,提供一个相同的服务或应用程序,用于提升服务或应用程序的可用性(availability)、可靠性(reliability)和可扩展性(scalability)。当群集内的服务器down掉以后,服务请求会转给其它群集内的节点,以实现24小时不中断的服务

2 Windows server 中的群集类型

Windows server 支持三种类型的群集,分别是NLB、CLB和MSCS。NLB与MSCS内置于windows server中,CLB需要购买Application Center

1) NLB (Network Load Balancing,网络负载平衡):提供以TCP/IP 为基础的服务与应用程序的网络流量负载均衡,用于提升系统的可用性和可扩展性。常见的应用有Terminal Service、Web、×××与FTP等。

2) CLB:提供使用COM+组件的中介层应用程序的动态负载均衡,用于提升系统的可用性和延展性。CLB会依据目前的工作负载来决定由谁来处理服务请求。

3) MSCS:提供后端服务与应用程序的容错移转(failover),主要是提升系统的可用性。常见的应用有SQL Server与Exchange Server等。MSCS是由client来决定由谁来处理服务请求,所有服务器共享一个share storage来储存session状态。当主动服务器挂了,则继续由被动服务器接手。被动服务器会从share storage取出session状态,继续未完成的工作,以达到容错移转的目的

3 NLB工作原理

NLB 群集用一个群集 IP 地址指定群集中所有服务器的地址,并且它还为每个主机保留一组唯一专用的 IP 地址。对于负载平衡的应用程序,当主机出现故障或者脱机时,会自动在仍然运行的计算机之间重新分发负载。当计算机意外出现故障或者脱机时,将断开与出现故障或脱机的服务器之间的活动连接。但是,如果您有意关闭主机,则可以在使计算机脱机之前,使用 drainstop 命令处理所有活动的连接。任何一种情况下,都可以在准备好时将脱机计算机明确地重新加入群集,并重新共享群集负载,以便使群集中的其他计算机处理更少的流量。

NLB 群集中的主机会交换检测消息以保持有关群集成员身份的数据的一致性。默认情况下,当主机在五秒之内未能发送检测消息时,该主机便出现了故障。当主机出现故障时,群集中的剩余主机将聚合在一起并执行以下操作:

1) 确定哪些主机仍然是群集中的活动成员。

2) 选择优先级最高的主机作为新的默认主机。

3) 确保所有新的客户端请求都由仍然活动的主机进行处理。

在聚合期间,仍然活动的主机会查找一致的检测信号。如果无法发送检测信号的主机开始提供一致的检测信号,则它会在聚合过程中重新加入群集。当新的主机尝试加入群集时,它会发送检测消息,该消息也会触发聚合。当所有群集主机对当前的群集成员身份达成一致之后,会向剩余主机重新分发客户端负载,并完成聚合。通常聚合只需几秒钟,因此由群集中断的客户端服务是非常少的。在聚合期间,仍然活动的主机会继续处理客户端请求,而不会影响现有连接。如果所有主机在几个检测期间报告的群集成员身份和分发映射都一致,则聚合结束。

如下图

节点A B C均有一个外部使用的静态IP地址,创建NLB群集时会产生一个虚拟的IP,该IP与节点的IP在同一个网段内,对外公布的 IP为虚拟的群集IP,而客户机所访问群集虚拟IP时实际上在访问节点A或者节点B或者节点C,具体哪台主机相应请求由NLB算法决定。

WindowsServer2008R2 NLB详细解_Windows

4 NLB新增功能

对于Windows Server 2008, NLB包括以下改进:

1) 支持IPv6。NLB对所有通信都完全支持IPv6。所有NLB组件都支持IPv6地 址,并且可以将这些地址配置为主要群集IP地址、专用IP地址和虚拟IP地址。 此外,还可以作为纯IPv6以及在IPv6 over IPv4模式下对IPv6进行负载平衡。

2) 支持NDIS6.0。NLB驱动程序使用NDIS6.0轻型筛选模型。NDIS6.0保持与 早期NDIS版本的向后兼容性。NDIS 6.0的设计包括增强的驱动程序性能和可伸 缩性以及简化的NDIS驱动程序模型。

3) WMI增强。MicrosoftNLB命名空间添加了对IPv6的多个专用IP地址支持,它 们包括:

MicrosoftNLB命名空间中的类支持IPv6地址(除了 IPv4地址之外)。

MicrosoftNLB_NodeSetting类支持多个专用的IP地址,方法是在 Dedicated!PAddresses 和 DedicatedNetMasks 中指定这些地址。

4) 改进了拒绝服务(DoS)攻击和计时器饥饿保护。使用回调接口,NLB可以在攻 击期间或者节点负载过高时检测并通知应用程序。当群集节点过载或者受到攻击 时,ISA服务器使用该功能。

5) 支持每个节点使用多个专用IP地址。NLB完全支持为每个节点定义多个专用IP 地址。以前只支持每个节点使用一个专用IP地址。当客户端由IPv4和IPv6通 讯组成时,ISA服务器可以使用该功能来管理每个NLB节点。

6) 支持滚动升级。NLB 支持从 Windows Server2003 到 Windows Server2008 的 滚动升级。有关NLB的部署信息(包括有关滚动升级的信息),请参阅 http://go.microsoft.com/fwlink/?Linkld=87253o

7) 通过网络负载平衡管理器综合管理。不再需要使用网络连接工具配置NLB群集, 只需通过Windows Server2008中的NLB管理器即可执行NLB群集配置。这 样便可以最大程度地减少可能因群集主机之间设置不一致引起的NLB配置问题。

5 网络负载平衡功能

5.1 可伸缩性

可伸缩性是度量计算机、服务或应用程序如何更好地改进以满足持续增长的性能需求的 标准。对于NLB群集而言,可伸缩性是指当群集的全部负载超过其能力时逐步将一个或多 个系统添加到现有群集中的功能。下表详细介绍了 NLB的可伸缩×××:

1) 平衡NLB群集上对各个TCP/IP服务的负载请求

2) 在一个群集中最多支持32台计算机

3) 平衡群集中多个主机之间的多个服务器负载请求(来自同一个客户端或者来自几个 客户端)

4) 支持在负载增加时,能够在不关闭群集的情况下向NLB群集中添加主机

5) 支持在负载降低时,能够从群集中删除主机

6) 通过全部实现管道化提高性能并降低开销。管道允许向NLB群集发送请求,而无 需等待响应上一个发送的请求

5.2 高可用性

通过最大程度地减少停机时间,高可用系统能够可靠地提供可接受级别的服务。NLB包 括一些内置功能,可以通过自动执行以下操作来提供高可用性:

1) 检测发生故障或脱机的群集主机并对其进行恢复。

2) 在添加或删除主机时平衡网络负载。

3) 在十秒之内恢复并重新分发负载。

5.3 可管理性

NLB提供以下可管理×××:

1) 使用NLB管理器,可以从单个计算机管理和配置多个NLB群集和群集主机。

2) 使用端口管理规则,可以为单个IP端口或一组端口指定负载平衡行为。

3) 可以为每个网站定义不同的端口规则。如果您对多个应用程序或网站使用相同的一 组负载平衡服务器,则端口规则基于目标虚拟IP地址(使用虚拟群集)。

4) 使用可选的单主机规则,可以将所有客户端请求引导至单个主机。NLB将客户端 请求路由到运行特定应用程序的特定主机。

5) 可以阻止对某些IP端口进行不需要的网络访问。

6) 可以在群集主机上启用Internet组管理协议(IGMP)支持,以控制交换机广播

7) (在多播模式中操作时)。

8) 使用shell命令或脚本,可以从运行Windows的任何联网计算机上远程启动、 停止和控制NLB操作。

9) 可以查看Windows事件日志以检查NLB事件。NLB在事件日志中记录所有操 作和群集更改。

5.4 易用性

NLB提供了许多便于使用的功能:

1) 可以作为标准的Windows网络驱动程序组件安装NLB。

2) NLB不需要更改任何硬件即可启用和运行。

3) 使用NLB管理器可以新建NLB群集。

4) 使用NLB管理器,可以从一台远程或本地计算机上配置和管理多个群集以及群集 的所有主机。

5) NLB允许客户端使用单个逻辑Internet名称和虚拟IP地址(称为群集IP地 址,它保留每台计算机的各个名称)访问群集。NLB允许多宿主服务器具有多个 虚拟IP地址。注意,如果是虚拟群集,则不需要服务器是多宿主服务器即可具有 多个虚拟IP地址。

6) 可以将NLB绑定到多个网络适配器,这样您便可以在每个主机上配置多个独立的 群集。支持多个网络适配器与虚拟群集不同,因为虚拟群集允许您在单个网络适配 器上配置多个群集。

7) 不需要修改服务器应用程序即可在NLB群集中运行。

8) 如果群集主机出现故障并且后来又恢复联机,则可以将NLB配置为自动将该主机 添加到群集。之后,添加的主机将能够开始处理来自客户端的新的服务器请求。

9) 可以在不打扰其他主机上群集操作的情况下使计算机脱机进行预防性的维护。

6 NLB的容错功能

如果NLB群集中的服务器成员有变动,如服务器故障、服务器脱离群集或增加新服务 器,则NLB会启动一个称为聚合(convergence)的程序,以便让NLB集群中的所有服务 器保持一致的状态并生新分配工作任务。

例如,NLB群集中的服务器会随时监听其他服务器的心跳状态,以便检测是否有其他 服务器出现故障。若有服务器出现故障,检测到此状况的服务器便会启动聚合程序,在聚合 程序运行时,现有正常的服务器仍然会继续服务,同时正在处理中的请求也不会受到影响, 当完成聚合程序后,所有连接web farm网站的请求,会重新分配给剩下仍正常的web服务 器来负责。

7 NLB的相似性

相似性用于定义源主机与NLB群集成员之间的关系。比如,如果群集中有3台web服 务器,当外部主机(源主机)要连接web farm时,此请求应由web farm中的哪一台服务

器来负责处理?是由NLB提供的3种相似来决定的。

1) 无(none):此时NLB是根据源主机的IP地址与端口,将请求分配给其中一台服 务器处理,群集中每一台服务器都有一个主机ID (host ID),而NLB根据源主机 的IP地址与连接端口计算出来的哈希值(hash)与主机ID有关联性,因此NLB 群集会根据哈希值将此请求发给拥有主机ID的服务器负责处理。因为它同时根据 源主机的IP地下与端口将请求分配给其中一台服务器处理,因此同一台外部主机 提出的多个连接web farm请求(源主机的IP地址相同、TCP端口不同),可能会 分别由不同的web服务器来负责。

2) 单一(single):此时NLB仅根据源主机的IP地址将请求分配给其中一台web服 务器处理,因此同一台外部主机提出的所有连接web farm请求,都会由同一台服 务器来负责处理。

3) Class C:它是根据源主机的IP地址中最高3个字节,将请求分配给其中一台web 服务器处理。也就是IP地址中最高3个字节相同的所有外部主机,它所提出的连 接web farm请求都会由同一台web服务器负责。比如,63.11.11.1~63.11.11.254的外部主机的请求,都会由同一台web服务器来负责处理。虽然,NLB默认是通过相似性将客户端的请求分配给其中一台服务器来负责处理,但 可以另外通过端口规则来更改相似性。比如,可以在端口规则中将特定流量指定由优先级较 高的一台服务器来负责处理,系统默认的端口规则包括所有流量。且会依照设置的相似性将 客户端的请求分配给某台服务器来负责处理,也就是所有流量都具备网络负载平衡与容错功 倉巨。

8 生产环境下的NLB

在生产环境中推荐使用硬件的NLB设备,后台数据存放到独立的存储设备,例如:

使用防火墙的发行规则来实现NLB效果,例如ISA防火期;ISA Server接收到外部连接内部网站的请求时, 它会根据发行规则的设置,将此请求转交给web farm中的一台web服务器处理。ISA Server 也具备自动检测web服务器是否停止服务的功能,因此它只会将请求转给仍然正常运行的 web服务器,不会转给已停止服务的web服务器。

WindowsServer2008R2 NLB详细解_server_02

或者使用专门的NLB硬件设备,例如F5;使用统一的存储例如SAN/NAS等,保证用户访问数据的统一性;

WindowsServer2008R2 NLB详细解_server_03

或者使用文件服务器做为数据服务器,用DFS(分布式文件系统)复制保证数据的统一性,架设多台文件服务器还可保证服务器容错性;

WindowsServer2008R2 NLB详细解_Windows_04

9 NLB操作模式

9.1 NLB单播模式下的业务流程

在单播模式下,NLB重新对每个NLB节点中启用NLB的网络适配器分配MAC地址(此MAC地址称为群集MAC地址),并且所有的NLB节点均使用相同的MAC地址(均使用群集MAC地址),同时NLB修改所有发送的数据包中的源MAC地址(NLB利用MaskSourceMac功能,更改外送数据包的ethernet header中的源mac地址,也就是将群集mac地址中最高第2组字符改为主机id,然后将此修改过的mac地址作为源mac地址),确保使交换机不能将此群集MAC地址绑定在某个端口上。

工作在单播模式下的NLB可以在所有网络环境下正常运行,但是由于它的工作特性,具有以下两个限制:

1) 由于NLB所使用的群集MAC地址没有绑定在某个具体的交换机端口上,所以所有的NLB通讯均通过在交换机的所有端口上广播进行,而不管此端口是否连接了NLB节点,这造成了额外的网络流量负担(解决该问题可以通过加入一个hub设备,NLB设备连接hub,hub在链接交换机某个端口,这样这个端口便与群集mac绑定);

2) 由于所有的NLB节点具有相同的MAC地址,NLB节点之间不能通过自己原有的专用IP地址进行通讯。

单播模式的优点也很明显:它可以无缝地与大多数路由器和交换机协同工作(解决该问题可以在每个节点上都加一块网卡,专门用户节点之间互相通讯,保证节点数据的统一性)。

如下图所示:

WindowsServer2008R2 NLB详细解_server_05

单播的其他注意项:

在Windows server 2003 SP1中,微软修改了NLB单播模式的驱动,从而支持阵列成员通过自己原有的专用IP地址进行通讯。

若我们在NLB创建时选择单播的模式,在“群集IP配置”中的“网络地址”是以“02 - BF”开头,后面紧跟IP地址的十六进制表示,该网络地址与实际主机的MAC地址相同,后续加入的主机也将修改为此MAC地址。

9.2 NLB组播模式下的业务流程

在多播模式下,NLB不会修改NLB节点启用NLB的网络适配器的MAC地址,而是为它再分配一个二层多播MAC地址专用于NLB的通讯(此MAC地址称为群集MAC地址),这样NLB节点之间可以通过自己原有的专用IP地址进行通讯。

但是在多播模式中,NLB节点发送的针对群集IP地址MAC地址ARP(Address Resolution Protocol,地址解析协议)请求的ARP回复会将群集IP地址映射到多播MAC地址,而许多路由器或者交换机(包括CISCO的产品)会拒绝这一行为。当出现这种情况时,你必须在路由器和交换机上手动添加静态映射,将群集IP地址映射到群集的多播MAC地址。

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

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

如下图所示:

WindowsServer2008R2 NLB详细解_NLB_06

9.3 NLB IGMP多播模式下的业务流程

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

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

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

如下图所示:

WindowsServer2008R2 NLB详细解_server_07

NLB对路由器的要求

当群集已配置为在多播模式下工作时,如果网络负载平衡客户端正在通过路由器访问一个群集,请确保路由器满足以下要求:

接受地址解析协议 (ARP) 应答,此应答在 ARP 结构的有效负载部分有一个媒体访问控制 (MAC) 地址,但正如以太网报头所确定的,它看上去像来自具有另一个 MAC 地址的站点。

接受单播 IP 地址的 ARP 应答,此应答在其 ARP 结构的有效负载部分有一个多播 MAC 地址。

10 基于WindowsServer2008R2 NLB配置实例

本次试验拓扑如下:

? 节点A和节点B为俩台VmWare虚拟机,系统为WindowsServer2008R2,安装有IIS、NLB;

? 客户端由真机代替系统为Win7;

WindowsServer2008R2 NLB详细解_NLB_08

10.1 配置基于NLB群集的WEB服务

10.1.1 配置节点IP和主机名;

节点A网络配置

WindowsServer2008R2 NLB详细解_server_09

节点A主机名配置

WindowsServer2008R2 NLB详细解_server_10

节点B网络配置

WindowsServer2008R2 NLB详细解_server_11

节点B主机名配置

WindowsServer2008R2 NLB详细解_server_12

节点A与节点B的网络模式

WindowsServer2008R2 NLB详细解_Windows_13

10.1.2 俩台服务器分别安装WEB服务;

分别在俩台节点角色中添加IIS

WindowsServer2008R2 NLB详细解_server_14

IIS安装完成

WindowsServer2008R2 NLB详细解_NLB_15

为了后期测试方便,将俩台节点默认的index.html修改

分别在俩台节点上执行 开始>管理工具>IIS控制台右>击默认网站>浏览;

WindowsServer2008R2 NLB详细解_Windows_16

在弹出的文件夹中,右击iisstart,选择打开方式为记事本;

WindowsServer2008R2 NLB详细解_server_17

如下修改,保存,退出;

WindowsServer2008R2 NLB详细解_NLB_18

WindowsServer2008R2 NLB详细解_server_19

以同样的方式配置节点B;

WindowsServer2008R2 NLB详细解_Windows_20

WindowsServer2008R2 NLB详细解_server_21

10.1.3 俩台服务器分别安装NLB服务

分别在俩台节点中在功能中添加网络负载平衡组件

WindowsServer2008R2 NLB详细解_Windows_22

安装成功

WindowsServer2008R2 NLB详细解_server_23

在任意一台节点主机上执行点击“开始”>“管理工具”>“网络负载平衡管理器”>右击“网络负载平衡群集”>“新建群集”;

WindowsServer2008R2 NLB详细解_server_24

输入本节点主机名(如果没有环境中没有DNS服务器推荐填写节点的IP地址而不填写主机名),单击“链接”;下一步;

WindowsServer2008R2 NLB详细解_NLB_25

在主机参数页面保持默认配置单击下一步;

WindowsServer2008R2 NLB详细解_Windows_26

在弹出的群集IP地址页面,单击“添加”输入群集ip,单击确定;单击下一步;

WindowsServer2008R2 NLB详细解_Windows_27

在弹出的群集参数页面,填写Internet名称(自定义),选择“多播”单击下一步;

WindowsServer2008R2 NLB详细解_NLB_28

在端口规则页面保持默认,单击完成;

WindowsServer2008R2 NLB详细解_server_29

节点B配置完成;

WindowsServer2008R2 NLB详细解_server_30

右键刚建好的群集,选择添加主机到群集;

WindowsServer2008R2 NLB详细解_NLB_31

输入节点A的ip地址单击链接,单击下一步 ;

WindowsServer2008R2 NLB详细解_server_32

WindowsServer2008R2 NLB详细解_Windows_33

WindowsServer2008R2 NLB详细解_NLB_34

节点A添加完成

WindowsServer2008R2 NLB详细解_Windows_35

10.2 测试客户端与服务器处于同一网段的访问情况

测试拓扑如下

WindowsServer2008R2 NLB详细解_NLB_36

将俩台节点的网卡模式调整为nat模式

WindowsServer2008R2 NLB详细解_Windows_37

客户端网络配置(为了避免其他因素影响,推荐禁用除vm8以外的网卡);

WindowsServer2008R2 NLB详细解_server_38

客户端访问群集IP(可以看到访问到的节点为节点A);

WindowsServer2008R2 NLB详细解_server_39

将节点A网卡断开测试

WindowsServer2008R2 NLB详细解_Windows_40

继续访问群集IP(可以看到访问到的节点为节点B)禁用网卡只是为了测试方便,此时节点A与节点B都在运行,可以用一台客户端多次访问,或者多台客户端访问,可以看到俩台节点都在提供访问请求;

WindowsServer2008R2 NLB详细解_NLB_41

10.3 测试客户端与服务器处于不同网段的访问情况

模拟拓扑如下

WindowsServer2008R2 NLB详细解_NLB_42

将真机网卡vm8调整为任意不与10.0同网段ip即可,否则影响测试效果;例如

WindowsServer2008R2 NLB详细解_Windows_43

配置真机网卡vm1ip为192.168.30.18,为保证测试效果,将除vm1和vm8以外其他网卡禁用;

WindowsServer2008R2 NLB详细解_server_44

打开GNS3,拓扑链接如下

WindowsServer2008R2 NLB详细解_server_45

C1配置如下

WindowsServer2008R2 NLB详细解_NLB_46

路由器配置如下;

R1#conf t

R1(config)#int e0/1

R1(config-if)#ip add 192.168.30.1 255.255.255.0

R1(config-if)#no sh

R1(config-if)#int e0/0

R1(config-if)#ip add 192.168.10.1 255.255.255.0

R1(config-if)#no sh

R1(config-if)#exit

R1(config)#ip routing
此时继续访问群集IP结果如下

此时ping群集ip不通

WindowsServer2008R2 NLB详细解_Windows_47

访问群集ip不能打开网页;

WindowsServer2008R2 NLB详细解_Windows_48

登录任一群集节点,打开“网络负载平衡管理器“,右击群集,选择”群集属性“;

WindowsServer2008R2 NLB详细解_server_49

选择“群集参数“标签,记录下方群集MAC地址:03-bf-c0-a8-0a-0a

WindowsServer2008R2 NLB详细解_server_50

路由器配置如下,将群集ip和群集MAC地址做静态映射

R1(config)#arp 192.168.10.10 03bf.c0a8.0a0a arpa

继续测试访问,此时已经可以ping通群集ip地址

WindowsServer2008R2 NLB详细解_server_51

访问群集ip地址已经可以访问到网页;

WindowsServer2008R2 NLB详细解_NLB_52

多次刷新网页,或者可以禁用B节点网卡,或者将B节点宕机;可以看到可以切换到节点A;

WindowsServer2008R2 NLB详细解_NLB_53

其他参考链接

http://wenku.baidu.com/link?url=Z94_Up5dMA9kaH85zDt1iyJ46A-_nlYxQCzRjeBkts3vRd_9yRdiOIeeT0LMRSgdvYKZENaDCtK-arXKG778CVH-Hb-FpEGvhKPfVdXAQju

http://www.huawei.com/ecommunity/bbs/10162957.html

本文由 大郭讲堂 测试整理,如果疏漏之处请留言指出,旨在提高文档质量、技术交流;

博客链接 http://daguo.blog.51cto.com/ QQ空间链接http://user.qzone.qq.com/1843472029/main