双工不匹配引故障
2015-12-03
最近,单位中心机房的一台服务器经常莫名其妙地出现网络中断。到机房重启后过一段时间,网络又出故障。但是,连接在同一交换机下的其他服务器并没有出现类似故障问题。
故障排查
故障设备为一台DELL PowerEdge R620服务器,该服务器新采购后不久,服务器上的应用并不多,主要功能为通讯服务器,在线用户也就200人左右。检查服务器网卡,发现网卡灯闪烁正常,网络配置没问题,网卡驱动也正常安装。通过Ping测试网络,也没有发现问题。但是在远程登录服务器的时候,发现和其他服务器相比,有点卡。与DELL厂商联系,工程师建议我使用DELL官方故障排查工具DEST 检测问题。在服务器上运行检测工具后,并未发现服务器硬件上有问题,工程师建议更新网卡驱动。
在DELL官网下载最新的网卡驱动,安装并重启服务器,服务器平稳运行了一两天,网络又出现中断。根据用户反映,网络中断前,用户正在从该服务器上拷贝文件。根据前面的推断,问题应该出在网络方面。
服务器接入的交换机为一台H3C 5500,远程登录到该设备,发现服务器所在接入端口被强制设置为速率100M全双工模式运行,在Input方面有大量错误数据包被丢弃。再看看服务器的网卡配置,在属性的“高级”中看到,网卡的速率和双工模式为自动协商(如图1)。那自动协商的结果是不是也和交换机端一样,100M全双工模式呢?
图1 “高级”选项卡
故障分析
网卡在设置为自动协商时,一种是两端都采用自动协商的方式通信,比如A机器和B机器在进行自动协商,A机器具有10/100/1000M全/半双工能力,而B机器只有10/100M全/半双工能力,这样双方共有的最高链路能力为100M,全双工。一旦双方进行自动协商,链路就会运行在双方能够支持的最佳能力下。另一种情况就是我遇到的情况,一端为强制速率和双工模式,另一端为自动协商模式。在这种情况下,因为强行设定的一端不进行协商,协商站点没有方法知道强行设定站点工作在哪种双工方式下。协商站点为了避免全半双工不匹配,根据802.3标准,它必须与强行站点使用相同的速率,但是工作在半双工方式下。不管速率如何(除了10G),半双工是以太网的默认方式。在许多情况下,这会产生全半双工不匹配问题。
联系当前问题,故障产生的原因就显而易见。服务器端采用的自动协商,而交换机端采用的则是强制100M 全双工模式。最后,自动协商后的结果是100M半双工模式运行,这样就和交换机端配置不匹配,所以在通信时就会产生很多错误数据包,进而出现网络故障。
故障解决
明白故障问题的成因,问题就迎刃而解。一种方法就是把服务器端也强制设置成100M全双工模式,保持和交换机端配置一致。另一种就是改变交换机端的配置,去除原先配置的强制双工和速率,也改为自动协商机制。结合实际情况,我采用第二种方法更加合理,因为服务器网卡最高支持1000M速率,而交换机端也是10/100/1000M自适应模式,这样自动协商后,就可以获得1000M的高速率,更高的发挥服务器的网络性能。
具体处理方法是,在H3C交换机端口模式下采用undo命令去除原来配置的速率和双工模式,设备就会自动恢复成默认的自动协商模式。
最后,登录到服务器和交换机上,看到两端的速率都变成1000M全双工模式。随后观察了几天,没有再次出现故障问题。
经验总结
在配置网络时,最合理的做法就是把两端都设置成自动协商模式,因为在很多时候,我们并不一定了解设备网卡或者端口具体支持的最大速率和双工模式,但只要将两端都设置成自动协商,两端自然会通过协商,获得最大支持的网络速率,从而更好地发挥网络性能。