分享

Windows NLB单播和多播区别及故障实例分析

 xiaozhuang 2017-12-26


陈爽


摘要

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


本次借客户处Exchange环境实践后的经验谈谈Windows NLB单播和多播区别及应用场景,文中除了对NLB做简要介绍外,着重对服务器故障和NLB异常工作的现象进行了分析。


正文

一、  理论简介

Windows NLB有单播与多播两种模式,两种模式原理各有不同。

1、单播模式下,NLB服务会重新对每个节点中启用NLB的网卡分配MAC地址(此MAC地址称为群集MAC地址),并且所有的NLB节点均使用相同的MAC地址(均使用群集MAC地址),同时NLB会修改所有发送的数据包中的源MAC地址,这样就导致交换机不能将此群集MAC地址绑定在某个端口上。 工作在单播模式下的NLB可以在所有网络环境下正常运行(兼容性最好);

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


二、  功能特点

l  可伸缩性

对于 NLB 群集而言,可伸缩性是指当群集的全部负载超过其能力时逐步将一个或多个系统添加到现有群集中的功能。为支持可伸缩性,NLB 可执行以下操作:

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

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

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

在负载降低时,支持从群集中删除主机。

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


l  高可用性

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

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

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

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


l  可管理性

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

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

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

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

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

可以在群集主机上启用 Internet 组管理协议 (IGMP) 支持,以控制交换机广播(在多播模式中操作时)。

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

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


三、  案例分析

前段时间客户处出现Exchange前端CAS无法访问的故障,排障发现前端使用的网络负载均衡是用NLB实现,最终诊断问题也是出现在此。

环境背景:两台Exchange前端服务器CAS,使用NLB实现负载均衡;

故障现象:客户端无法使用OUTLOOK客户端连接至服务器,邮件收发功能全部中断。


大致诊断过程:故障发生时,测试发现客户端网络已经无法连接指前端CAS服务器,包括负载均衡的虚拟IP以及真实地址。测试其他同网段的没有做防火墙限制的服务器也无法连接指前端,包括域控制器等。而进一步测试发现域内客户端和DC之间的通讯正常,由此判断问题出现在CAS服务器上。直接登录CAS服务器,发现已经无法用域管理员账号登录,本地管理员账号登录后测试两台前端与同网段服务器全部不通。在排除了网络设备的影响后,检查CAS服务器的网络配置正常,查看NLB负载均衡器时发现问题,聚合IP正常情况下是两个实体地址虚拟出一个虚拟IP地址,然而当时在NLB负载均衡器管理器上只能看到一台服务器的IP显示。


检查NLB的设置,均为正常。值得注意的是此处使用了单播的方式进行处理,由于单播下所有绑定群集的网络适配器的MAC都相同,所以在单网卡的情况下,各节点之间是不能通讯的,这也是单播推荐双网卡配置的原因之一。为了避免交换机的数据洪水,单播应该结合VLAN使用,即将两个实际节点的网线接到同一个VLAN下使用。网络设备上确认的确是这么实现。然而此时聚合无法实现,管理器上只能显示一个实际IP,也无法直接添加IP成功聚合。


进一步研究发现通过这种方式聚合时两台服务器是不能直接通过聚合的实体IP进行通讯的,因为两个网卡此时表现出来具有相同的MAC地址。此时的内部通讯需要使用心跳线,这样两台服务器才能有效的确认对方是否处于在线状态。后来查看监控告警发现,心跳IP此前出现过不通的现象,如果心跳IP不通,两台服务器将认定对方下线,IP聚合也会分解,这样外来的数据包传递到虚拟地址时已经无法正常的传递到相应的实体地址了。这个现象有点类似故障转移群集里面的脑裂现象。究其原因就是两台计算机的内部通讯异常。

解决办法:最后解决是通过重新建立新的聚合,舍弃以往的配置,故障成功解决。后续也针对可能的“脑裂”现象对服务器配置进行了优化:包括添加对方的额host记录,让两台服务器能正常通讯;调整生产IP和心跳IP网卡的主次顺序,让服务器设置更加规范化;也建议客户使用硬件产品做负载均衡用,排除一些软件的不稳定性和不全面带来的影响。


【总结】


由于所有的NLB节点具有相同的MAC地址,所以NLB节点之间不能通过自己原有的专用IP地址进行通讯。节点之间无法ping通。此时可以采用双网卡来解决节点间通信问题,一块网卡用于启用负责均衡,一块网卡用于节点间通讯。


由于NLB所使用的群集MAC地址没有绑定在某个具体的交换机端口上,所以所有的NLB通讯均通过在交换机的所有端口上广播进行。为了避免泛洪现象,需要将所有NLB节点添加到一个VLAN中。


在使用NLB在做负载均衡的时候,单播环境下保证第二张网卡能正常通讯是很重要的,直接点说就是做心跳IP的host记录很有必要性。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多