我们有分布式缓存软件(NCache,具体来说),部署在两台 Windows 2003 x64 服务器上。该软件配置为运行多个缓存,所有缓存均处于“复制”模式(这是典型的主动-被动故障转移群集 - 即客户端与一台服务器通信,该服务器将所有数据复制到第二台服务器,这样如果第一台机器离线,第二台机器就会接管。请注意,这不是 Windows 群集 - 所有复制和故障转移均由 NCache 处理)。
几个月来一切都运行良好,但几周前我们开始在 NCache 日志中看到与复制相关的异常。异常每隔几天发生一次,而且似乎不可预测。NCache 支持基本上说“检查您的网络”。我们照做了。我们发现并解决了一个问题(细节太长,无法解释,主要问题是第二台服务器上的网络驱动程序和该服务器连接的交换机都报告了大量网络冲突)。
那是一周前的事了。网络修好后,异常消失了,我们以为一切都没问题了。但今天我们又遇到了完全相同的复制异常。唯一的区别是,盒子上的网络驱动程序和交换机都没有报告任何错误。我看到了问题监控 Windows Server 2003 服务器之间的网络中断,但不要以为我们可以在这些盒子上运行 wireshark——它们上的网络流量在白天平均约为 100Mbit,而且由于都是 NCache 流量,因此在等待故障发生的同时花几天时间捕获所有流量是不现实的。我们还能做些什么来确定它是否仍然是网络问题?
答案1
网络故障排除可能很困难,找到网络问题的根本原因可能需要大量工作。如果您无法在服务器上安装和运行 Wireshark,您可以将其安装在另一台计算机上,并设置您的交换机(如果支持)以将服务器交换机端口镜像到 Wireshark 计算机连接到的端口。通过服务器交换机端口的每个数据包的副本都将被复制到此端口。您可以配置 Wireshark 以在设定的时间间隔(时间或大小)将捕获数据保存到多个文件中,并且可以配置它以限制它捕获的每个数据包的数量。您不太可能需要捕获每个数据包的全部内容来查看发生了什么,您可能只需要捕获足够的数据包来查看第 1 层到第 3 层发生了什么。
不要忘记再次查看物理层。当出现问题时,清除交换机上的计数器,然后检查交换机端口是否存在冲突、错误、丢失等。查看相关交换机端口的利用率,并查看交换机的 CPU 和内存利用率。
还要查看每个服务器中 NIC 的性能计数器,特别是出站队列长度、数据包出站错误和数据包接收错误计数器。