我是荷兰一家图书馆的系统管理员。我们的工作人员使用瘦客户端与我们的会话服务器进行远程桌面会话。我们在 NLB 群集中配置了两个会话服务器 (Windows 2008 R2)。两台服务器都进行了虚拟化。一台Hyper-V(RDS01)另一个VMWare ESX(RDS03)。
NLB 群集配置为以单播模式工作。NLB 群集中的两台服务器都有两个网络适配器。一个用于 NLB 群集,另一个用于对等通信。
我们遇到的问题是,经常需要与 NLB 群集进行远程桌面会话失败(与尝试连接到不存在的 IP 或主机名时的错误相同)。经过一番挖掘,我发现当我尝试在 RDS03 上的 NLB 管理器中查看集群时,它经常无法“发现”RDS01。反过来就可以了(从 RDS01 到 RDS03)。
下面的图片 1 显示了 RDS01 上的 NLB 管理器 (成功)。
下图 2 显示了 RDS03 上的 NLB 管理器 (失败)。
正如您在第一张图片中看到的,我禁用了 NLB 群集中的 RDS03。只有 RDS01 是 NLB 群集中的活动服务器。这解决目前与 NLB 群集的连接问题(因此我认为问题出在 RDS03 上)。
我了解到 NLB 管理器使用 ICMP 来“发现”集群中的其他主机。因此,我决定使用数据包嗅探器(Microsoft 网络监控)来检查 NLB 管理器发出的数据包。我注意到 RDS01 发出的数据包使用了 RDS03 上的对等适配器的 IP 地址。此外,RDS03有时使用 RDS01 的 NLB 群集 IP 地址。
以下是在 RDS01 上捕获的数据包详细信息。
Frame: Number = 2812, Captured Frame Length = 74, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[00-15-5D-63-97-23],SourceAddress:[00-15-5D-63-96-2B]
+ Ipv4: Src = 10.81.129.159, Dest = 10.81.129.161, Next Protocol = ICMP, Packet ID = 8406, Total IP Length = 60
+ Icmp: Echo Request Message, From 10.81.129.159 To 10.81.129.161
接下来,在 RDS03 上捕获的数据包详细信息。当 NLB 管理器发出此包时,发现失败。
Frame: Number = 211, Captured Frame Length = 74, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[02-BF-0A-51-81-A5],SourceAddress:[00-15-5D-63-97-23]
+ Ipv4: Src = 10.81.129.161, Dest = 10.81.129.167, Next Protocol = ICMP, Packet ID = 11326, Total IP Length = 60
+ Icmp: Echo Request Message, From 10.81.129.161 To 10.81.129.167
最后,在 RDS03 上捕获数据包的详细信息。当 NLB 管理器发出此包时,发现成功。
Frame: Number = 2095, Captured Frame Length = 74, MediaType = ETHERNET
+ Ethernet: Etype = Internet IP (IPv4),DestinationAddress:[00-15-5D-63-96-2B],SourceAddress:[00-15-5D-63-97-23]
+ Ipv4: Src = 10.81.129.161, Dest = 10.81.129.159, Next Protocol = ICMP, Packet ID = 21180, Total IP Length = 60
+ Icmp: Echo Request Message, From 10.81.129.161 To 10.81.129.159
以下是 NLB 群集及其服务器的 IP 配置。
10.81.129.165...NLB 群集 IP
10.81.129.167...RDS01 的 NLB IP
10.81.129.169...RDS03 的 NLB IP
10.81.129.159...IP RDS01(用于对等的第二个 NIC)
10.81.129.161...IP RDS03(用于对等的第二个 NIC)
为什么 RDS03 使用 RDS01 的 NLB 群集 IP?为什么它还使用 RDS01 的对等 IP?是什么导致了这种不一致的行为?
答案1
回答我自己的问题,问题出在 DNS 查找上。在我清除 RDS03 上的 DNS 缓存之后(出现不一致行为的地方)。
ipconfig /flushdns
我在 RDS03 NLB 管理器上进行了集群刷新,发现它对 RDS01 进行了 DNS 查找。现在我确信 NLB 管理器正在使用主机名进行通信。DNS 服务器使用以下两个 IP 地址进行响应:
10.81.129.159 ...IP RDS01(用于对等的第二个 NIC)
10.81.129.167 ...RDS01 的 NLB IP
每次 RDS01 发现失败时RDS01 的 NLB IP是 DNS 查找回复的第一个 IP。每次发现成功时IP RDS01是第一个。
删除后RDS01 的 NLB IPDNS 服务器的 DNS 记录问题就解决了。现在我只需要确保 NLB IP 地址不会再在 DNS 服务器上注册。这是 NLB NIC 的 TCP/IP 协议中的一项设置。参见下图。