我正在远程为客户排除网络故障。他们遇到的问题是,Web 服务器和后端搜索服务器之间偶尔会出现“连接超时”的情况。他们可以使用临时服务器轻松重现此行为。我让他们在两台服务器上运行 Wireshark,我发现 SYN 数据包被反复发送。而且它们通常在接收端不可见。我想知道你们认为原因可能是什么?
我首先想到的是服务器之间的防火墙。现在他们说他们将后端搜索服务器与 Web 服务器连接到同一个网络,这让我很困惑。
更多详细信息:我假设服务器是 Windows Server 2008。我从未去过客户所在地。Web 服务器使用启用了传输安全性的 WCF 来访问后端服务器。他们似乎能够排除重负载,因为这些问题在轻负载下也会出现。
对我来说,这听起来很明显,网络中肯定存在某些问题,导致 SYN 未出现在目的地,但现在他们说他们已经关闭了防火墙规则,关闭了 Windows 防火墙,甚至将服务器放在了同一个网络上。而我却一无所知。
更新:他们进行的最新测试是在与搜索服务器位于同一子网的服务器上运行控制台应用程序(模拟重复的 Web 请求)。并且两个服务器都作为 VMWare 实例运行。
有想法吗?
答案1
可能的原因:
1)交换机/路由器上基于速率的过滤
2)由于电缆/网卡故障或拥塞导致帧丢失
答案2
您是说 Web 服务器和搜索服务器都在同一个子网上吗?从网络角度来解决这个问题,在排除故障时只使用 IP 地址,以排除任何带有错误 DNS 条目等的恶作剧。
为了让我理智一点,我要说的是,网络服务器的 IP 是 wwww,搜索服务器的 IP 是 ssss
wireshark 没有看到 SYN 到达,排除了防火墙问题,wireshark 应该观察到达接口的数据包前防火墙就有机会对它们采取任何行动。
我要做的第一件事是检查 Web 服务器上 arp 缓存中的条目是什么,对于 ssss,在大多数平台上,这只是arp -an
在命令行上,然后我会检查搜索服务器的 mac 地址是否与此匹配。如果不匹配,则很可能网络上有另一个设备具有与搜索服务器相同的 IP,并且它们正在争夺该 IP。
另一个角度是设置服务器之间的连续 ping,看看是否发现任何数据包丢失。这可能意味着电缆问题或双工不匹配,但从您的描述来看,这似乎不太可能。是否可以进入交换机并检查接口是否有错误?假设它们是虚拟的,这会影响同一 VHost 上的所有服务器……所以再次强调,这似乎不太可能。
也许 VHost 设置的某种接口绑定不太正常?我曾见过这样的情况:六个 ESX 接口之一末端的交换机端口配置错误,导致了一些有趣的副作用。
更复杂的情况可能是两台服务器之间有一个“线路中的障碍”设备 - 可能是第 2 层负载平衡器、第 2 层防火墙或某种 IPS。这些设备中的任何一个都有可能阻止服务器之间的帧。我希望您的客户已经提到了这一点!