一、关于NLB的官方描述,在搭建NLB群集之前,必须先对NLB的原理进行初步了解
Windows Server 2008 R2 中的网络负载平衡 (NLB) 功能可以增强 Internet 服务器应用程序 [如在 Web、FTP、防火墙、代理、虚拟专用网络 (VPN) 以及其他执行关键任务的服务器上使用的应用程序] 的可用性和可伸缩性。运行 Windows Server 2008 R2 的单个计算机提供有限的服务器可靠性和可伸缩性能。但是,通过将运行 Windows Server 2008 R2 的其中一个产品的两台或多台计算机的资源组合到单个虚拟群集中,NLB 便可以提供 Web 服务器和其他执行关键任务服务器所需的可靠性和性能。
NLB 允许使用相同的群集 IP 地址集指定群集中所有计算机的地址,并且它还为每个主机保留一组唯一专用的 IP 地址。对于负载平衡的应用程序,当主机出现故障或者脱机时,会自动在仍然运行的计算机之间重新分发负载。当计算机意外出现故障或者脱机时,将断开与出现故 障或脱机的服务器之间的活动连接。但是,如果您有意关闭主机,则可以在使计算机脱机之前,使用
drainstop 命令处理所有活动的连接。任何一种情况下,都可以在准备好时将脱机计算机明确地重新加入群集,并重新共享群集负载,以便使群集中的其他计算机处理更少的流量。
NLB 群集中的主机会交换检测消息以保持有关群集成员身份的数据的一致性。默认情况下,当主机在五秒之内未能发送检测消息时,该主机便出现了故障。当主机出现故障时,群集中的剩余主机将聚合在一起并执行以下操作:
- 确定哪些主机仍然是群集中的活动成员。
- 选择优先级最高的主机作为新的默认主机。
- 确保所有新的客户端请求都由仍然活动的主机进行处理。
在聚合期间,仍然活动的主机会查找一致的检测信号。如果无法发送检测信号的主机开始提供一致的检测信号,则它会在聚合过程中重新加入群集。当新 的主机尝试加入群集时,它会发送检测消息,该消息也会触发聚合。当所有群集主机对当前的群集成员身份达成一致之后,会向剩余主机重新分发客户端负载,并完 成聚合。
通常聚合只需几秒钟,因此由群集中断的客户端服务是非常少的。在聚合期间,仍然活动的主机会继续处理客户端请求,而不会影响现有连接。如果所有主机在几个检测期间报告的群集成员身份和分发映射都一致,则聚合结束。
|
NLB 中有什么新增功能?
对于 Windows Server 2008 R2,NLB 包括以下改进:
-
扩展的相关性。“扩展”选项可在 NLB 群集的配置发生更改时保持客户端的相关性。通过该选项,即使在客户端与主机之间没有任何活动的现有连接的情况下,客户端仍能够保持与群集主机的相关性。
-
用于 NLB 群集的 Windows PowerShell。Windows PowerShell 是一种新的命令行界面和脚本语言。Windows PowerShell 可加速实现系统管理任务的自动化。可以使用 Windows PowerShell 管理 NLB 群集。有关将 Windows PowerShell 用于 NLB 群集的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=140180(可能为英文网页)。
-
支持滚动升级。NLB 支持从 Windows Server 2003 到 Windows Server 2008 R2 以及从 Windows Server 2008 到 Windows Server 2008 R2 的滚动升级。有关 NLB 的部署信息(包括有关滚动升级的信息),请参阅 http://go.microsoft.com/fwlink/?LinkId=87253。
|
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 提供了许多便于使用的功能:
|
二、了解了NLB相关的技术知识后,下面我们就可以做测试了,先看看本次测试的拓扑结构
三、测试步骤
首先需要搭建如图的实验环境,本例在域环境下测试,出于实验的方便,我先更改了高级共享设置和防火墙设置
在NLB1和NLB2上分别安装网络负载平衡功能
两个节点均安装完成后,在NLB1上配置网络负载均衡,节点一配置完成后,再将节点二加入到节点一得NLB中
首先新建群集,将当前节点加入到NLB中,设置public网卡为群集接口
在“主机参数”,设置优先级(单一主机标识符),作用是设定NLB群集中节点进行负载的优先级
设置一个群集IP地址,如果是用IIS进行测试,则访问WEB的时候,实际访问群集IP,或在DNS中建立一个对应群集IP的网站A记录,访问群集IP对应的FQDN名。客户访问IIS的时候,不会感觉到后面负载的变化。
设置一个群集IP地址,与PUBLIC网卡出于同一个网段
设定一个群集IP对应的完整Internet名称,群集的操作模式这里保持默认
关于单播和多播的区别(下面的话引自网络)
单播:在每个群集成员上,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设置时,首先考虑单播模式,除非单播不能满足其要求,若要解决流量扩展的方法,推荐使用VLAN。
|
节点一配置完成后,回到节点二上,打开节点二的群集管理器,将NLB2连接到现存的群集
输入第一个节点主机名,点击连接后,在下方的群集窗口会出现已存的群集
连接到群集后,下面将节点n3.contoso.com加入到现存的群集
添加完成后,如图所示
下面将进行NLB负载测试
如图网卡中会多一个群集IP地址
断掉上步骤中访问的节点的网卡连接,再次尝试访问,效果如图所示
配置网络负载均衡群集需要注意:网络负载平衡并不为经过负载的主机提供额外的安全保护,也不可以将其用于防火 墙,因此,正确地保护经过负载平衡的应用程序和主机是很重要的。如果可能,在每个群集的主机上至少要使用两个网络适配器,但并非必要条件,在群集适配器上 只使用TCP/IP协议,确保群集中的所有主机属于同一个子网并且客户机能够访问该子网,使用网络负载平衡管理器配置NLB群集,启用日志记录,不要启用 网络负载平衡的远程控制。
NLB提供网络负载均衡服务,每个节点都监听到客户端的请求,每个节点都在本地存储一份数据,支持32个节点,可以是域环境或者工作组的环境。
四、实施网络负载均衡中可能遇到的问题(微软官方文档)
安装网络负载平衡并重新启动群集主机之后,出现一条消息:“系统已检测到有一个 IP 地址与网络上的其他系统发生冲突...”
-
原因:网络上已存在相同的 IP 地址。
-
解决方案:选择一个新的 IP 地址,或者删除重复的地址。
-
原因:您在主机上配置了不同的群集操作模式(“单播”或“多播”),这样会使两个不同的 MAC 地址映射到同一个 IP 地址。
-
解决方案:确保将所有主机配置为具有相同的群集操作模式。
-
原因:将 NLB 绑定到网络适配器之前,已经配置了群集的 IP 地址。
-
解决方案:从 TCP/IP 属性中删除群集的 IP 地址,在相应的适配器上启用 NLB,然后配置群集的 IP 地址。
-
原因:您已将群集的 IP 地址添加到尚未启用 NLB 的网络适配器中。
-
解决方案:从不正确适配器的 TCP/IP 属性中删除群集的 IP 地址,在相应的适配器上启用 NLB,然后配置群集的 IP 地址。
使用 ping 从外部网络访问群集的 IP 地址时没有响应。
验证是否可以使用
ping 从路由器之外的计算机访问群集主机的专用 IP 地址。如果该测试失败,并且您使用了多个网络适配器,则此问题与 NLB 无关。如果您对专用 IP 地址和群集 IP 地址使用了一个网络适配器,请考虑以下原因:
-
原因:如果您使用了多播支持,您可能会发现路由器无法通过使用地址解析协议 (ARP) 将主要 IP 地址解析为多播媒体访问控制 (MAC) 地址。
-
解决方案:验证是否可以使用 ping 从群集子网上的客户端访问群集,以及是否可以从路由器之外的计算机访问群集主机的专用 IP 地址。如果这些测试都工作正常,则可能是路由器出现了故障。您应该能够通过向路由器中添加静态 ARP 条目来避开此问题。还可以关闭 NLB 多播支持,并使用单播网络地址(在没有集线器的情况下)。
-
原因:在多播或单播模式中使用 NLB 时,路由器需要接受代理 ARP 响应(在 Ethernet 框架中用不同网络源地址接收的 IP 到网络地址的映射)。
-
解决方案:确保您的路由器打开了代理 ARP 支持。还可以设置静态 ARP 条目以保持禁用路由器中的代理 ARP 支持。
-
原因:群集的 Internet 控制消息协议 (ICMP) 被路由器或防火墙阻止。
-
解决方案:允许 ICMP 通讯通过路由器或防火墙。请注意,这可能会使您的系统暴露于其他的安全风险。
使用 ping 从一台群集主机访问另一台主机的专用 IP 地址时没有响应。
-
原因:在多播或单播模式中使用 NLB 时,路由器需要接受代理 ARP 响应(在 Ethernet 框架中用不同网络源地址接收的 IP 到网络地址的映射)。
-
解决方案:确保您的路由器打开了代理 ARP 支持。还可以设置静态 ARP 条目以保持禁用路由器中的代理 ARP 支持。
-
原因:群集的 Internet 控制消息协议 (ICMP) 被路由器或防火墙阻止。
-
解决方案:允许 ICMP 通讯通过防火墙或路由器。请注意,这可能会使您的系统暴露于其他的安全风险。
尝试使用网络负载平衡管理器连接到群集中的某个主机时,收到错误“不能访问主机”。
-
原因:主机的 Internet 控制消息协议 (ICMP) 被路由器或防火墙阻止,或者在主机的网络适配器上被禁用。
-
解决方案:在主机的网络适配器上启用 ICMP 或者允许 ICMP 通讯通过防火墙或路由器。请注意,这可能会使您的系统暴露于其他的安全风险。还可以使用 NLB 管理器的 /noping 选项。
使用 Telnet 或尝试从群集主机浏览群集之外的计算机时,没有响应。
-
原因:验证是否可以使用 ping 访问群集之外的计算机。如果此测试成功,则可能没有在 TCP/IP 属性中首先列出主机的专用 IP 地址。
-
解决方案:如果 ping 未能访问群集之外的计算机,请参考以下问题(在此疑难解答主题的前面部分进行了描述):
从群集之外的计算机调用网络负载平衡远程控制命令时,一个或多个群集主机中没有响应。
-
原因:没有将远程控制命令发送到群集的 IP 地址。
-
解决方案:必须将命令发送到群集的主要 IP 地址,可以在“网络负载平衡属性”对话框中指定该操作。确保将远程命令发送到正确的 IP 地址。
-
原因:Internet 协议安全 (IPSec) 对远程控制通讯进行了加密。如果 NLB 远程控制命令是从配置了 IPSec(以便 IPSec 对远程控制通讯进行加密)的计算机发送的,则这些命令将无法正常运行。
-
解决方案:禁用 IPSec。
有关详细信息,请参阅 Internet 协议安全 (IPSec) 帮助内容。
-
原因:防火墙未正确保护 NLB UDP 控制端口。默认情况下,会将远程控制命令发送到群集 IP 地址上的 UDP 端口 1717 和 2504。
-
解决方案:确保这些端口尚未被路由器或防火墙错误阻止。还可以通过修改相应的 NLB 参数来更改端口号。
使用主机的专用 IP 地址将其指定为远程控制命令的目标时,没有应答。但是,按其优先级 (ID) 指定主机正常运行。
-
原因:没有主机具有专用 IP 地址。
-
解决方案:为每个主机指定一个专用 IP 地址。有关详细信息,请参阅配置网络负载平衡主机参数。
拒绝某些用户(并非所有用户)连接群集。
-
原因:正在进行负载平衡的应用程序没有响应。
-
解决方案:这是一个应用程序特定的问题,与 NLB 无关。请参考您的应用程序文档来更正此问题。您可能需要停止并重新启动应用程序。
-
原因:如果群集配置为单播模式,则某个交换机可能已经知道了 NLB 网络适配器的 MAC 地址。
-
解决方案:清除该交换机的端口到 MAC 地址的映射。
-
原因:在一个或多个主机上,未将群集的 IP 地址添加到 TCP/IP 中。
-
解决方案:如果没有使用 NLB 管理器配置您的群集,则必须使用群集的 IP 地址手动配置 TCP/IP。
-
原因:某个主机由于使用了 drainstop 或 stop 命令而正在离开群集,但聚合未正常完成。
-
解决方案:等待聚合完成。如果聚合未完成,请参阅该疑难解答主题中后面的以下问题:
群集主机启动后便开始聚合,但它们从未完成聚合
无法通过使用 net config 和 Windows Management Instrumentation (WMI) 查看或更改网络负载平衡的属性。
-
原因:若要查看或更改“网络负载平衡属性”,必须是管理员组的成员。
-
解决方案:以运行 NLB 的计算机上的本地管理员组成员的用户身份登录。
由服务器或客户端重设的到群集 IP 地址的 TCP 连接数量异常。
-
原因:在 NLB 主机上启用了 HTTP keep-alive 值,并且启用了 keep-alive 值的客户端正在连接群集。
-
解决方案:禁用 HTTP keep-alive 值。有关 HTTP keep-alive 值和 Internet 信息服务 (IIS) 的详细信息,请参阅 IIS 文档集。
若要从桌面上查看 IIS 文档集,请安装 IIS,然后单击“开始”,再单击“运行”,然后在“打开”文本框中键入以下命令: %windir%\help\iisrv.chm
-
原因:服务器上的系统资源不足,从而导致 TCP 拒绝连接。
-
解决方案:释放系统资源,例如,通过添加额外的系统内存或者关闭不必要的应用程序。
-
原因:群集已被分为两个单独聚合的群集,这样导致多个节点要求获得每个连接的所有权。
-
解决方案:删除这两个群集,然后重新创建一个群集。
当进行引起聚合的更改(如添加主机、删除主机或排出主机)时,虚拟专用网络 (VPN) 调用失败。
-
原因:当使用 NLB 对 VPN 通讯进行负载平衡时,您必须将用于管理处理 VPN 通讯(对于 PPTP/GRE 为 TCP 端口 1723;对于 IPSEC/L2TP 为 UDP 端口 500)的端口的端口规则配置为使用“单一”或“网络”相关性。
-
解决方案:将用于管理端口 500 和 1723 的端口规则配置为使用“单一”或“网络”相关性。有关详细信息,请参阅网络负载平衡管理器属性。
群集主机启动后便开始聚合,但它们从未完成聚合。
-
原因:在不同的群集上输入了不同数量的端口规则或者输入了不兼容的端口规则。这将会阻止聚合。
-
解决方案:在每个群集主机上,打开“网络负载平衡属性”对话框,并验证所有主机都具有相同的端口规则。
-
原因:网络适配器或电缆已损坏。
-
解决方案:使用 ping 命令测试连接情况。输入主机的完全限定的域名。还可以通过使用 ping 命令按 IP 地址搜索域控制器以及按名称和 IP 地址搜索其他网络服务器,了解有关此问题的详细信息。
-
原因:某个交换机或集线器上的双工设置不匹配。
-
解决方案:确认每个交换机和集线器中的双工设置配置正确。
-
原因:网络上已经存在为其中一个主机使用的专用 IP 地址。
-
解决方案:选择一个新的 IP 地址,或删除重复的地址。
-
原因:您的群集包含运行 Windows 2000 的主机。
-
解决方案:您的群集必须在所有主机上都运行 Windows Server 2008。仅当滚动升级到 Windows Server 2008 时,才支持包含运行 Windows Server 2003 和 Windows Server 2008 的主机的 NLB 群集环境。不支持长期在同一个群集中混合使用 Windows Server 2003 和 Windows Server 2008。
-
原因:在主机上配置了不同的群集操作模式(单播和多播)。
-
解决方案:使用 NLB 管理器确保将所有主机配置为具有相同的群集操作模式。
备注
还可以查看 Windows 事件日志以检查错误和警告。有关详细信息,请参阅
安装网络负载平衡。
群集移入和移出已聚合状态。
-
原因:由于网络适配器或电缆已损坏或者其他网络问题导致网络间歇性连接,因此检测信号丢失。
-
解决方案:使用 ping 命令测试连接情况。输入主机的完全限定的域名。还可以通过使用 ping 命令按 IP 地址搜索域控制器以及按名称和 IP 地址搜索其他网络服务器,了解有关此问题的详细信息。
群集主机启动后,网络负载平衡报告聚合已完成,但是存在多个默认主机。
-
原因:群集主机已成为不同子网的成员,因此无法在同一个网络*问所有主机。
-
解决方案:确保所有群集主机可以彼此通信。
-
原因:正在使用三层交换机。
-
解决方案:在主机和三层交换机之间放置一个两层交换机。
-
原因:冗余交换机的中断导致群集分为两个群集,从而创建两个默认的主机。
-
解决方案:删除这两个群集,然后创建一个群集。
-
原因:您的交换机已配置为拒绝广播数据包。
-
解决方案:将您的交换机配置为可接受广播数据包(请注意这可能会引入某些安全风险)或者将 NLB 群集配置为可使用多播模式。
-
原因:一个主机无法发送或接收检测信号。
-
解决方案:使用 ping 命令测试与每个主机的连接情况。输入主机的完全限定的域名。
-
原因:某个主机插入了交换机的错误端口中。
-
解决方案:使用交换机上的正确端口。
网络负载平衡未应用负载平衡,默认主机处理所有网络流量。
-
原因:缺少端口规则。默认情况下,NLB 会将端口规则不管理的所有传入网络通讯引导至默认主机,这样可确保您不希望进行负载平衡的应用程序行为正常。
-
解决方案:若要对群集上的应用程序进行负载平衡,请在每个群集主机上为该应用程序处理的 TCP/IP 端口创建端口规则。
-
原因:向单个主机群集中添加了第二个主机,但第二个主机配置不正确。群集从不聚合并且初始主机继续处理所有通讯。
-
解决方案:仔细查看(如果需要,请进行更正)第二个主机上的每个设置,例如群集 IP 地址、专用 IP 地址和端口规则。
-
原因:如果群集配置为单播模式,则某个交换机可能已经知道了 NLB 网络适配器的 MAC 地址。
-
解决方案:清除该交换机的端口到 MAC 地址的映射。
-
原因:代理服务器正在向处于“单一”相关性模式的群集中发送使用单个 IP 地址的所有连接。
-
解决方案:将代理服务器配置为使用多个 IP 地址。
在群集主机之间意外交换通讯,并且断开了 TCP 连接。
-
原因:单播网络地址导致交换集线器出现问题。如果使用交换集线器使群集主机互连,则必须使用 NLB 多播支持。否则,在多个交换机端口上使用同一个单播网络时,交换机可能行为异常。
-
解决方案:确认已在“网络负载平衡属性”对话框中选中了多播支持。如果不希望使用多播支持,则可以用集线器或同轴电缆而不是用交换机使群集主机互连。
没有在群集主机之间对网络通讯均匀地进行负载平衡。
-
原因:网络通讯来自于有限数量的 IP 地址,可能是由于代理服务器上的设置引起的。
-
解决方案:将代理服务器配置为使用多个 IP 地址。
对 Microsoft Internet Security and Acceleration (ISA) Server 使用网络负载平衡时,一个群集主机记录被引导至另一个主机的专用 Internet 协议 (IP) 地址的被阻止的数据包。
-
原因:将其中一个群集主机配置为主机优先级标识符等于 1。
-
解决方案:不要将任何群集主机配置为主机优先级标识符等于 1。使用大于 1 的数字。有关详细信息,请参阅配置网络负载平衡主机参数。
无法在 64 位版本的环境中创建网络负载平衡群集。
-
原因:可能没有为您的环境运行相应的 NLB 版本。在 64 位版本计算机上使用 32 位版本的 NLB 时,NLB 无法形成群集。由于 32 位 NLB 组件(nlb.exe、wlbs.exe 和 nlbmgr.exe)看上去在 64 位版本环境中正常运行,因此可能会检测不到此问题。
-
解决方案:如果您计划使用 64 位版本计算机环境,则必须使用 64 位 NLB 版本。
|
备注:本文中有大量的文字引用自网络,在此向资料的来源地表示深深感谢,谢谢作者,谢谢Google,谢谢百度….
本文出自 “曾垂鑫的技术专栏” 博客,谢绝转载!